php和nginx使用x-accel-redirect做文件下载

1
2
3
4
5
6
7
8
9
10
11
12

$file_url= "g1/".$file_path;
$file_name=$title.'.'.$file_ext;

header("Content-Type:application/octet-stream;charset=utf-8");
header('Content-Disposition: attachment; filename='.$file_name);
header('X-Accel-Redirect: /filedfs/'.$file_url);
header("X-Accel-Buffering: yes");
header("X-Accel-Limit-Rate :102400"); //速度限制 Byte/s
header("Accept-Ranges: none");//单线程 限制多线程
header("X-Accel-Charset: utf-8");

1
2
3
4
5
6
location  /filedfs/ {
internal;
proxy_pass http://10.8.8.100:8808/;
}


首先在 php 里面设置了 X-Accel-Redirect 值为 /filedfs/ + fileurl .
然后 nginx 里面将 /filedfs/ 转发到固定的url .并设置连接为内部的 internal .

遇到的问题 :

  1. 在配置 location 的时候. location 后面加了一个~ ,变成了正则表达式匹配.导致 proxy_pass 后面不能够添加/.
  2. 对于nginxinternal的理解不足.

参考

  1. http://wiki.nginx.org/XSendfile
  2. http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/
  3. http://blog.csdn.net/h70614959/article/details/37766697
  4. http://blog.csdn.net/guichenglin/article/details/7737790

php和nginx使用x-accel-redirect做文件下载

https://beixiu.net/dev/php-and-nginx-x-accel-redirect/

作者

张巍

发布于

2015-04-17

更新于

2015-04-17

许可协议

评论