nginx 返回資料被截斷

2022-08-10 01:33:14 字數 1046 閱讀 1321

nignx ** buffer

proxy_buffers 16 512k;

proxy_buffer_size 512k;

fastcgi buffer

fastcgi_buffers 4 64k;

fastcgi_buffer_size 64k;

nginx的buffer機制

對於來自 fastcgi server 的 response,nginx 將其緩衝到記憶體中,然後依次傳送到客戶端瀏覽器。緩衝區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。

fastcgi_buffer_size : 用於指定讀取fastcgi應答第一部分需要用多大的緩衝區,這個值表示將使用1個64kb的緩衝區讀取應答的第一部分(應答頭),可以設定為fastcgi_buffers選項指定的緩衝區大小。

fastcgi_buffers : 指定本地需要用多少和多大的緩衝區來緩衝fastcgi的應答請求。如果乙個php指令碼所產生的頁面大小為256kb,那麼會為其分配4個64kb的緩衝區來快取;如果頁面大小大於256kb,那麼大於256kb的部分會快取到fastcgi_temp指定的路徑中,但是這並不是好方法,因為記憶體中的資料處理速度要快於硬碟。一般這個值應該為站點中php指令碼所產生的頁面大小的中間值,如果站點大部分指令碼所產生的頁面大小為256kb,那麼可以把這個值設定為「16 16k」、「4 64k」等。

所以總計能建立的最大記憶體緩衝區大小是 4*64k+64k = 320k。而這些緩衝區是根據實際的 response 大小動態生成的,並不是一次性建立的。比如乙個 128k 的頁面,nginx 會建立 2*64k 共 2 個 buffers。

當 response 小於等於 320k 時,所有資料當然全部在記憶體中處理。如果 response 大於 320k 呢?fastcgi_temp 的作用就在於此。多出來的資料會被臨時寫入到檔案中,放在這個目錄下面。

記憶體中緩衝了 320k,剩下的會寫入的檔案中。而實際的情況是,執行 nginx process 的使用者並沒有 fastcgi_temp 目錄的寫許可權,於是剩下的資料就丟失掉了。

nginx 返回資料被截斷

今天在工作中遇到這麼乙個問題 客戶端向後台請求資料時,如果遇到返回資料很大時,客戶端獲得的資料會被截斷,找了很多地方,最終發現是nginx配置的問題,寫在此如果大家遇到類似問題可以進行參考。當nginx 遇到大資料流時,會把資料存到本地然後分次向客戶端傳輸。於是 1.存入檔案有許可權,讀取檔案沒有許...

PHP返回內容過長時被nginx截斷的解決辦法

檢視了html源 發現html源 被截斷了。因此,導致網頁內容顯示不全。之後的整個分析過程繞了一大圈,即是tcpdump,又是用tcpflow進行網路包分析。最後,還是從nginx的錯誤日誌中發現了端倪。在nginx的錯誤日誌中發現如下資訊 2016 03 29 06 08 10 crit 7042...

返回xml過長時被nginx截斷的解決辦法

返回xml過長時被nginx截斷的解決辦法 問題描述 通過網頁獲取資料,資料格式為xml。當xml比較短時,可以正常獲取資料。但是xml長度過長時不能正常獲取資料,通過觀察返回資料的源 發現xml被截斷了。伺服器環境 centos 6.5,nginx 1.0.15,php 5.3.3 解決方法 對比...