PHP利用nginx的X-sendfile控制下载,提升下载效率

为了控制静态文件下载,通常方法须要PHP用file_get_contents读取文件,再传给客户端。php

节省资源的方法是利用nginx的x-sendfile模块nginx

原理是 nginx 上设置一个特殊资源目录,客户端没法直接读取,须要通过php许可后才能下载。app

一、设置nginxspa

location /request/uri/ {
    internal;
    alias /real/path/;
}

目录 /request/uri/ 被设置为 internal, 因此客户端没法直接访问。utf-8

alias 对应的文件所在真实目录,通常这个目录不在公开目录下,也没法访问。资源

注意要设置生效。文档

nginx -s reload

二、访问phpget

// 验证是否有权限: 费这么大劲就是为了这个

// 获取要下载的文件名称: $p_file = '/request/uri/filename.ext';                     

// 告诉nginx放行:
header('Content-type: application/octet-stream');
// 这里的$fileName = basename($p_file) 也就是 filename.ext
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// nginx sendfile
header('X-Accel-Redirect: '.$p_file);

还有一些控制选项,须要提早 X-Accel-Redirect 发送it

X-Accel-Limit-Rate: 1024 X-Accel-Buffering: yes|no X-Accel-Charset: utf-8io

文档:https://www.nginx.com/resources/wik

 

attachments-2020-03-SI7Pxkd55e71bbdad5f54.jpg

相关文章
相关标签/搜索