微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

apache 使用mod_xsendfile下载文件

1、环境

apache2.4.39
window或linux(ubuntu16.04)

Apache mod_xsendfile:https://tn123.org/mod_xsendfile/

2、xsendfile概述

X-Sendfile 是一种将文件下载请求由后端应用转交给前端 web
服务器处理的机制,它可以消除后端程序既要读文件又要处理发送的压力,从而显著提高服务器效率,特别是处理大文件下载的情形下。

3、window配置mod_xsendfile

LoadModule xsendfile_module modules/mod_xsendfile.so

在这里插入图片描述

  • 开启xsendfile
<VirtualHost *:80>
    DocumentRoot "E:/web/download"
    ServerName 192.168.1.102
    ServerAlias 
    FcgidInitialEnv PHPRC "D:/software/PHPstudy/PHPstudy_pro/Extensions/PHP/PHP5.6.9nts"
    AddHandler fcgid-script .PHP
    FcgidWrapper "D:/software/PHPstudy/PHPstudy_pro/Extensions/PHP/PHP5.6.9nts/php-cgi.exe" .PHP
  <Directory "E:/web/download">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
     Require all granted
	  DirectoryIndex index.PHP index.html
  </Directory>
  XSendFile on
  XSendFilePath E:\web\download
</VirtualHost>

主要配置
XSendFile on
XSendFilePath E:\web\download

  • 重启apache,如果apache能正常启动,则xsendfile开启成功

4、linux配置mod_xsendfile

  • 安装apache扩展模块的工具

    sudo apt-get install apache2-dev

  • 下载mod_xsendfile.c

    https://tn123.org/mod_xsendfile/

  • 编译mod_xsendfile模块

    sudo apxs2 -cia mod_xsendfile.c

  • 重启apache

    sudo service apache2 restart

  • 查看apache是否加载mod_xsendfile模块

    apache2ctl -t -D DUMP_MODULES

    在这里插入图片描述

  • 在apache配置文件或虚拟机配置文件添加以下内容

    禁止直接访问下载文件目录
    <Directory “/var/www/html/files”>
    Order deny,allow
    Deny from all
    </Directory>
     
    Xsendfile配置
    XSendFile on
    XSendFilePath /var/www/html

    在这里插入图片描述

  • 重启apache

    sudo service apache2 restart

5、测试文件下载(以PHP为例 window)

	header("X-Sendfile: 源码.zip");
	header("Content-Type: application/octet-stream");
	header("Content-disposition: attachment; filename=\"源码12.zip\"");

6、测试文件下载(以PHP为例 linux) (注意文件相对路径问题,在PHP脚本中可以写文件绝对路径)

header("X-Sendfile: ../files/源码.zip");
header("Content-Type: application/octet-stream");
header("Content-disposition: attachment; filename=\"源码12.zip\"");

7、刷新页面下载文件
文件下载并不是由PHP处理下载,而是由PHP文件下载转交给web服务器进行处理。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐