nginx 屬於更高級的應用層,不牽扯到 IP 和內核的改動,它只是單純地把用戶的請求nginx
轉發到後面的機器上。這就意味着,後端的 RS 不須要配置公網 IP。算法
(1)環境說明vim
nginx 分發器(一個公網 ip192.168.1.40 和一個內網 ip192.168.0.40)。後端
RS1 只有內網 ip(192.168.0.43)session
RS2 只有內網 ip(192.168.0.45)server
(2)配置ip
在 nginx 分發器上編輯配置文件rem
# vim /usr/local/nginx/conf/vhosts/lb.confhash
加入以下內容:io
upstream test {
ip_hash;
server 192.168.0.43;
server 192.168.0.45;
}
server {
listen 80;
server_name www.123com;
location / {
proxy_pass http://test/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ip_hash 爲 nginx 的一種調度
算法,加上這一行後會達到這樣的效果,即一個用戶的請求會適中被分發到固定的一個 RS
上。這樣的好處是,能夠避免把同一個用戶的請求分發到不一樣的機器上而致使 session 丟失
的狀況。upstream 裏面,RS 後面的 ip 後面還能夠加權重,好比「server 192.168.31.100
weight=100;」。還有一點要注意,upstream 後面的 test 是自定義的一個名字,能夠隨便寫,
惟一的要求是要和 proxy_pass 後面保持一致。