
nginx 零拷贝配置及 php 文件下载的实现
启动 nginx 零拷贝后,减少了内核态与用户态间的切换,提升了传输效率。在 php 中,可使用以下步骤返回压缩文件给浏览器:
1. 配置 nginx
通过以下配置开启零拷贝:
立即学习“PHP免费学习笔记(深入)”;
sendfile: on;
2. php 文件下载代码
传统下载方式虽可行,但存在效率问题。使用 x-accel-redirect 属性可以实现零拷贝下载:
static function flushFile($filePath, $type, $fileSize, $name)
{
header("Content-Type: " . $type);
header("Accept-Range: bytes");
header("Content-Length: " . $fileSize);
header('Content-Disposition: attachment; filename="'. $name.'"');
header('X-Accel-Redirect: '. $filePath);
header('Content-Transfer-Encoding: binary');
}要点解释:
- x-accel-redirect: 通知 nginx 直接从指定的文件路径传输数据。
- content-transfer-encoding: 设置为 binary 以指示数据没有被编码。
官方文档参考:
上述方法基于 nginx 官方文档:https://www.nginx.com/resources/...











