nginx作用:
反向代理
負載均衡
http服務器(包含動靜分離)
郵件服務器
反向代理(reverse proxy)
代理服務器接受來自網絡的請求,並將此請求轉發給網絡內部的服務器,內部服務器處理完將結果通過代理服務器返回給客戶端,所以此代理服務器對外表現爲反向代理服務器
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
}
}
當在瀏覽器中輸入localhost的時候就相當於訪問了http:// localhost:8080
負載均衡
負載均衡是nginx使用頻率較高的用途之一,當有2臺或2臺以上的服務器,nginx通過規則選擇將請求分發到某臺服務器上,一般nginx做負載均衡會結合反向代理使用,目前支持3中負載均衡的策略
第一種:RR(默認)
按照請求時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,自動剔除
upstream test {
server localhost:8080;
server localhost:8081;
}
server {
listen 81;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://test;
proxy_set_header Host $host:$server_port;
}
}
upstream test {
server localhost:8080;
server localhost:8081;
}
http://localhost 的時候,也不會有問題,會默認跳轉到 http://localhost:8080 具體是因爲Nginx會自動判斷服務器的狀態,如果服務器處於不能訪問(服務器掛了),就不會跳轉到這臺服務器,所以也避免了一臺服務器掛了影響使用的情況,由於Nginx默認是RR策略,所以我們不需要其他更多的設置。
第二種:權重 (weight)
指定輪詢機制,權重和輪詢機率是成正比的
pstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
如果有10次請求,8081這個端口,會被訪問9次,8080端口會被訪問1次
第三種:ip_hash
上面兩種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個服務器,當我們的程序不是無狀態的時候(採用了session保存數據),這時候就有一個很大的很問題了,比如把登錄信息保存到了session中,那麼跳轉到另外一臺服務器的時候就需要重新登錄了,所以很多時候我們需要一個客戶只訪問一個服務器,那麼就需要用iphash了,iphash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
第四種:fair
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
第五種:url_hash
按照訪問路徑url的hash結果,使每個url定向到同一個同一個後臺服務器,後端服務器一般爲緩存服務器會比較有效
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
注意:fair和url_hash需要安裝第三方模塊才能使用,
nginx+tomcat實現負載均衡(以nginx在window環境爲例)
準備好兩個tomcat
這裏都是用的本地的tomcat,只是修改了端口
nginx的配置:
到nginx.conf下配置
啓動nginx.exe
當用戶在瀏覽器輸入http://localhost/test/index.jsp時nginx會攔截請求利用反向代理找到test然後將請求轉發給localhost:8080或者localhost:8088,這樣頁面就能正常顯示了 test是我的項目名