nginx應對高並發的手段采用集群方法,如果一個服務域名背后的某個服務器發生了宕機,而此時又恰好輪詢到了該服務器,那么就會發生長時間的等待,直到瀏覽器多次嘗試后輪詢到沒有宕機的服務器才能完成一個服務,大大降低了服務器的效率和用戶體驗度,即相當於宕機的服務器白白占用了幾次輪詢嘗試時間;
為了解決該問題,案例如下:
修改nginx.conf文件:
upstream myserver{ #ip_hash; server 127.0.0.1:8081; server 127.0.0.1:8082; } server{ listen 81; server_name www.bproject.com; location / { root html; proxy_pass http://myserver;
index index.html index.htm; proxy_connect_timeout 1; proxy_send_timeout 1; proxy_read_timeout 1; } }
通過一個服務名稱的location里面配置代理響應超時時間,1表示1秒鍾,如果1秒鍾沒有響應,就把請求按照輪詢轉發,加快響應處理的時間。
proxy_connect_timeout:該指令設置與upstream server的連接超時時間,這個超時時間不能超過75秒;
proxy_send_timeout:這個指令設置了發送請求給upstream服務器的超時時間。超時設置不是為了整個發送期間,而是在兩次write操作期間。如果超時后,upstream沒有收到新的數據,nginx會關閉連接,默認值為60s;
proxy_read_timeout:該指令與代理服務器的讀取超時時間。它決定了nginx會等待多長時間來獲得請求的響應,這個時間不是獲得整個response的時間,而是兩次reading操作的時間,默認值為60s;
測試:
步驟一:配置兩個Tomcat,兩個端口分別為8081,8082
步驟二:配置nginx.conf文件
步驟三:分別啟動Tomcat和nginx
啟動Tomcat:這里需要啟動兩次Tomcat,一次端口為8082,一次端口為8081
進入Tomcat文件下的bin目錄
使用【./startup.sh】 命令啟動
啟動后可使用【ps -ef | grep tomcat 】命令查看當前Tomcat的進程
啟動nginx:
進入nginx文件下的sbin目錄
使用【./nginx】命令啟動nginx
使用【ps -ef | grep nginx】命令查看當前nginx進程
實現效果:在配置中配置了兩個服務器,當其中一台服務器宕機之后,就是輪詢到下一台服務器;