nginx 利用 X-Accel-Redirect response header 控制文件下载
自己开发的项目有下载的功能,刚开始的时候由于用户少,利用后台程序判断是否有下载权限,然后用流的方式输出到客户端。但是,随着用户的增加这种方式给服务器带来了压力。随后,想把下载的任务交给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
#### 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;}
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); }