Linux 中怎么配置 Apache 开启 sendfile 加速传输

风瑶大大_2169

风瑶大大_2169

2026-08-01

535人浏览

原创

apache 不支持 sendfile 指令,其等效配置是 enablesendfile(全局或 级),用于控制内核 sendfile() 调用;实际生效需满足文件系统、权限、无模块干扰等条件,否则回退至 read/write;动态文件下载推荐 mod_xsendfile 配合 x-sendfile 响应头。

linux 中怎么配置 apache 开启 sendfile 加速传输

Apache 不支持 sendfile 指令——这是 Nginx 特有的配置项,不能直接在 Apache 的 httpd.conf 或子配置中写 sendfile on。Apache 实现类似零拷贝传输的方式不同,主要依赖 mod_xsendfile 模块或内核级优化(如启用 EnableSendfile 指令),但需注意:它和 Nginx 的 sendfile 机制不等价,且默认行为、生效条件和验证方式均有差异。

Apache 中与 sendfile 功能最接近的配置项是 EnableSendfile

Apache 自带的 EnableSendfile 是一个全局开关,控制是否允许使用内核 sendfile() 系统调用发送静态文件(仅限真实磁盘文件、未被修改、非代理响应等)。它不是模块,无需加载,但默认为 on,多数情况下已启用。

  • 确认是否启用:在 httpd.conf 或虚拟主机配置中查找 EnableSendfile,若无显式配置,则按默认生效
  • 显式开启(推荐):EnableSendfile on —— 放在 httpd.conf 全局块或 <directory></directory> 块内
  • 显式禁用:EnableSendfile off —— 用于调试或规避 NFS/容器等不兼容场景
  • 该指令仅对 GET 请求中的静态文件有效(如 /style.css),不适用于 CGI、PHP 输出或代理内容

必须满足的底层前提才能真正走零拷贝路径

即使 EnableSendfile on,Apache 仍可能回退到传统 read/write 模式。以下任一不满足,sendfile() 调用就会被跳过:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 文件必须位于本地 ext4/xfs 等标准文件系统上,不能是 NFS、FUSE、overlayFS(如 Docker 默认存储驱动)或符号链接指向远程路径
  • 响应不能被其他模块修改:禁用 mod_deflate(gzip)、mod_substitute、mod_headers(若设置 Content-Encoding 或改写 body)
  • 文件不能被其他进程加锁(如被 tail -f 或日志轮转工具占用)
  • Apache 进程需有读取该文件的权限,且文件未启用 O_DIRECT 打开(通常无需干预)

替代方案:mod_xsendfile(适用于动态后端触发文件下载)

当 PHP/Python 等后端决定发送某个文件时,不直接输出内容,而是由 Apache 接管传输——这更接近 Nginx 的 X-Accel-Redirect,并可利用内核 sendfile 加速。

  • 启用模块:LoadModule xsendfile_module modules/mod_xsendfile.so(路径依安装方式而定)
  • 在虚拟主机或目录块中添加:XSendFile on 和 XSendFilePath /var/www/download(指定允许发送的父目录)
  • 后端代码中设置响应头,例如 PHP:header('X-Sendfile: /var/www/download/report.pdf');
  • 注意:XSendFilePath 必须精确包含目标文件路径,否则拒绝发送

如何验证 Apache 是否实际调用了 sendfile()

不能只看配置是否存在,要观察运行时系统调用行为:

  • 用 strace 抓取 Apache worker 进程:strace -p $(pgrep -f 'httpd.*-k start' | head -1) -e trace=sendfile,sendfile64 -f 2>&1 | grep sendfile
  • 压测一个 1MB 静态文件(如 ab -n 1000 -c 100 http://localhost/test.jpg),观察是否有大量 sendfile64( 调用输出
  • 对比关闭 EnableSendfile 后的 CPU sy% 使用率:开启后系统态占比应明显下降
  • 检查错误日志:grep "sendfile" /var/log/httpd/error_log,若有 sendfile() failed 提示,说明路径或权限不满足

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2732

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

916

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

809

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

414

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2476

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4572

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apache Maven 官方安装指南
Apache Maven 官方安装指南

共0课时 | 0人学习

Apache Maven 官方用户中心
Apache Maven 官方用户中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习