page contents

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

希望以下内容希望帮助到大家!

为了控制静态文件下载,

一般方法需要PHP用file_get_contents读取文件,再传给客户端。

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

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

1、设置nginx

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

目录 /request/uri/ 被设置为 internal, 所以客户端无法直接访问。

alias 对应的文件所在真实目录,一般这个目录不在公开目录下,也无法访问。

注意要设置生效。

nginx -s reload

2、访问php

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

// 获取要下载的文件名称: $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 发送

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

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


attachments-2020-03-SI7Pxkd55e71bbdad5f54.jpg

  • 发表于 2020-03-18 10:43
  • 阅读 ( 580 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章