配置Nginx反向代理来实现负载均衡,续阿里云ECS配置Nginx反向代理

想要通过Nginx配置反向代理结合负载均衡,让Nginx将客户端请求分发到多台后端服务器(或同一服务器的多个端口服务),从而提升服务的可用性和并发能力,这是生产环境中非常常用的架构方案。我会以阿里云ECS环境为例,从核心配置、常见负载均衡策略、实操步骤三个维度带你完成配置。

一、核心原理与前置准备

1. 核心逻辑

Nginx通过upstream模块定义后端服务器集群(也叫"上游服务器组"),再通过反向代理的proxy_pass将请求转发到这个集群,同时按照指定的策略(如轮询、权重、IP哈希)分发请求,实现负载均衡。

2. 前置准备
  • 阿里云ECS已安装Nginx(yum install nginx -y/apt install nginx -y);
  • 准备多台后端服务节点(示例用3个节点:192.168.1.101:8080192.168.1.102:8080127.0.0.1:8081,可替换为你的实际服务地址);
  • ECS安全组放行Nginx监听的端口(80/443),后端服务端口仅需内网互通,无需暴露到公网

二、Nginx负载均衡+反向代理配置(实操)

步骤1:定义后端服务器集群(upstream)

首先在Nginx配置中定义上游服务器组,指定负载均衡策略,再配置反向代理转发请求到该集群。

创建专用的负载均衡配置文件:

bash 复制代码
vim /etc/nginx/conf.d/load-balancer.conf

写入以下配置(注释标注核心参数):

nginx 复制代码
# 第一步:定义后端服务器集群(upstream模块)
# 集群名称:backend_servers(可自定义)
upstream backend_servers {
    # 负载均衡策略(默认轮询,以下是常用策略,选其一即可)
    # 策略1:轮询(默认)- 按顺序依次分发请求到各节点
    # 策略2:权重(weight)- 权重越高,分配的请求越多(适合节点性能不同的场景)
    server 192.168.1.101:8080 weight=3;  # 权重3,接收3/6的请求
    server 192.168.1.102:8080 weight=2;  # 权重2,接收2/6的请求
    server 127.0.0.1:8081 weight=1;      # 权重1,接收1/6的请求

    # 策略3:IP哈希(ip_hash)- 同一客户端IP始终转发到同一节点(解决会话保持问题)
    # ip_hash;  # 启用时需注释掉weight,且不能使用backup节点

    # 策略4:最少连接(least_conn)- 优先转发到当前连接数最少的节点
    # least_conn;

    # 可选:节点健康检查与容错配置
    max_fails 3;          # 失败3次认为节点不可用
    fail_timeout 30s;     # 30秒内不再转发请求到不可用节点
    # server 192.168.1.103:8080 backup;  # 备份节点(仅所有主节点不可用时启用)
}

# 第二步:配置反向代理,将请求转发到上述集群
server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名/ECS公网IP

    location / {
        # 核心:转发请求到定义的后端集群(注意:http://后是upstream的名称,无端口)
        proxy_pass http://backend_servers;

        # 必配:传递客户端真实信息给后端节点
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 可选:超时配置(避免后端响应慢导致Nginx超时)
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}
步骤2:关键参数说明(新手必看)
参数 作用
upstream 集群名 定义后端服务器集群,是负载均衡的核心模块
server 地址:端口 配置单个后端节点,可加weight(权重)、backup(备份)等参数
max_fails 节点连续失败次数阈值,超过则标记为不可用
fail_timeout 节点标记为不可用后,多久内不再尝试转发请求
ip_hash 按客户端IP哈希分配节点,解决会话(Session)保持问题
proxy_pass 集群名 反向代理核心,将请求转发到定义的上游集群(而非单个节点)
步骤3:验证并重启Nginx
  1. 检查配置语法(避免错误导致Nginx崩溃):

    bash 复制代码
    nginx -t

    输出test is successful表示配置无误。

  2. 重启Nginx使配置生效

    bash 复制代码
    systemctl restart nginx

三、测试负载均衡效果

  1. 简单测试(验证请求分发)

    给每个后端节点的服务返回不同标识(比如192.168.1.101:8080返回node1192.168.1.102:8080返回node2),然后多次访问http://你的域名,会看到页面交替显示不同节点标识,且权重高的节点出现次数更多。

  2. 节点故障测试

    手动停止其中一个后端节点(如192.168.1.101:8080),再次访问域名,请求会自动分发到其他可用节点,fail_timeout时间后才会重试该节点。

四、阿里云环境特殊优化

  1. 内网互通 :若后端节点是阿里云其他ECS,建议使用内网IP(192.168.x.x)通信,避免走公网,提升速度且节省带宽。
  2. 安全组:仅放行Nginx的80/443端口,后端节点的8080等端口仅允许Nginx服务器的内网IP访问(在后端ECS安全组中配置授权对象为Nginx服务器内网IP)。
  3. HTTPS负载均衡 :若需HTTPS访问,只需在Nginx的server块中添加SSL证书配置(和普通HTTPS反向代理一致),Nginx解密后转发HTTP请求到后端节点即可。

总结

  1. Nginx负载均衡的核心是upstream模块定义后端集群,结合proxy_pass实现反向代理+请求分发;
  2. 常用策略:轮询(默认)、权重(适配不同性能节点)、IP哈希(解决会话保持)、最少连接(适配高并发);
  3. 必配max_fails/fail_timeout实现节点容错,阿里云环境优先用内网IP通信后端节点,提升安全性和性能。
相关推荐
Bin Watson5 小时前
Ubuntu安装Docker记录(基于阿里云)
ubuntu·阿里云·docker
r***01386 小时前
Nginx代理到https地址忽略证书验证配置
运维·nginx·https
CodeCaptain6 小时前
阿里云ECS上配置Nginx的反向代理
nginx·阿里云·云计算
无我198720 小时前
专业的厌氧池清淤哪家酷
阿里云
GDAL1 天前
NJS 共享字典(ngx.shared)全解析:跨 Worker 进程的数据共享方案
nginx·shared·njs
xifangge20251 天前
PHP 错误日志在哪里看?Apache / Nginx / PHP-FPM 一次讲清
nginx·php·apache
鸠摩智首席音效师1 天前
如何安装和配置 Nginx 反向代理服务器 ?
运维·nginx
酒书1 天前
对接阿里云号码认证实现运营商一键登录
java·阿里云
盛夏5201 天前
Docker容器化部署SpringBoot+Vue项目:从零到一在阿里云宝塔面板的实践指南
阿里云·docker·云计算