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 后面保持一致。