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

相關文章
相關標籤/搜索