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 目錄的寫權限,於是剩下的數據就丟失掉了。