Nginx 负载均衡配置详解

Nginx 负载均衡配置详解Nginx负载均衡配置详解一、测试环境由于没有服务器,所以本次测试直接host指定域名(my.local)测试域名:my.localA服务器:172.16.10.181(主服务器)B服务器:172.16.10.131C服务器:172.16.10.130二、域名解析由于不是真实环境,域名就随便使用一个my.local用作测

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 负载均衡配置详解

 

  • 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

  1. 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服务器:

Nginx 负载均衡配置详解

C服务器:

Nginx 负载均衡配置详解

假如其中一台服务器宕机会怎样?

当某台服务器宕机了,是否会影响访问呢?

我们先来看看实例,根据以上例子,假设C服务器172.16.10.130这台机子宕机了(由于无法模拟宕机,所以我就把C服务器关机)然后再来访问看看。

访问结果则都是下图显示结果:

 Nginx 负载均衡配置详解

我们发现,虽然C服务器(172.16.10.130)宕机了,但不影响网站访问。这样,就不会担心在负载均衡模式下因为某台机子宕机而拖累整个站点了。

  • 同一台服务器设置多个域名的负载均衡

多个域名配置和my.local的配置一样。

假设second.local的主服务器IP是172.16.10.181,负载均衡到172.16.10.132172.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.132172.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试试看能不能访问。结果可以正常访问

Nginx 负载均衡配置详解

 既然能正常访问,那么我们就可以把主服务器添加到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看看会不会分配到主服务器上。

 Nginx 负载均衡配置详解

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

七、总结
1)负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。

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

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

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

今天的文章Nginx 负载均衡配置详解分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4876.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注