Nginx 负载均衡配置详解
-
一、测试环境
由于没有服务器,所以本次测试直接host指定域名(my.local)
测试域名:my.local
A服务器:172.16.10.181(主服务器)
B服务器:172.16.10.131
C服务器:172.16.10.130
二、域名解析
由于不是真实环境,域名就随便使用一个my.local用作测试,所以my.local的解析只能在hosts文件设置。
打开:C:\Windows\System32\drivers\etc\hosts
在末尾添加
172.16.10.181 my.local
保存退出,然后启动命令模式ping下看看是否已设置成功,如下图
-
Nginx配置
-
A服务器(主服务器)nginx.conf配置
打开nginx.conf,文件位置在nginx安装目录的conf目录下。
在http段加入以下代码
upstream my.local {
ip_hash;#默认可以不加,加上此行则已ip_hash方式进行负载均衡
#weight为权重,数字越大权重越高
server 172.16.10.131:80 weight=1;
server 172.16.10.130:80 weight=1;
}
server{
listen 80;
server_name my.local;
location / {
proxy_pass http://my.local;
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(/usr/local/nginx/sbin/nginx -s reload)
-
B、C服务器nginx.conf设置
打开nginx.conf,文件位置在nginx安装目录的conf目录下。
在http段加入以下代码
server{
listen 80;
server_name my.local;
index index.html index.htm index.php;
root /home/wwwroot/default;
}
保存重启nginx(/usr/local/nginx/sbin/nginx -s reload)
-
测试
当访问my.local的时候,为了区分是转向哪台服务器处理分别在B、C服务器下写一个不同内容的index.html文件,以作区分。
打开浏览器访问my.local结果,刷新会发现所有的请求均分别被主服务器(172.16.10.181)分配到B服务器(172.16.10.131)与C服务器(172.16.10.130)上,实现了负载均衡效果。
B服务器:
C服务器:
假如其中一台服务器宕机会怎样?
当某台服务器宕机了,是否会影响访问呢?
我们先来看看实例,根据以上例子,假设C服务器172.16.10.130这台机子宕机了(由于无法模拟宕机,所以我就把C服务器关机)然后再来访问看看。
访问结果则都是下图显示结果:
我们发现,虽然C服务器(172.16.10.130)宕机了,但不影响网站访问。这样,就不会担心在负载均衡模式下因为某台机子宕机而拖累整个站点了。
-
同一台服务器设置多个域名的负载均衡
多个域名配置和my.local的配置一样。
假设second.local的主服务器IP是172.16.10.181,负载均衡到172.16.10.132和172.16.10.133机器上
现将域名second.local解析到172.16.10.181上。
在主服务器(172.16.10.181)的nginx.conf加入以下代码:
upstream second.local {
server 172.16.10.132:80;
server 172.16.10.133:80;
}
server{
listen 80;
server_name second.local;
location / {
proxy_pass http://second.local;
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
在172.16.10.132与172.16.10.133机器上设置nginx,打开nginx.conf在末尾添加以下代码:
server{
listen 80;
server_name second.local;
index index.html index.htm index.php;
root /home/wwwroot/default;
}
保存重启nginx
完成以上步骤后即可实现second.local的负载均衡配置了。
六、主服务器提供服务
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。
如以上案例三台服务器:
A服务器:172.16.10.181(主服务器)
B服务器:172.16.10.131
C服务器:172.16.10.130
我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。
我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:
1、主服务器转发到了其它IP上,其它IP服务器正常处理;
2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。
怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理my.local的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:
server{
listen 8081;
server_name my.local;
index index.html index.htm index.php;
root /home/wwwroot/default;
}
重启nginx,在浏览器输入my.local:8081试试看能不能访问。结果可以正常访问
既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:
upstream my.local {
ip_hash;#默认可以不加,加上此行则已ip_hash方式进行负载均衡
#weight为权重,数字越大权重越高
server 172.16.10.131:80 weight=1;
server 172.16.10.130:80 weight=1;
server 172.16.10.181:8081 weight=1;
}
由于这里可以添加主服务器IP 172.16.10.181或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来 刷新 访问my.lcoal看看会不会分配到主服务器上。
主服务器也能正常加入服务了。
七、总结
1)负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
2)多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
3)upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
4)某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上
今天的文章Nginx 负载均衡配置详解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4876.html