在前面的内容我们已经提到过 nginx 的负载均衡功能,在我看来它实际上和 nginx 的代
理是同一个功能, 只是把之前代理一台机器改为代理多台机器而已。nginx 的负载均衡和 lvs
相比,nginx 属于更高级的应用层,不牵扯到 IP 和内核的改动,它只是单纯地把用户的请求
转发到后面的机器上。这就意味着,后端的 RS 不需要配置公网 IP。
(1 )环境说明
nginx 分发器(一个公网 ip192.168.31.80 和一个内网 ip192.168.1.80)。
RS1 只有内网 ip(192.168.1.60)
RS2 只有内网 ip(192.168.1.70)
(2 )配置,首先安装nginx。如果以前有LVS,记得清空ipvsadm规则
在 nginx 分发器上编辑配置文件
源码安装配置文件位置vim /usr/local/nginx/conf/vhosts/lb.conf
yum安装配置文件位置vim vim /etc/nginx/conf.d/lb.conf
加入如下内容
upstream wyp {
ip_hash; #可不写
server 192.168.1.60 weight=2; #权重可不写
server 192.168.1.70 weight=1;
}
server {
listen 80;
server_name www.llzd.com;
location / {
proxy_pass http://wyp/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #可不写
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #可不写
}
}
说明:你会发现这个配置和我们之前讲的 nginx 代理配置如出一辙,只是多了一个upstream,这个upstream 用来定义后端的 RS,可以只写一个。ip_hash 为 nginx 的一种调度算法,加上这一行后会达
到这样的效果,即一个用户的请求会适中被分发到固定的一个 RS上。这样的好处是,可以避免把同一个
用户的请求分发到不同的机器上而导致 session 丢失的情况。upstream 里面,RS 后面的 ip 后面还可
以加权重,比如“server 192.168.31.100weight=100;”。还有一点要注意,upstream 后面的 test 是
自定义的一个名字,可以随便写,唯一的要求是要和 proxy_pass 后面保持一致。
测试:
在本机上测试 curl www.wuyaoping.com
用网页测试,首先修改C:\Windows\System32\drivers\etc\hosts文件,把域名指向到本机的外网地址或
者内网地址都可以。