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服务器进行处理。

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...