如何使用 Nginx 零拷贝和 PHP 压缩文件下载?

如何使用 nginx 零拷贝和 php 压缩文件下载?

nginx 零拷贝与 php 压缩文件下载

nginx 零拷贝可以减少用户态到内核态的切换,提高下载性能。在开启零拷贝后,可以使用 x-accel-redirect 头来告知 nginx 下载哪个文件。

php 配置

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.'"');

    // 使用 x-accel-redirect 头告知 nginx 下载压缩文件
    header('x-accel-redirect: /' . $filepath);
}

nginx 配置

nginx 需要启用 x-accel 模块:

load_module modules/ngx_http_xaccel_module.so;

# 允许从指定路径下载文件
location ~* .(zip|rar|gz)$ {
    internal;
    alias /var/www/downloads/;
}

注意事项

  • filepath 指定的是 nginx 可访问的绝对路径。
  • x-accel-redirect 头必须以 / 开头。
  • nginx 需要配置 alias 来指定压缩文件的实际位置。

以上就是如何使用 Nginx 零拷贝和 PHP 压缩文件下载?的详细内容,更多请关注硕下网其它相关文章!