`
gaozhonghui
  • 浏览: 242593 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古自治区
社区版块
存档分类
最新评论

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
   

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
分享到:
评论
1 楼 Aceslup 2016-08-15  
有一个地方不太明白,就是到这一步:若可以下载设置 response.setHeader("X-Accel-Redirect",filePath);这个返回给客户端的,还是给nginx的?

相关推荐

    nginx带nginx-http-flv模块windows编译版rtmp

    **Nginx与Nginx-RTMP及Nginx-HTTP-FLV模块** Nginx是一款高性能、轻量级的Web服务器/反向代理服务器,被广泛应用于高并发场景,尤其在处理静态文件、HTTP缓存以及反向代理等方面表现出色。Nginx以其高效的事件驱动...

    nginx + nginx-http-flv-module-1.2.9

    标题 "nginx + nginx-http-flv-module-1.2.9" 暗示我们要讨论的是一个基于 Nginx 的 HTTP FLV 模块,版本号为 1.2.9。Nginx 是一个高性能的 Web 和反向代理服务器,而 nginx-http-flv-module 是 Nginx 的一个扩展...

    nginx上传下载之nginx-upload-module-2.3.0

    cp -r ../nginx-upload-module-2.3.0 nginx-1.21.x/ cd nginx-1.21.x/ ./configure --add-module=../nginx-upload-module-2.3.0 \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-pcre make ...

    nginx-sticky-module-1.25.zip

    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-http-flv-module-1.2.10(包含nginx-rtmp-module)

    而nginx-rtmp-module则是一个额外的Nginx模块,它增加了对Real-Time Messaging Protocol (RTMP)的支持,使Nginx能够作为RTMP服务器接收并分发直播流。 1. **HTTP FLV 模块详解** HTTP FLV模块使得Nginx可以处理FLV...

    nginx-module-vts.tar.gz

    1. **安装Nginx-Module-VTS**:首先,解压`nginx-module-vts.tar.gz`,然后按照其README文档指示编译并安装Nginx,确保Nginx配置文件中加载了该模块。 2. **配置Nginx**:在Nginx的配置文件中,为每个需要监控的...

    nginx-prometheus-exporter-0.11.0-linux-386.tar.gz

    《Nginx-Prometheus-Exporter:实现高效Web服务器监控》 在现代互联网服务中,监控系统的性能和稳定性至关重要。Nginx作为广泛使用的反向代理和负载均衡服务器,其性能指标的实时监控能帮助我们及时发现并解决问题...

    nginx-upstream-jvm-route 和 nginx 对应版本,亲测可用

    此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...

    nginx-http-flv-module(windows版)

    --> nginx-1.21.6 ======================== 在网上查找半天都只有教程,没有可免费下载的版本,深知没有积分遍地找资源的痛苦,无奈之下只好自己按照教程一步一个坑编译出来的,供大家免费下载使用。(无毒放心使用...

    win环境使用nginx的nginx-http-flv-module.zip

    在windows 7 64位 环境下使用nginx的nginx-http-flv-module搭建flv视频流播放所有的安装包,参考:https://blog.csdn.net/qq_33071429/article/details/102628008

    添加nginx-http-flv-module模块并重新编译后的nginx(windows版)

    1. 下载`nginx-http-flv-module`源代码:这里你已经有了`nginx-http-flv-module-1.2.9`文件夹,这是模块的源代码。 2. 获取Nginx源代码:确保下载适用于Windows的Nginx源代码,这通常可以从Nginx官方网站获取。 3....

    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-1.18.0-2.el7.ngx.x86_64.rpm...

    headers-more-nginx-module-0.37.tar

    headers-more-nginx-module-0.37.tar

    windows下编译nginx-http-flv-moudle

    然后下载Nginx源代码和`nginx-http-flv-module`源码,通过Nginx的configure脚本配置编译选项,将模块加入到Nginx中,接着执行make命令进行编译。需要注意的是,编译时可能需要额外的依赖库,如OpenSSL、PCRE等。 5....

    ingress-nginx-controller-1.9.yaml

    还可以利用 `kubectl describe ingress` 或 `kubectl logs deployment/nginx-ingress-controller` 查看更详细的日志信息,以诊断可能存在的问题。 总之,Ingress-Nginx 控制器是 Kubernetes 环境下实现复杂网络路由...

    Nginx-GUI-For-Windows-x64-v1.6.zip

    在给定的压缩包文件“Nginx-GUI-For-Windows-x64-v1.6.zip”中,包含了一个专为Windows 64位系统设计的Nginx图形用户界面(GUI)版本,版本号为1.6。这个GUI工具的主要目的是简化Nginx的配置、启动和状态监控过程,...

    headers-more-nginx-module-0.34

    1. 添加头部:除了Nginx原生支持的头部设置外,headers_more_nginx_module允许我们在响应中添加自定义的HTTP头部,例如X-Accel-Redirect、X-Frame-Options等,以实现更多安全和性能优化策略。 2. 修改头部:对于...

    nginx-upstream-jvm-route-1.15

    【标题】"nginx-upstream-jvm-route-1.15" 涉及的核心知识点是Nginx的upstream模块与JVM路由的整合,特别针对Nginx 1.15版本。这个项目旨在解决在配置Nginx时遇到的特定错误提示“nginx: [emerg] invalid parameter ...

    nginx-rtmp-module

    本文将详细介绍如何利用 Nginx 和 Nginx-RTMP-Module 搭建流媒体服务器,并实现直播功能。 一、Nginx-RTMP-Module 简介 Nginx-RTMP-Module 是由 Lavf57 开发的一个开源项目,其核心功能是添加对 RTMP 协议的支持,...

    windows平台nginx编译nginx-http-flv-module

    在给定的压缩包文件中,"使用必看.txt"可能包含了编译和使用过程中的注意事项,而"nginx-rtmp.zip"可能是包含了RTMP模块的源代码,这在搭建流媒体服务器时也会用到,因为HTTP FLV Module通常与RTMP模块结合使用,为...

Global site tag (gtag.js) - Google Analytics