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(""))
{
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();

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

  1. JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);

    JSP禁用缓存的方式    使用服务器端控制AJAX页面缓存:        response.setHeader( "Pragma", "no-cache" ...

  2. response.setHeader("Cache-Control","no-cache");的作用

      1. response.setHeader("Cache-Control","no-cache"); This is used to prevent the ...

  3. response.setHeader()的用法

    一秒刷新页面一次 response.setHeader("refresh","1"); 二秒跳到其他页面 response.setHeader("re ...

  4. nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

    geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_modu ...

  5. Servlet实现定时刷新到另外一个页面response.setHeader("refresh", "3;url=/...")

    想要实现,访问Responsedemo11的时候,3秒钟后,跳转到ResponseDemo10 用   response.setHeader("refresh", "3; ...

  6. nginx利用limit模块设置IP并发防CC攻击

    nginx利用limit模块设置IP并发防CC攻击 分类: 系统2013-01-21 09:02 759人阅读 评论(0) 收藏 举报 来源:http://blog.xencdn.net/nginx- ...

  7. response.setHeader各种使用方法

    一秒刷新页面一次 response.setHeader("refresh","1"); 二秒跳到其它页面 response.setHeader("re ...

  8. response.setHeader("Content-disposition","attachment;filename="+fileName) 下载时文件名中存在空格错误

    最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...

  9. 解决response.setHeader("Content-disposition" 中文乱码问题

    Content-Disposition中文乱码 Response.setHeader(”Content-Disposition”, “attachment; filename=” + fileName ...

随机推荐

  1. Java中读取xml方法

    package zaxiang; import java.io.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parser ...

  2. profiler加入计划任务

    创建profiler的存储过程: USE [xxxDB] GO /****** Object: StoredProcedure [dbo].[CreateProfile] Script Date: 2 ...

  3. C#学习笔记-----C#枚举中的位运算权限分配

    一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会 ...

  4. CLR via C#(11)-无参属性、有参数属性(索引器)

    一. 无参属性 1. 定义属性 无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断.属性的定义其实不复杂,先看个直观的例子: 说明: 属性要定义名称和类型,且类型不能是void. 属性是 ...

  5. javascript - DOM对象控制HTML元素详解

    1.方法   getElementsByName() -- 获取name getElementByTagName() -- 获取  getAttribute()         --获取元素属性 se ...

  6. VS使用技巧(转)

    转自http://www.cnblogs.com/xpvincent/p/3596553.html i. Ctrl-M-O 折叠所有方法 ii. Ctrl-M-P 展开所有方法并停止大纲显示(不可以再 ...

  7. Linux命令中特殊符号

    转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html   在shell中常用的特殊符号罗列如下:# ; ;; . , / \ 'strin ...

  8. Linux如何查看与/dev/input目录下的event对应的设备

    1.查看当前的设备 dev/input/ 2.查看设备的名称 cat /proc/bus/input/devices

  9. poj 3278:Catch That Cow(简单一维广搜)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 45648   Accepted: 14310 ...

  10. 算法系列:geometry

    1.基本几何变换及变换矩阵 基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移.比例.旋转.反射和错切等. 1.1 平移变换 是指将p点沿直线路径从一个坐标位置移到另一个坐标位置的重定位过程 ...