2013-10-23 62 views
8

我正在設置LEMP堆棧來運行Drupal。我安裝了Nginx和PHP-FastCGI。Nginx 502錯誤的網關。通過增加緩衝區來解決。爲什麼?

Nginx運行正常,但任何運行PHP的嘗試都給了我錯誤「502 Bad Gateway」。

快速谷歌顯示:nginx 502 bad gateway,並增加緩衝區大小解決了這個問題。

fastcgi_buffers 8 16k; 
fastcgi_buffer_size 32k; 

問題是爲什麼?

我的理解

從以前的鏈接,它似乎是nginx的請求發送到PHP-FastCGI的,它並沒有響應。這些請求是什麼讓它超時?

它沒有足夠的時間來回應,因爲PHP是複雜的(它不是,它是phpinfo();)。現在我增加了緩衝區,何時應該擔心必須再次增加緩衝區?

+0

檢查錯誤日誌 –

+0

我只在某些php調用中獲得了相同的nginx 502錯誤網關 - 並且添加了緩衝區和緩衝區大小。不知道爲什麼。 – amurrell

+1

這是一個很好的問題,雖然在錯誤的論壇上。我也一直在想這件事,它讓我很煩惱,每個解決方案如何增加緩衝區大小而不知道爲什麼。多少是太多了?什麼太少?爲什麼不在默認配置中? WHYYYYY? – jpeltoniemi

回答

4

這不難理解。

如果將檢查nginx的錯誤日誌,則很可能看到此消息:
upstream sent too big header while reading response header from upstream

fastcgi_buffers設置用於FastCGI的上游的響應緩衝器的段的數量和存儲器大小。

的默認值,在文檔中提出:
fastcgi_buffers 8 4k|8k;
,其中默認的緩衝區大小等於你的操作系統的PAGESIZE。
getconf PAGESIZE允許獲取當前內存頁面大小。

例如,在Ubuntu 14.01中,默認的PAGESIZE是4KB。 這意味着,你有8個段,每個4KB。總計是32KB。的FastCGI的 響應比這個數,就是這個道理,爲什麼我們得到的響應代碼502 - server received

這不是很好的解釋,但它會幫助你更好地理解,我希望。

+0

那麼如何知道FastCGI響應的大小? – Fahmi

+0

這取決於你的申請,我想; fpm處理請求並呈現nginx收到的html輸出。這個輸出的大小比快速cgi緩衝區大。 – antonbormotov

相關問題