nginx 负载均衡502问题
項目架構:nginx+php fpm 負載均衡
負載均衡關鍵配置如下:
#引入負載均衡配置include proxy.conf;#負載均衡upstream test_balance {server 172.28.196.xxx:80 weight=100; #遠端服務server 127.0.0.1:20000 weight=100;keepalive 256;}出現問題:
當某個php服務報錯后,整個負載均衡返回502,并且非報錯接口同樣返回502,問題非常嚴重,因為php的優勢就是解析執行,不相干代碼應該不會干擾才對,但上負載后出現 只要整個項目某個接口返回500,短時間內所有接口都會返回502
解決:
一:設置 max_fails=1 跟 fail_timeout=1
max_fails默認值為1,fail_timeout默認值為10秒。
nginx可以通過設置max_fails(最大嘗試失敗次數)和fail_timeout(失效時間,在到達最大嘗試失敗次數后,在fail_timeout的時間范圍內節點被置為失效,除非所有節點都失效,否則該時間內,節點不進行恢復)對節點失敗的嘗試次數和失效時間進行設置,當超過最大嘗試次數或失效時間未超過配置失效時間,則nginx會對節點狀會置為失效狀態,nginx不對該后端進行連接,直到超過失效時間或者所有節點都失效后,該節點重新置為有效,重新探測.
通過上面可知道,返回502原因就是所有節點都探測失敗,但是沒到失效時間(10s),這樣10s內所有訪問都將被返回502(沒有節點可用)
通過設置 fail_timeout=1 讓nginx 在1s后自動刷新節點狀態,也就是只要1s后不報錯的接口是可以正常訪問的,之前默認是要10s,就是一個接口報錯 整個項目10s內都是502!
修改后配置如下:
#負載均衡upstream test_balance {server 172.28.196.xxx:80 max_fails=1 fail_timeout=10 weight=100; #遠端服務server 127.0.0.1:21688 max_fails=1 fail_timeout=10 weight=100;keepalive 256;}第二:修改proxy.conf 里的 proxy_next_upstream 配置,使后端返回500 狀態不標記為失敗
Nginx 默認判斷失敗節點狀態以connect refuse和time out狀態為準,不以HTTP錯誤狀態進行判斷失敗,因為HTTP只要能返回狀態說明該節點還可以正常連接,所以nginx判斷其還是存活狀態;除非添加了proxy_next_upstream指令設置對404、502、503、504、500和time out等錯誤進行轉到備機處理,在next_upstream過程中,會對fails進行累加,如果備用機處理還是錯誤則直接返回錯誤信息(但404不進行記錄到錯誤數,如果不配置錯誤狀態也不對其進行錯誤狀態記錄),綜述,nginx記錄錯誤數量只記錄timeout 、connect refuse、502、500、503、504這6種狀態,timeout和connect refuse是永遠被記錄錯誤狀態,而502、500、503、504只有在配置proxy_next_upstream后nginx才會記錄這4種HTTP錯誤到fails中,當fails大于等于max_fails時,則該節點失效。
修改后 proxy.conf 配置
proxy_temp_path /www/server/nginx/proxy_temp_dir; proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g; client_body_buffer_size 512k; proxy_connect_timeout 60; proxy_read_timeout 60; proxy_send_timeout 60; proxy_buffer_size 32k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_next_upstream error timeout invalid_header http_503 http_404; proxy_cache cache_one;修改完后 php 報錯將不再出現502,問題解決
總結
以上是生活随笔為你收集整理的nginx 负载均衡502问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别再全网找了,这四款良心软件,还你一个清
- 下一篇: iptables目标CHECKSUM