网络编程

Nginx配置sendfile

作者:qvdv来源:www.qvdv.com更新时间:2018-03-24

功能: 下载   X-Accel-Redirect把文件委托给Nginx输出:                     

主要应用nginxX-Accel-Redirect将文件直接交给nginx做处理从而减少服务器负载

网站在服务器上的根目录为:/home/www

文件的真实地址为 http://www.qvdv.com/down/file/2011/12/31/abcd.zip

下载地址为:http://www.qvdv.com/down.php?filepath=2011/12/31/abcd.zip&filename=abcd.zip

1、只有通过php的下载地址能够下载并且“零内存”消耗。

2、通过http://www.qvdv.com/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.com.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

本文版权所有,转载须注明:来源 http://www.qvdv.com/qvdv-oop-821.html