1均牢、正向代理和反向代理的區(qū)別
正向代理是代理客戶端去請求(客戶端請求通過該代理服務器轉(zhuǎn)發(fā)請求)
反向代理是代理服務端接受請求(客戶端請求的是該代理服務器,代理服務器會把請求轉(zhuǎn)發(fā)給被代理的服務器)
2折汞、反向代理的特點
2.1 客戶端這邊的請求顯示的響應頭server為反向代理的服務器型號
3、nginx的配置
http {
#配置反向代理
upstream tomcatserver1 {
server localhost:8080;
}
#其中一個虛擬主機
server {
listen 80;
server_name localhost;
#開啟日志時必須要設置日志格式
access_log logs/host.access.log format0;
#配置對根目錄的訪問 proxy_pass 為反向代理的配置
location / {
proxy_pass http://tomcatserver1;
proxy_set_header Host $host;#當后端服務器配置多個web站點時恕齐,該選項可以讓服務器識別出具體要訪問的是哪個站點踩官,而不會將第一個站點作為默認站點傳遞給用戶
proxy_set_header X-Real-IP $remote_addr;#將客戶端的ip賦值到X-Real-IP消息頭上
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
}
}
}
設置為反向代理后需要注意一些細節(jié),如下:
//servlet處理
String nginx_ip= request.getRemoteAddr();//ip為nginx的ip碱呼,而不是客戶端ip
String client_ip=request.getHeader("X-Real-IP");//獲取客戶端ip的方式
4、設置集群
1宗侦、采用默認的輪詢方式(每個請求會依次分配)
http {
upstream tomcatserver1 {
server 192.168.2.200:8080;
server 192.168.2.201:8080;
}
}
upstream模塊常用參數(shù)說明:
1愚臀、down 表示當前的服務器不工作
2、backup 表示為備用服務器矾利,集群高負載時才會來請求備用服務器姑裂。所以負載最低
3、weight 表示負載的權(quán)重,默認為1
4男旗、max_fails=2 默認為1舶斧。某臺Server允許請求失敗的次數(shù),超過最大次數(shù)后察皇,在fail_timeout時間內(nèi)茴厉,新的請求將不會分配給這臺機器。如果設置為0什荣,Nginx會將這臺Server置為永久無效狀態(tài)矾缓,然后將請求發(fā)給定義了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream指令來處理這次錯誤的請求。
5稻爬、fail_timeout=10s 失敗超時時間嗜闻,默認是10秒,通常3s左右比較合適桅锄,某臺Server達到max_fails次失敗請求后琉雳,在fail_timeout期間內(nèi)样眠,nginx會認為這臺Server暫時不可用,不會將請求分配給它
http {
#weight越大翠肘,負載的權(quán)重就越大檐束。用于后端服務器性能不均的情況
upstream tomcatserver1 {
server 192.168.2.200:8080 max_fails=3 fail_timeout=3s weight=3;
server 192.168.2.201:8080 max_fails=3 fail_timeout=3s;
server 192.168.2.202:8080 backup;
}
}
通過配置192.168.2.202這臺備用服務器可以實現(xiàn)系統(tǒng)的高可用,當主服務掛掉后锯茄,backup服務器會自動接管服務厢塘,當主服務恢復后,backup也會自動放棄服務
2肌幽、按照IP的Hash值來實現(xiàn)負載均衡
weight\backup 不能和 ip_hash 關(guān)鍵字一起使用
這個方式可以解決session不能跨服務器的問題晚碾。但如果后端服務器down掉,要手工down掉喂急。
http {
upstream tomcatserver1 {
ip_hash;#采用IP HASH算法
server 192.168.2.200:8080;
server 192.168.2.201:8080;
}
}