Nginx 利用 X-Accel-Redirect response.setHeader 控制文件下载

nginx.conf

location / {
            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;
            proxy_pass http://backend;
        }

location /file/ {
            internal;
            alias /usr/local/;
        }

设置成 "internal" 属性是用来禁止浏览器直接访问的,只信任后台返回的 "X-Accel-Redirect"。

getDownFile.jsp

<%
    String filename = request.getParameter("filename");
    response.setHeader("Content-Disposition", "attachment;filename="+filename);
    response.setHeader("Content-Type", "application/octet-stream");
    response.setHeader("X-Accel-Redirect", "/file/"+filename);
%>

 http://10.10.3.205/test/getDownFile.jsp?filename=5.zip

请求到nginx后会发给Tomcat,先判断是否可以下载,若可以下载设置X-Accel-Redirect回给nginx,nginx重新定位到物理文件进行下载。

 

下面是JFinal的用法

html

<a href="<%=path%>/redis_test/testResponse?id=1&filename=5.zip">下载</a>

后台

String filename = getPara("filename");
        String id = getPara("id");
        if(id.equals("1"))
        {
            getResponse().setHeader("Content-Type", "application/octet-stream");
            getResponse().setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode("中文名.zip", "UTF-8"));
            getResponse().setHeader("X-Accel-Redirect", "/file/"+filename);

        }
        renderNull();
时间: 2024-09-28 15:33:12

Nginx 利用 X-Accel-Redirect response.setHeader 控制文件下载的相关文章

Flash动画中利用as实现对音乐的控制

flash动画|控制 如何利用as实现对音乐的控制? 解决思路 利用帧标签,通过按钮的跳转来实现对音乐的开关控制. 具体步骤 1.首先在场景的第1帧添加as: ss=new Sound();       ss.attachSound("sound"); ss.start();  这是绑定声音命令,我们在前面已经向大家介绍了. 2.然后在停止按钮上加命令: on (release) {     gotoAndStop("Off");  //切换影帧到off帧标签   

node.js中的http.response.setHeader方法使用说明_node.js

方法说明: 设置头文件信息. 如果将要发送的信息已包含头文件,执行该方法后头文件的值将被改写. 如果一个头文件需要传递多个值,可以使用数组. 语法: 复制代码 代码如下: response.setHeader(name, value) 接收参数: name          响应头的类型,注意这个名字是不区分大小写. value           响应头的值 例子: 复制代码 代码如下: response.setHeader("Content-Type", "text/ht

用response.setHeader导出excel遇到的问题

问题描述 代码如下:MessageResourcesmessage=getResources(request,"FileNameResources");StringtemplateFolder=message.getMessage("templateFolder");StringtempFileName=message.getMessage("YearGradeExportFileName");StringfilePath=request.get

JSP response对象实现文件下载的两种方式_JSP编程

一.JSP隐含对象response实现文件下载的介绍 (1)在JSP中实现文件下载最简单的方法是定义超链接指向目标资源,用户单击超链接后直接下载资源,但直接暴露资源的URL 也会带来一些负面的影响,例如容易被其它网站盗链,造成本地服务器下载负载过重. (2)另外一种下载文件的方法是使用文件输出流实现下载,首先通过response报头告知客户端浏览器,将接收到的信息另存 为一个文件,然后用输出流对象给客户端传输文件数据,浏览器接收数据完毕后将数据另存为文件,这种下载方法的优点是服 务器端资源路径的

Response.ContentType 控制输出文件类型(讨论下载文件问题)

response|控制|问题|下载 服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为"Text/Html"类型.<% Response.ContentType = "text/HTML" %><% Response.ContentType = "image/GIF" %><% Response.Cont

使用nginx利用虚拟主机搭建WordPress博客

最近开始打算学习nginx web服务器,既然是学习还是以实用为目的的.我们在此以搭建WordPress博客为例. 搭建WordPress博客,我们需要Mysql数据库.PHP环境和Nginx Web服务器.主要分为以下四个步骤: 1.Mysql数据库安装及配置 2.PHP.PHP-FPM及与PHP相关组件的安装及配置 3.Nginx Web服务器搭建与配置 4.wordpress安装 注意:本次实验,除了nginx使用源码安装外,其他的软件全部使用rpm包yum方式进行安装. 一. Mysql

Nginx列出目录和文件并用密码控制访问权限配置方法_nginx

这篇文章介绍怎样用web服务器列出指定的目录和文件,并对指定目录进行授权访问. 使用Nginx列出目录 准备工作 - 安装nginx和创建一些目录和文件: 复制代码 代码如下: $ sudo apt-get install nginx $ cd /usr/share/nginx $ mkdir web $ sudo mkdir directory{1,2,3} $ sudo touch file{1,2,3} $ ls directory1  directory2  directory3  fi

nginx利用proxy_cache来缓存文件

 代码如下 复制代码 user  zhangy users; worker_processes 10; error_log  /var/vlogs/nginx_error.log  crit; pid        /var/vlogs/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events

nginx访问控制:如何通过map来控制http_x_forwarded_for访问限制

通过map修改访问限制 目前,仓库通过allow host的方式来控制访问,但实际上没有启到作用,请求从lb过来,host已经变化,所以需要用http_x_forwarded_for来做限制. 允许访问ip19.29.55.15 13.56.217.135 211.22.42.100 119.9.14.149其他都403影响范围: 不升级的情况下不影响实现方法: 1.map(用于http段) 2.location if else来判断(server) map: map $http_x_forwa