Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能
?
關于mod_xsendfile
https://tn123.org/mod_xsendfile/
?
Lighttpd中的X-sendfile
RoR網站如何利用lighttpd的X-sendfile功能提升文件下載性能
使用X-sendfile方式,服務器端應用程序不需要讀取下載文件了,只需要設置response的header信息就足夠了,此外還要附加一個信息“X-LIGHTTPD-send-file”信息給lighttpd,告訴lighttpd,文件下載就不管了
?
Apache中的X-sendfile
讓PHP更快的提供文件下載
不經過PHP這層, 直接讓Webserver直接把文件發送,使用Apache的module mod_xsendfile, 讓Apache直接發送這個文件給用戶給用戶
<?php $file = "/tmp/中文名.tar.gz";
$filename = basename($file);
header("Content-type: application/octet-stream");
//處理中文文件名
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
if (preg_match("/MSIE/", $ua)) {
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
}
else if (preg_match("/Firefox/", $ua))
{
header("Content-Disposition: attachment; filename*=\"utf8''" . $filename . '"');
}
else {
header('Content-Disposition: attachment; filename="' . $filename . '"');
}
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
//讓Xsendfile發送文件
header("X-Sendfile: $file");
?
?
Nginx中的X-Accel-Redirect
nginx配置xsendfile提升文件下載性能
發送靜態文件使用的是一個叫做X-sendfile的header特性.
nginx當然也有這個特性,但是實現的略微不同,在nginx中叫做X-Accel-Redirect.
有兩個特性需要闡述:
1.header 中必須包括URI
2.本地必須聲明為 internal,用于內部redirect和X-Accel-Redirect responses。
配置例子:
代碼
location /public/ {?
internal;?
root? /項目目錄;?
}
應用程序接口:
代碼
x_accel_redirect "/項目目錄/public", :filename => "iso.img"
這樣,nginx將發送/項目目錄/public/iso.img 文件。
其他例子:
引用
x_accel_redirect(‘/path/to/image.jpg’, :type => ‘image/jpeg’, :disposition=>’inline’)
rails x_accel_redirect 插件
http://github.com/goncalossilva/X-Accel-Redirect
header還支持如下屬性:
代碼
X-Accel-Limit-Rate: 1024?
X-Accel-Buffering: yes|no?
X-Accel-Charset: utf-8
?
總結
以上是生活随笔為你收集整理的Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 差一步是谁唱的啊?
- 下一篇: javascript(js)的小数点乘法