使用兩台Tomcat,一台nginx做了一個小實驗:
步驟一:
當兩台tomcat正常運行的情況下,訪問http://localhost的速度是很很迅速的,通過修改主頁內容也可以觀察到是通過負載均衡得到的效果。
步驟二:
實驗性的將其中一台tomcat服務器關掉(將8080端口的關閉),再查看http://localhost ,會發現效果是這樣的:一半的請求反應時間很快,一般的請求反應時間很慢,但是最后都可以得到正確的結果。
分析:
出現這個效果的原因是在nginx中有一個參數:proxy_connect_timeout ,即連接的超時時間,默認超時時間是1分鍾。當超過1分鍾,才會去連接到另一台服務器,而我們在這一分鍾只能苦苦等待。
解決辦法:
分析出來結果了,解決方法自然就有了。將 proxy_connect_timeout 參數的超時時間改小即可。如下圖示例:
server { listen 80; server_name localhost; upstream localhost { #這里是在同一台服務器上面進行測試,因此只改變端口號即可 server localhost:8080 weight=2; server localhost:8081 weight=2; } location / { root html; index index.html index.htm; http://localhost; //可通過域名訪問
proxy_connect_timeout 1; #單位為秒 proxy_send_timeout 1; proxy_read_timeout 1; } ... }
之后重新加載nginx的配置文件,或者重啟nginx,就能解決問題。