博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php+nginx做下载服务器配置—X-Accel-Redirect
阅读量:2339 次
发布时间:2019-05-10

本文共 1833 字,大约阅读时间需要 6 分钟。

网络存储下载服务器需求配置

缘由:

“传统的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

转载地址:http://ohwvb.baihongyu.com/

你可能感兴趣的文章
线程概念及死锁的理解
查看>>
数据结构之红黑树
查看>>
android学习之——界面 控件 体系 布局
查看>>
Eclipse开发Android程序在手机上运行
查看>>
ListView深入理解
查看>>
Activity的四种launchMode
查看>>
java面试题(7.22)
查看>>
java项目之——坦克大战01
查看>>
java项目之——坦克大战02
查看>>
java项目之——坦克大战03
查看>>
java项目之——坦克大战 04
查看>>
java项目之——坦克大战04.1
查看>>
java项目之——坦克大战05
查看>>
java项目之——坦克大战06
查看>>
java项目之——坦克大战09
查看>>
java项目之——坦克大战10
查看>>
java项目之——坦克大战11
查看>>
阿狸面经(牛客网)
查看>>
java常见笔面试题和答案
查看>>
周总结——第一周(9月5号到9月12)
查看>>