使用nginx做負載均衡與HTTP伺服器
負載均衡
負載均衡其意思就是將請求分攤到多個操作單元上進行執行,簡單而言就是根據規則(隨機規則、權重規則、session規則等)的將請求分發到指定的伺服器上處理,一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。而Nginx目前支援自帶3種負載均衡策略,還有2種常用的第三方策略。
1、RR(Nginx預設是RR策略)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
簡單配置
upstream webtest { server 192.168.0.2:8080; server 192.168.0.3:8081; } server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://webtest; proxy_set_header Host $host:$server_port; } }
當8081的伺服器掛掉,訪問http://localhost 的時候,也不會有問題,會預設跳轉到http://localhost:8080.
2、權重
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
例如
upstream test { server 192.168.0.2:8080 weight=9; server 192.168.0.3:8081 weight=1; }
那麼10次一般只會有1次會訪問到8081,而有9次會訪問到8080
3、ip_hash
上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個伺服器,當我們的程式不是無狀態的時候(採用了session儲存資料),如把登入資訊儲存到了session中,那麼跳轉到另外一臺伺服器的時候就需要重新登入了,所以很多時候我們需要一個客戶只訪問一個伺服器,那麼就需要用ip_hash了,ip_hash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
upstream test { ip_hash; server 192.168.0.2:8080; server 192.168.0.3:8081; }
4、fair(需要安裝第三方模組)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
upstream backend { fair; server 192.168.0.2:8080; server 192.168.0.3:8081; }
5、url_hash(需要安裝第三方模組)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。 在upstream中加入hash語句,server語句中不能寫入weight等其他的引數,hash_method是使用的hash演算法
upstream backend { hash $request_uri; hash_method crc32; server 192.168.0.2:8080; server 192.168.0.3:8081; } 第三方模組安裝:https://blog.csdn.net/qinyushuang/article/details/43953341
HTTP伺服器
Nginx本身也是一個靜態資源的伺服器,當只有靜態資源的時候,就可以使用Nginx來做伺服器,同時現在也很流行動靜分離,就可以通過Nginx來實現
server { listen 80; server_name localhost; client_max_body_size 1024M; location / { root /var/www/test; index index.html; } }
這樣如果訪問http://localhost 就會預設訪問到/var/www/root目錄下面的index.html,如果一個網站只是靜態頁面的話,那麼就可以通過這種方式來實現部署。
動靜分離
動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們就可以根據靜態資源的特點將其做快取操作,這就是網站靜態化處理的核心思路
upstream servertest{ server 192.168.0.2:8080; server 192.168.0.3:8081; } server { listen 80; server_name localhost; location / { root /var/www/test; index index.html; } # 所有靜態請求都由nginx處理,存放目錄為html location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ { root /var/www/test; } # 所有動態請求都轉發給tomcat處理 location ~ \.(jsp|do)$ { proxy_pass http://servertest; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/test; } }
這樣HTML\圖片和css以及js放到var/www/test 目錄下,而tomcat只負責處理jsp和請求.