Nginx负载均衡与反向代理配置完整教程:从入门到生产环境实战
2026-05-27 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、负载均衡算法以及健康检查配置,可以显著提高网站性能、稳定性与扩展能力。