Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能

来源:互联网 发布:传奇盛世魂珠暴击数据 编辑:程序博客网 时间:2024/06/06 18:34

关于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] view plaincopy
  1. <?php    $file = "/tmp/中文名.tar.gz";  
  2. $filename = basename($file);  
  3. header("Content-type: application/octet-stream");  
  4. //处理中文文件名      
  5. $ua = $_SERVER["HTTP_USER_AGENT"];      
  6. $encoded_filename = urlencode($filename);      
  7. $encoded_filename = str_replace("+""%20"$encoded_filename);      
  8. if (preg_match("/MSIE/"$ua)) {       
  9. header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');      
  10. }   
  11. else if (preg_match("/Firefox/"$ua))   
  12. {       
  13. header("Content-Disposition: attachment; filename*=\"utf8''" . $filename . '"');      
  14. }   
  15. else {       
  16. header('Content-Disposition: attachment; filename="' . $filename . '"');      
  17. }       
  18. header('Content-Disposition: attachment; filename="' . basename($file) . '"');       
  19. //让Xsendfile发送文件      
  20. 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

原创粉丝点击