收录了这篇文章
使用阿里云对象存储的时候,私有的文件,生成一个授权key,就可以访问私有的文件。使用 Nginx 也可以开发出这种功能。
比如,一个静态资源地址是 https://test.com/uploads/test.mp3,现在使用 Njs 可以做到无法使用这个链接直接访问,需要添加后面的加密字符串才能访问。
https://test.com/uploads/test.mp3?key=3F3MVJbx-YCb5NTIpf2x77xtNmQxc-5yx_qM
nginx.conf 配置文件添加:
http { ... ### Njs 配置 js_path '/usr/local/nginx/conf/njs/'; js_import test from test.js; ... }
虚拟主机文件:
server { listen 80; server_name test.com; charset utf-8; location / { js_content test.my_headers_filter; } location @app-backend { root /data/www/_test; index index.php index.html index.htm; } }
Njs 文件 test.js:
function getQueryStringArgs(qs){ var args = {} //保存数据的对象 var items = qs.length ? qs.split("&") : [] //拆分每个字符串参数 var item = null, name = null, value = null var len = items.length for(var i=0;i<len;i++){ //遍历,逐个将每一项添加到args对象中 item = items[i].split("=") name = decodeURIComponent(item[0]) value = decodeURIComponent(item[1]) if(name.length){ args[name] = value } } return args } function my_headers_filter(r) { r.headersOut['Content-Type'] = "application/json; charset=utf-8"; var get = getQueryStringArgs(r.variables.args); if (r.method == 'GET' && get['key']=='123') { r.internalRedirect('@app-backend'); return; } else { r.return( 400 , JSON.stringify(get) ); return; } } export default {my_headers_filter};
参考文档:https://nginx.org/en/docs/njs/index.html
修改时间 2023-11-02
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。