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的modulemod_xsendfile, 让Apache直接发送这个文件给用户给用户

  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. elseif(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值