返回

Nginx负载均衡与反向代理配置完整教程:从入门到生产环境实战

2026-05-27 Nginx 负载均衡 反向代理 11 0

在现代网站架构中,Nginx 不仅仅是一个高性能 Web 服务器,它还常被用作反向代理与负载均衡器,用来提升网站性能、隐藏后端服务、分担服务器压力以及增强系统稳定性。通过合理配置,Nginx 可以把请求转发到多个应用服务器,并自动进行请求分配与故障切换。

什么是 Nginx 反向代理与负载均衡

反向代理是指客户端访问服务器时,请求先经过 Nginx,再由 Nginx 将请求转发到后端应用服务器,例如 Node.js、Java、PHP 或 Python 服务。用户并不知道真实服务地址,只看到统一入口,这有助于隐藏真实 IP、统一 HTTPS 配置、优化缓存与提高安全性。Nginx 中最核心的代理配置通常依赖 proxy_pass 指令实现。

负载均衡则是在多个后端节点之间自动分发请求。例如,你有三台应用服务器同时提供服务,Nginx 可以自动决定请求发往哪台服务器,从而降低单机压力并提升整体可用性。通常情况下,Nginx 默认采用轮询 Round Robin 算法分发请求。

一个简单的架构如下:

用户请求
   ↓
Nginx(反向代理 + 负载均衡)
   ↓
应用服务器1
应用服务器2
应用服务器3

许多开发者社区也会将 Nginx 同时作为反向代理与负载均衡入口,在中小型项目中属于常见部署方案。

Nginx 安装与基础环境准备

在正式配置之前,需要先安装 Nginx。

Ubuntu / Debian:

sudo apt update
sudo apt install nginx -y

CentOS / Rocky Linux:

sudo yum install nginx -y

安装完成后,可执行 nginx -v 查看版本信息,并使用:

systemctl status nginx

确认服务已正常启动。

配置文件通常位于:/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/,不同 Linux 发行版目录可能略有差异。

Nginx 反向代理配置教程

假设你的业务运行在 http://127.0.0.1:3000,此时希望通过 https://example.com 访问应用,那么可以这样配置:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        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;
    }
}

这里的关键点在于:

  • proxy_pass:将请求转发到后端服务
  • Host:保留原始域名信息
  • X-Real-IP:获取用户真实 IP
  • X-Forwarded-*:向后端传递代理信息

这是生产环境中最常见的标准写法之一。Nginx 默认会修改部分请求头,因此通常需要手动设置这些 Header,以便后端正确识别请求来源。

配置完成后执行 nginx -t 检查配置是否有误,然后重载:

sudo systemctl reload nginx

Nginx 负载均衡配置教程

如果你的服务部署在多台机器,例如:

192.168.1.10:8080
192.168.1.11:8080
192.168.1.12:8080

则可以使用 upstream 定义服务器池:

http {

    upstream backend_servers {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

此时所有请求会自动分发到后端服务器。默认策略是轮询,也就是依次将请求平均分配给各节点。

常见负载均衡算法详解

1. Round Robin 轮询

默认模式,无需额外配置:

upstream backend_servers {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

请求会平均轮流发送到服务器。适用于机器配置接近的场景。

2. Least Connections 最少连接数

优先将请求发送给当前连接最少的服务器:

upstream backend_servers {
    least_conn;

    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

更适合请求耗时差异较大的业务,例如视频服务、API 服务。

3. IP Hash 会话保持

根据用户 IP 固定访问同一台服务器:

upstream backend_servers {
    ip_hash;

    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

适用于购物车、登录状态依赖 Session 的系统。

4. 权重 Weight

给性能更强的服务器分配更多请求:

upstream backend_servers {
    server 192.168.1.10:8080 weight=5;
    server 192.168.1.11:8080 weight=2;
}

性能越高,权重可设置越大。

高可用配置与健康检查

为了避免某台服务器宕机导致请求失败,可以配置失败重试机制:

upstream backend_servers {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}

含义是:

  • 连续失败 3 次后判定异常
  • 30 秒内暂时不再转发请求到该节点

这属于被动健康检查机制,也是 Nginx 开源版常见方案。

生产环境优化建议

部署到正式环境时,建议同时开启以下优化:

启用 KeepAlive:

upstream backend_servers {
    keepalive 32;

    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

配置超时:

location / {
    proxy_connect_timeout 5s;
    proxy_send_timeout 30s;
    proxy_read_timeout 30s;

    proxy_pass http://backend_servers;
}

如果代理长时间无响应,可能出现请求阻塞或超时问题,因此合理设置 proxy_read_timeout 等参数非常重要。社区经验中也经常提到超时配置对稳定性影响明显。

此外,还建议:

  • 配置 HTTPS 与 HTTP/2
  • 开启 Gzip 压缩
  • 搭配缓存减少后端压力
  • 使用日志监控请求情况
  • 将静态资源与 API 服务拆分部署

Nginx 反向代理与负载均衡常见问题

很多人会疑惑,既然已经有反向代理,为何还需要负载均衡。实际上两者经常同时存在。反向代理负责统一入口与请求转发,而负载均衡负责在多个后端之间分流请求,二者属于互补关系,中小型项目里甚至通常由同一个 Nginx 实例完成。

还有开发者问,是否必须单独部署一台 Nginx。答案是视规模而定,小型项目可以和应用同机部署,大型架构则通常独立部署代理层,以提升扩展性与容灾能力。

总体来看,Nginx 的反向代理与负载均衡能力已经成为现代网站架构的重要基础。掌握 proxy_pass、upstream、负载均衡算法以及健康检查配置,可以显著提高网站性能、稳定性与扩展能力。

顶部