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
- 下载mod_xsendfile模块(必须下载与apache版本对应的模块)
https://github.com/nmaier/mod_xsendfile/tree/master/bin - 将mod_xsendfile.so放置到apache安装目录下的modules文件夹
- 配置apache配置文件(httpd.conf),加入以下内容
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
-
禁止直接访问下载文件目录
<Directory “/var/www/html/files”>
Order deny,allow
Deny from all
</Directory>
Xsendfile配置
XSendFile on
XSendFilePath /var/www/html
-
重启apache
sudo service apache2 restart
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 举报,一经查实,本站将立刻删除。