[環境]
Server A(192.168.56.10) 使用 Nginx 設定 Load Balance 負載平衡。
proxy_pass 給 Server B(192.168.56.11)、Server C(192.168.56.12),真正處理的 Web Server。
upstream myweb { server 192.168.56.11 weight=3;//Server B server 192.168.56.12 weight=3;//Server C } server { listen 80; server_name example.com; location / { proxy_pass http://myweb; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto http; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; }當 Server B、Server C 輸出的 header 過大,超出 Server A 的限制,Server A 接收到 Server B、Server C 時會:
- 直接回應 502 Bad Gateway 給使用者端
- 在 Server A 的 access.log 可看到 502 相關的紀錄:
...."GET / HTTP/1.1" 502 568 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleW.... - 在 Server A 的 error.log 可看到[error]層級的錯誤:
[error] 5131#5131: *10 upstream sent too big header while reading response header from upstream....
但對 Server B、Server C 而言,工作都已正常完成,所以 log 都是正常的。
故若不經過 Server A,直接瀏覽 Server B、Server C 會是正常的。
故若不經過 Server A,直接瀏覽 Server B、Server C 會是正常的。
[解決方法]
如果過大的 header 是預期中、必要的,可在 Server A 加大 proxy buffer 限制
如果過大的 header 是預期中、必要的,可在 Server A 加大 proxy buffer 限制
location / { ..... proxy_buffer_size 64k; proxy_buffers 4 32k; //proxy_buffers number size proxy_busy_buffers_size 64k; ..... }
參考:
Module ngx_http_proxy_module
修復Nginx 502錯誤:upstream sent too big header while reading response header from upstream - IT閱讀
沒有留言:
張貼留言