【轉】Nginx+fastcgi文件下載不全

今天發現服務器上總是出現文件下載不全的狀況,之前一直覺得是網絡不穩定的緣由引發的,後來發現不是的。是ng的配置的緣由。nginx

    先簡單的說一下 Nginx 的 buffer 機制,對於來自 FastCGI Server 的 Response,Nginx 將其緩衝到內存中,而後依次發送到客戶端瀏覽器。緩衝區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。瀏覽器

好比以下配置:服務器

fastcgi_buffers      8 4K;  fastcgi_buffer_size  4K;

fastcgi_buffers 控制 nginx 最多建立 8 個大小爲 4K 的緩衝區,而 fastcgi_buffer_size 則是處理 Response 時第一個緩衝區的大小,不包含在前者中。因此總計能建立的最大內存緩衝區大小是 8*4K+4K = 36k。而這些緩衝區是根據實際的 Response 大小動態生成的,並非一次性建立的。好比一個 8K 的頁面,Nginx 會建立 2*4K 共 2 個 buffers。網絡

當 Response 小於等於 36k 時,全部數據固然所有在內存中處理。若是 Response 大於 36k 呢?fastcgi_temp 的做用就在於此。多出來的數據會被臨時寫入到文件中,放在這個目錄下面。spa

此時若是fastcgi_temp的目錄權限不對的話,ng的使用者不能訪問這個temp目錄,這時就會出現只下載一部分的狀況。生成的頁面大小達到了 100+ Kb,內存中緩衝了 36Kb,剩下的會寫入的文件中。而實際的狀況是,運行 Nginx Process 的用戶並無 fastcgi_temp 目錄的寫權限,因而剩下的數據就丟失掉了。code

解決方法:直接將fastcgi_temp的目錄權限設置成nginx Process的用戶能進行讀寫的權限就能夠了。orm

相關文章
相關標籤/搜索