VPS · NGINX
在 VPS 上将 Nginx 配置为多后端负载均衡器
AsiaGB · 2026年5月31日 · 阅读约 8 分钟
当流量超出单台服务器的承载能力时,负载均衡器就显得不可或缺。Nginx 内置了生产级的负载均衡功能,无需额外安装其他软件。本文将一步步介绍如何在 VPS Ubuntu 上将 Nginx 配置为负载均衡器,将请求分发到多台后端服务器。
负载均衡的工作原理
负载均衡器位于后端服务器的前端,接收客户端发来的请求并将其转发给最合适的后端。其优势包括:处理更多流量、消除单点故障,以及实现零停机部署。
轮询(Round-Robin)
将请求均匀地轮流分配给所有服务器。适用于后端配置完全相同的场景。
最少连接(Least Connection)
将每个新请求发送给当前活跃连接数最少的服务器。适合处理耗时较长的请求。
IP 哈希(IP Hash)
同一客户端 IP 始终路由到同一台后端。适合需要会话保持(sticky session)的应用。
架构概览
在本示例中,运行负载均衡器的 VPS(IP:10.0.0.1)接收来自 80/443 端口的流量,并将其分发到两台后端服务器(10.0.0.2 和 10.0.0.3),这两台服务器的应用运行在 8080 端口。
在负载均衡器 VPS 上安装 Nginx
sudo apt update && sudo apt install -y nginx
sudo systemctl enable nginx
配置 Upstream 与负载均衡
创建一个新的配置文件:
sudo nano /etc/nginx/sites-available/loadbalancer
添加以下配置(轮询模式):
upstream backend_pool {
server 10.0.0.2:8080;
server 10.0.0.3:8080;
keepalive 32;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend_pool;
proxy_http_version 1.1;
proxy_set_header Connection "";
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;
}
}
切换到最少连接模式
upstream backend_pool {
least_conn;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
切换到 IP 哈希模式(会话保持)
upstream backend_pool {
ip_hash;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
针对不同服务器配置加权分配
upstream backend_pool {
server 10.0.0.2:8080 weight=3;
server 10.0.0.3:8080 weight=1;
}
启用配置并进行测试
sudo ln -s /etc/nginx/sites-available/loadbalancer /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
为生产环境调优超时与缓冲区
合理调整代理超时时间和缓冲区设置,可以防止后端响应缓慢或响应体较大时出现请求失败的问题。将以下指令添加到 location / 块内或 server 层级。
location / {
proxy_pass http://backend_pool;
proxy_http_version 1.1;
proxy_set_header Connection "";
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_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
}
对于返回小响应体、追求低延迟的 API 端点,可以使用 proxy_buffering off; 禁用缓冲——但这会增加 Nginx Worker 进程的负载,请在全局应用前先进行基准测试。
在负载均衡器上终止 SSL/TLS
生产环境中最常见的方案是 SSL 终止(SSL Termination):由负载均衡器处理来自客户端的 HTTPS,然后以明文 HTTP 转发给后端服务器。后端不再需要管理证书,既降低了开销,也简化了证书管理工作。
sudo certbot --nginx -d yourdomain.com
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend_pool;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
}
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
限速以防范流量洪峰
负载均衡器是所有流量进入的唯一入口,因此是实施限速策略的理想位置。这样可以在不修改应用代码的情况下,保护后端服务器免受流量洪峰、暴力破解和恶意爬取的威胁。
http {
limit_req_zone $binary_remote_addr zone=general:10m rate=30r/m;
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
}
location /api/auth/ {
limit_req zone=login burst=3 nodelay;
limit_req_status 429;
proxy_pass http://backend_pool;
}
location / {
limit_req zone=general burst=50 nodelay;
proxy_pass http://backend_pool;
}
| 速率 |
适用场景 |
说明 |
| 10r/s |
通用 API |
适度限制 |
| 1r/s |
登录接口 |
严格限制 — 防止暴力破解 |
| 100r/s |
静态资源 |
宽松限制 — 公开资源 |
被动健康检查
Nginx 开源版本自动支持被动健康检查——若某台后端持续返回错误,Nginx 会将其临时从后端池中移除:
upstream backend_pool {
server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.3:8080 max_fails=3 fail_timeout=30s;
}
注意:主动健康检查(每隔 N 秒主动探测后端)需要 Nginx Plus(商业版)或 Nginx + Lua 模块。如需开源版的主动健康检查,可考虑使用 HAProxy 作为替代方案。
负载均衡器运行后的后续步骤
Nginx 成功分发流量后,再完成以下几个步骤,即可让架构达到生产就绪状态,并保持长期可维护性。
- 启用 SSL/TLS:使用 Let's Encrypt 和 Certbot 为负载均衡器申请免费证书,并将所有 HTTP 流量自动重定向至 HTTPS。
- 配置监控:使用 Uptime Kuma、Prometheus 或类似工具,监控负载均衡器及每台后端服务器的可用性和延迟,并针对错误率异常和后端故障设置告警。
- 配置日志轮转:通过 logrotate 设置每日轮转并保留 30 天历史记录,防止访问日志撑满磁盘。
- 定期测试故障切换:通过停止某台服务器来模拟后端故障,确认流量能正常流向其余后端。每次配置变更后都应执行此测试。
- 规划滚动部署:使用脚本或 Ansible 等工具,逐一对各后端进行更新,同时让负载均衡器保持其余后端在线——这样无需额外基础设施即可实现零停机部署。
在 VPS 上使用 Nginx 负载均衡,是构建高可用架构最具性价比的方案之一。该软件完全开源,无需支付授权费用,且在普通硬件上即可处理极高的请求量。AsiaGB VPS 提供完整的 root 权限,让您可以根据实际需求自由配置 Nginx,不受托管服务商的任何限制。
Monitor the Load Balancer
sudo nginx -t && sudo systemctl status nginx
sudo tail -f /var/log/nginx/access.log
AsiaGB VPS — 专为高流量应用设计
AsiaGB VPS 运行 Linux Ubuntu/Debian,提供完整 root 权限,可按需配置 Nginx 负载均衡。套餐起价 500 泰铢/月。
查看 VPS 套餐
查看泰国VPS主机全部套餐 →