Nginx负载均衡配置

Nginx 负载均衡配置详解一、测试环境由于没有服务器,所以本次测试直接host 指定域名(my.local )测试域名:my.localA 服务器:172.16.10.181B 服务器:172.16

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:WindowsSystem32driversetchosts

在末尾添加

172.16.10.181 my.local

保存退出,然后启动命令模式ping 下看看是否已设置成功,如下图

,

三、Nginx 配置

1)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)

2)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 看看会不会分配到主服务器上。

主服务器也能正常加入服务了。

七、总结

2)多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP 不会被ping 下即可获得,增加一定安全性。

3)upstream 里的IP 不一定是内网,外网IP 也可以。不过经典的案例是,局域网中某台IP 暴露在外网下,域名直接解析到此IP 。然后又这台主服务器转发到内网服务器IP 中。

,

4)某台服务器宕机、不会影响网站正常运行,Nginx 不会把请求转发到已宕机的IP 上

标签: