当前位置:首页 > 技术文档 > 正文内容

php+nginx做下载服务器配置—X-Accel-Redirect

admin9年前 (2017-04-07)技术文档1951

网络存储下载服务器需求配置
缘由:
“传统的Web服务器在处理文件下载的时候,总是先读入文件内容到应用程序内存,然后再把内存当中的内容发送给客户端浏览器。这种方式在应付当今大负载网站会消耗更多的服务器资源。sendfile是现代操作系统支持的一种高性能网络IO方式,操作系统内核的sendfile调用可以将文件内容直接推送到网卡的buffer当中,从而避免了Web服务器读写文件的开销,实现了“零拷贝”模式。 ”

附上传统的php做下载的处理方法,这种方法无疑还是将文件先读取到内存然后输出到客户的浏览器。
传统方法一:(最消耗内存){我曾经使用过这一种方法,文件大小8兆左右,同时500+人下载服务器负载直线飙升到20几直到宕机}

$file_fullpath = '/home/www/filepath/2011/12/31/abcd.zip';
header('Content-type: application/octet-stream'); 
@readfile($file_fullpath);


传统方法二:(降低内存消耗)

$file_fullpath = '/home/www/filepath/2011/12/31/abcd.zip';
header("Content-Type: application/octet-stream");
$data = fopen($file_fullpath, 'rb');
while (!feof($data)) {
        echo @fread($data, 8192);
        flush();
        ob_flush();
}
fclose($data);


本文将要使用的方法:主要应用nginx的X-Accel-Redirect将文件直接交给nginx做处理从而减少服务器负载
网站在服务器上的根目录为:/home/www
文件的真实地址为 http://www.artbeta.com/filespath/2011/12/31/abcd.zip
下载地址为:http://www.artbeta.com/down.php?filepath=2011/12/31/abcd.zip&filename=abcd.zip

本文档实现效果为:
1、只有通过php的下载地址能够下载并且“零内存”消耗。
2、通过http://www.artbeta.com/filespath/2011/12/31/abcd.zip 真实的路径是不允许下载的。
3、在php里可以进行一写下载权限的处理。nginx配置文档

location /down
{
  internal;
  alias /home/www/filespath;
}
/* 此段是为了防止直接通过地址访问文件而做,可以作为防盗链*/
location /filepath
{
  internall;
}


php文件设置:

$filepath = '2011/12/31/abcd.zip';
$filename = 'abcd.zip';
header("Content-Disposition: attachment; filename= '{$filename}'");
header("Content-Type: application/octet-stream");
header('X-Accel-Redirect: /down/'.{$filepath}); 
header("X-Accel-Buffering: yes");
header("X-Accel-Limit-Rate :102400"); //速度限制 Byte/s
//header("Accept-Ranges: none");//单线程 限制多线程


在使用时候,必须要明白以下头信息是不能被Nginx更改的(即这些信息得由你来指定!)

Content-Type

Content-Disposition

Accept-Ranges

Set-Cookie

Cache-Control

Expires

如果其中的一些信息没有指定,那么重定向请求设置!

4.更多处理控制

你可以通过一下头信息来配置 X-Accel-Redirect 特性:

X-Accel-Limit-Rate: 1024

X-Accel-Buffering: yes|no

X-Accel-Charset: utf-8


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:https://yuyunhe.cn/index.php/post/233.html

分享给朋友:

“php+nginx做下载服务器配置—X-Accel-Redirect” 的相关文章

如何自己手工获取自己的Access Token

如何自己手工获取自己的Access Token

在使用WP2PCS前,你需要了解,WP2PCS目前只支持百度网盘,(将来将支持360网盘和腾讯微云,这要看它们的API什么时候开放, 且容易开发)是基于百度PCS的API开发的,和坊间流传的抓取百度网盘文件直链不同,WP2PCS从百度网盘获取文件的源(二进制流),是百度许可并鼓 励开发者使用的接...

Zend Studio 8打开utf-8文件出现乱码解决方法

Zend Studio 8打开utf-8文件出现乱码解决方法

今天安装了zend studio 8.0.1,运行了一个PHP程序项目(项目文件编码为utf-8),发现utf-8文件中的中文全部变成乱码了,后面终于经过寻找探索,找到了问题所 在:虽然你的项目是UTF-8编码文件,但是当通过zend studio工具运行打开时,是以工具里设定的GBK编码...

thinkphp获取URL参数

一般情况下URL中的参数就是通过GET方法获取,但是由于PATHINFO的特 殊性,URL地址最终需要被解析才能转换成GET参数,ThinkPHP对URL是按照一定的规则进行解析的,除非你使用了URL路由规则,如果你对 URL做了特别的定制,但是又不想使用URL路由,那么可以使用框架提供的URL...

phpcms v9更换模板的具体操作方法

phpcms v9更换模板的具体操作方法

这篇文章主要介绍了phpcms v9更换模板的具体操作方法,需要的朋友可以参考下分享一下Phpcms V9更换模板的具体操作方法先分享下大概的步骤:1、上传模版文件到服务器;2、在站点管理 里边【模板风格配置】选择新模板;3、设置不同模型对应模板;4、修改现有的栏目,匹配新模板;5、更新栏目缓存、系...

jQuery UI 使用入门

jQuery UI 使用入门

 最近项目中使用了一些插件来做页面,这里把jQuery UI的使用分享出来,希望 对新手有帮助。文章结尾附源码下载。1 jQuery UI        有时你仅仅是为了实现一个渐变的动画效果而不得不把javascrip 重新学习一遍然后书写大量代码。直到...

wamp虚拟主机配置

1、首先打开apache的配置文件httpd.conf,并去掉#Include conf/extra/httpd-vhosts.conf前面的#,启用虚拟主机功能2、先把localhost配置好,免得以后访问localhost出现问题,我的wamp项目根目录是D:\wamp\www。将下面信息添加到...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。