[Nginx] Upstream too big header 問題

最近進行了網站主機的遷移,其中某個網站出現了要登入卻顯示502 Bad Way的問題,下面是登入的時候出現的問題畫面,

Toobigheader_002.jpg

檢查了Log後發現顯示Upstream too big header的訊息,

2019/04/13 13:19:16 [error] 1437#1437: *16062 upstream sent too big header while reading response header from upstream, client: 1.200.217.97, server: www.example.com, request: "POST /user/login?destination=!newled33&sn=0 HTTP/2.0", upstream:"fastcgi://127.0.0.1:9000", host: "www.example.com", referrer: "https://www.example.com/user/login?destination=!newled33&sn=0"

詭異的是在設定相同的舊主機上卻沒這問題,不管怎麼說查到原因後發現,就是Nginx的緩衝區大小不足產生的問題,一般來說預設都是4k,但這次為了先排除問題,暫時先改大

# 在nginx.conf當中的http{}內加入下面的設定後重啟nginx,應該就能排除問題
proxy_buffer_size  128k;  # 設置nginx保存用戶header資料的緩衝區大小
proxy_buffers   32 32k;  # proxy_buffers緩衝區數量和每個數量的大小,網頁平均在32k以下的設置
proxy_busy_buffers_size 128k;  # 高負荷下緩衝的大小(proxy_buffers*2)

# 如果加入上面的設定還是沒排除,可以在該網站的host檔案內的location ~ .php$ {}中增加下面的設定
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;

這樣應該就可以排除問題了,只是proxy_buffering啓用時,要提防使用的nginx緩衝區太大的話,可能會吃掉你的記憶體,造成nginx的最大併發連接數會受到限制。

Reference

upstream sent too big header while reading response header from upstream

修复Nginx报错:upstream sent too big header while reading response header from upstream

Upstream too big - nginx + codeigniter

Nginx FastCGI response buffer sizes

Module ngx_http_proxy_module

Module ngx_http_fastcgi_module

nginx缓冲区优化

Add a Comment