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上

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215705.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:38
下一篇 2026年3月18日 下午1:38


相关推荐

  • SpringBoot整合RabbitMQ之 典型应用场景实战一「建议收藏」

    SpringBoot整合RabbitMQ之 典型应用场景实战一「建议收藏」实战前言RabbitMQ作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理等。其中课程的学习链接地址:https://edu.csdn.net/course/detail/9314RabbitMQ官网拜读首先,让我们先拜读Ra…

    2022年5月14日
    35
  • 开盘八法图解_炒股能发财的只有一种人

    开盘八法图解_炒股能发财的只有一种人五、开盘解盘八诀1、跳空倍数法则早盘高开或低开超过5个点的时候,如果在10:30还没回补缺口,则通常全天最大跌幅是第一低点(高点)的倍数附近。(图1)2、三“15分钟”量超法则早盘高开或低开连

    2022年8月5日
    7
  • <node>……express的中间件……//[通俗易懂]

    <node>……express的中间件……//[通俗易懂]<node>……express的中间件……//

    2022年4月21日
    48
  • SpringSecurity(十二)—-基于表达式的访问控制

    SpringSecurity(十二)—-基于表达式的访问控制

    2020年11月12日
    263
  • Mac联网恢复系统重新安装Lion

    Mac联网恢复系统重新安装LionMac 的 Lion 系统 虽然不像 Windows 那样需要经常重装 但也难免会有要重置的时候 比如更换硬盘 本文介绍如何利用 Mac 的联网恢复系统进行 Lion 系统的在线恢复 Mac 的在线恢复系统只在近几年的机型上才有 在进行系统恢复前 请您先备份好硬盘中的数据 恢复步骤 1 按开机按钮后 按住 Option 键不放 当出现启动磁盘选择画面时 按下 Command R 键 进入 Recov

    2026年3月18日
    2
  • oracle 游标 定义,Oracle游标

    oracle 游标 定义,Oracle游标2019 05 13 游标 cursor 能够根据查询条件从数据表中提取一组记录 将其作为一个临时表置于数据缓冲区中 利用指针逐行对记录数据进行操作 隐式游标在执行 SQL 语句时 Oracle 会自动创建隐式游标 该游标是内存中处理该语句的数据缓冲区 存储了执行 SQL 语句的结果 通过隐式游标属性可获知 SQL 语句的执行状态信息 found 布尔型属性 如果 sql 语句至少影响到一行数据 值为 tru

    2026年3月20日
    2

发表回复

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

关注全栈程序员社区公众号