nginx 读取文件_Nginx的提升php上传下载
Nginx廣泛應用在各個服務器上,之前一篇筆記里面寫了如何用php下載文件,里面寫了兩種方法來下載文件
nginx配置直接try_files下載文件
php讀取文件之后再輸出
對于第二種方法,php-fpm和nginx的內存和IO情況都有飆升。
在傳統的文件傳輸過程中,文件數據經歷了以下步驟:
硬盤 -> 內核buffer -> 用戶buffer -> socket相關緩沖區 -> 協議棧
而sendfile機制被開啟之后,減少了一次文件copy,提升了文件傳輸性能,文件數據經歷的步驟如下:
硬盤 -> 內核buffer -> socket相關緩沖區 -> 協議棧
在當前流行的幾個web服務器(apache、nginx、lighttpd等)里面,都有關于sendfile的配置。
下面說說如何使用nginx的XSendfile來提升PHP文件下載性能。
關于nginx的XSendfile的詳細內容可以看 官方文檔
1. nginx開啟sendfile
在nginx.conf里面,設置 sendfile on 表示開啟sendfile機制
2. 配置路由規則
location /protectedFile/ { internal; root /home/nemo/fileDir;}internal 表示這個路徑只能在nginx內部訪問,不能在瀏覽器里面被訪問。
配置完之后,重啟nginx。
3. 修改php代碼
<?php checkAuthority(); // 做一些業務相關的用戶鑒權相關的操作………… $filePath = '/protectedFile/test.pdf'; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($filePath) . '"'); // 讓Xsendfile發送文件 header('X-Accel-Redirect: '.$filePath);?>在php代碼里面使用 X-Accel-Redirect 讓nginx使用XSendfile機制提升下載性能,這樣用戶下載到了 /home/nemo/fileDir/protectedFile/test.pdf 文件
比較一下使用與不使用XSendfile,下載一份20MB+的文件的時候的性能比較
| 耗時 | 1.13s | 456.32ms |
| 內存 | 26.1MB | 2.6MB |
總結
以上是生活随笔為你收集整理的nginx 读取文件_Nginx的提升php上传下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv 手部识别_手势识别结合到V
- 下一篇: python颜色填充随机_使用pytho