自己开发的项目有下载的功能,刚开始的时候由于用户少,利用后台程序判断是否有下载权限,然后用流的方式输出到客户端。但是,随着用户的增加这种方式给服务器带来了压力。随后,想把下载的任务交给web 服务器来控制,但是这样又遇到了问题,我们怎样来控制它的下载权限呢?在网上找到了关于 nginx 利用 X-Accel-Redirect header 来控制文件下载权限。自己也做了实验。
操作步骤:
1. 安装 nginx 服务器
下载 nginx-1.0.10.tar.gz
tar xvfz nginx-1.0.10.tar.gz
cd nginx-1.0.10
./configure --with-http_stub_status_module --prefix=/opt/nginx-1.0.10
make
make install
2. nginx 中下载控制相关配置
根据下载的URI 配置 location 把可以下载 URI 设置成 "internal" 这样浏览器是不能直接访问的,我们只信任后台返回的 "X-Accel-Redirect",这样也就避免了客户端造 "X-Accel-Redirect" 下载文件情况,具体配置如下:
#### down zip faq files #########
location /save/zip/ {
internal; //拒绝浏览器直接访问
limit_rate 200k;// 限制下载速度 和 limit_zone one $binary_remote_addr 配合使用
alias /home/mindy/data4g12e/g12e_rsc/save/zip/;
error_page 404 =200 @backend; // 回调后台代理
}
location @backend {
rewrite ^/save/zip/(.*)$ /download/getDownFile.jsp?path=/save/zip/$1 break; // 配置rewrite 跳到后台程序
proxy_pass http://tomcatServer;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
break;
}
3. 后台程序控制 X-Accel-Redirect
在 getDownFile.jsp 中 代码
String isPay = 1 // 判断用户是否可以下载 设置 response Header
if(isPay == 1){
response.setHeader("Content-Disposition","attachment;");
response.setHeader("Content-Type","application/octet-stream");
response.setHeader("X-Accel-Redirect",filePath);
}
4. 配置完毕
e.g:
用户下载 http://down.xxx.com/save/zip/xxxxx.zip 文件
它会首先访问 http://down.xxx.com web服务器 符合"/save/zip/" location
会跳到后台服务器的 getDownFile.jsp 中,然看程序判断其是否可以下载
若可以下载设置 response.setHeader("X-Accel-Redirect",filePath);
若不可以下载就不用设置 X-Accel-Redirect
分享到:
相关推荐
--> nginx-1.21.6 ======================== 在网上查找半天都只有教程,没有可免费下载的版本,深知没有积分遍地找资源的痛苦,无奈之下只好自己按照教程一步一个坑编译出来的,供大家免费下载使用。(无毒放心使用...
在windows 7 64位 环境下使用nginx的nginx-http-flv-module搭建flv视频流播放所有的安装包,参考:https://blog.csdn.net/qq_33071429/article/details/102628008
windows平台nginx编译nginx-http-flv-module,可直接运行,基于nginx-1.17.10编译
nginx sticky是nginx的module,可以实现基于cookie的负载均衡。 下载后,在编译安装nginx时,用--add-module... ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=../nginx-sticky-module-1.25 --without-...
此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...
nginx带nginx-http-flv模块,包含所有rtmp功能,我自己在windows下编译的,直接可用,用的是最新版的1.19.4版本
资源说明: 1. 采用nginx最新版编译,包含最新的nginx-http-flv-module,以及基础...1. 将压缩包解压到D:\nginx-1.19.3目录下 2. 使用cmd命令打开DOS,并切换到D:\nginx-1.19.3 3. 使用nginxservice.exe install安装
nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm...
nginx-rtmp-win64;nginx-rtmp-win64 nginx-rtmp-win64 nginx-rtmp-win64 nginx-rtmp-win64 nginx-rtmp-win64nginx-rtmp-win64
1、最新版 nginx-http-flv-module(linux可执行程序,含nginx 1.19.3,http-flv-module:1.2.7) 2、内含说明文档,请下载查看。 3、请勿放置于中文路径下,否则无法启动 4、sbin/nginx -c conf/nginx.conf
nginx-rtmp模块源码包nginx-rtmp-module-master
1、最新版 nginx-http-flv-module(windows可执行程序,含nginx 1.19.3,http-flv-module:1.2.7) 2、内含说明文档,请下载查看。 3、请勿放置于中文路径下,否则无法启动
nginx-http-flv-module-1.2.10(包含nginx-rtmp-module)
nginx-http-flv-module-master.zip 为http-flv做直播推流需要用到的,功能比rtmp-moudle强大。
nginx-rtmp-module-master源码
"(五)prometheus 监控 nginx 服务"所需软件包其中之一:nginx-module-vts.tar.gz,大胆放心使用,不需要积分,只求浏览博客时留下您的评论和点赞,谢谢!
windows下编译nginx-http-flv-moudle,编译好的,下载开箱可用,作者亲测。用于直播推流,浏览器flvjs播放视频,支持无插件flash播放。
headers-more-nginx-module-0.34
docker-letsencrypt-nginx-proxy-companion-examples, 结合 Docker gen和 letsencrypt Nginx 代理伙伴的示例 docker-letsencrypt-nginx-proxy-companion-examples这个库是使用 nginx代理插件, docker gen和 docker-...
ffmpeg+nginx+nginx-rtmp-module搭建个人直播平台。 使用说明(ffmpeg+nginx+rtmp-module已经整合,支持HTTP,具体配置查看conf/nginx.conf): 1.解压后,运行nginx_start.bat。(查看监控状态 ...