序言
Nginx的代理功能與負載均衡功能是最常被用到的,關于nginx的基本語法常識與配置已在上篇文章中有說明,這篇就開門見山,先描述一些關于代理功能的配置,再說明負載均衡詳細。
Nginx代理服務的配置說明
1、上一篇中我們在http模塊中有下面的配置,當代理遇到狀態碼為404時,我們把404頁面導向百度。
error_page 404 https://www.baidu.com; #錯誤頁
然而這個配置,細心的朋友可以發現他并沒有起作用。
如果我們想讓他起作用,我們必須配合著下面的配置一起使用
代碼如下:
proxy_intercept_errors on; #如果被代理服務器返回的狀態碼為400或者大于400,設置的error_page配置起作用。默認為off。
2、如果我們的代理只允許接受get,post請求方法的一種
proxy_method get; #支持客戶端的請求方法。post/get;
3、設置支持的http協議版本
代碼如下:
proxy_http_version 1.0 ; #Nginx服務器提供代理服務的http協議版本1.0,1.1,默認設置為1.0版本
4、如果你的nginx服務器給2臺web服務器做代理,負載均衡算法采用輪詢,那么當你的一臺機器web程序iis關閉,也就是說web不能訪問,那么nginx服務器分發請求還是會給這臺不能訪問的web服務器,如果這里的響應連接時間過長,就會導致客戶端的頁面一直在等待響應,對用戶來說體驗就打打折扣,這里我們怎么避免這樣的情況發生呢。這里我配張圖來說明下問題。
如果負載均衡中其中web2發生這樣的情況,nginx首先會去web1請求,但是nginx在配置不當的情況下會繼續分發請求道web2,然后等待web2響應,直到我們的響應時間超時,才會把請求重新分發給web1,這里的響應時間如果過長,用戶等待的時間就會越長。
下面的配置是解決方案之一。
proxy_connect_timeout 1; #nginx服務器與被代理的服務器建立連接的超時時間,默認60秒proxy_read_timeout 1; #nginx服務器想被代理服務器組發出read請求后,等待響應的超時間,默認為60秒。proxy_send_timeout 1; #nginx服務器想被代理服務器組發出write請求后,等待響應的超時間,默認為60秒。proxy_ignore_client_abort on; #客戶端斷網時,nginx服務器是否終端對被代理服務器的請求。默認為off。
5、如果使用upstream指令配置啦一組服務器作為被代理服務器,服務器中的訪問算法遵循配置的負載均衡規則,同時可以使用該指令配置在發生哪些異常情況時,將請求順次交由下一組服務器處理。
代碼如下:
proxy_next_upstream timeout; #反向代理upstream中設置的服務器組,出現故障時,被代理服務器返回的狀態值。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
新聞熱點
疑難解答