功能: 下载 用X-Accel-Redirect把文件委托给Nginx输出:
主要应用nginx的X-Accel-Redirect将文件直接交给nginx做处理从而减少服务器负载
网站在服务器上的根目录为:/home/www
文件的真实地址为 http://www.qvdv.net/down/file/2011/12/31/abcd.zip
下载地址为:http://www.qvdv.net/down.php?filepath=2011/12/31/abcd.zip&filename=abcd.zip
1、只有通过php的下载地址能够下载并且“零内存”消耗。
2、通过http://www.qvdv.net/down/file/2011/12/31/abcd.zip 真实的路径是不允许下载的。
3、在php里可以进行一写下载权限的处理。nginx配置文档
在配置文件中做以下设定,表示这个路径只能在 Nginx 内部访问,不能用浏览器直接访问防止未授权的下载。
Ngnix配置/usr/local/nginx/conf/nginx.conf
http
{
……
#如果限制并发,添加下面这句:
limit_conn_zone $binary_remote_addr zone=perip:10m;#最大分配10M内存存储会话状态
……
}
配置每个虚拟主机的/usr/local/nginx/conf/vhost/qvdv.net.conf
server
{
……
location down{
internal;
#如果限制并发,添加下面这句:
limit_conn perip 1;#每个IP的并发数(一个客户端1个下载,超出503错误,防止多线程下载占用过多带宽资源)
#限制速度
limit_rate_after 3m;
limit_rate 512k;#3M后,速度限制为512kb
alias /home/www/down/file/;
}
……
}
列举php代码:
//发送Http Header信息 开始下载
//参数:$filename 下载文件路径
//$showname 下载显示的文件名
//$expire 下载内容浏览器缓存时间
header("Pragma: public");
header("Cache-control: max-age=".$expire);
//header('Cache-Control: no-store, no-cache, must-revalidate');
header("Expires: " . gmdate("D, d M Y H:i:s",time()+$expire) . "GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",time()) . "GMT");
header("Content-Disposition: attachment; filename=".$showname);
header("Content-Length: ".$length);
header("Content-type: ".$type);
header('Content-Encoding: none');
header("Content-Transfer-Encoding: binary" );
header("X-Accel-Redirect: down".$fileName);
header("X-Accel-Buffering: yes");
header("Accept-Ranges: bytes");
#header("X-Accel-Limit-Rate :1024"); //速度限制 Byte/s
本文版权所有,转载须注明:来源 https://www.qvdv.net/qvdv-oop-821.html