日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

nginx 读取文件_Nginx的提升php上传下载

發布時間:2024/9/30 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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+的文件的時候的性能比較

性能指標不使用XSendfile使用XSendfile
耗時1.13s456.32ms
內存26.1MB2.6MB

總結

以上是生活随笔為你收集整理的nginx 读取文件_Nginx的提升php上传下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。