返回正文
Are you an LLM? You can read better optimized documentation at /zh-CN/blog/2025-10/nginx-deploy.md for this page in Markdown format
Nginx 灰度发布、容错与限流配置最佳实践
在生产环境中,Web 服务需要应对版本迭代、服务器故障、高并发请求等复杂情况。Nginx 作为轻量级高性能的反向代理和负载均衡服务器,在这些场景中发挥着关键作用。本文将结合实际案例,介绍如何使用 Nginx 实现:
- 灰度发布(流量按比例分配)
- 容错保护(自动剔除故障节点)
- 限流控制(防止恶意请求打爆接口)
- HTTPS 支持(保证传输安全)
灰度发布:按比例分流
灰度发布的核心思想是:新版本上线时,先让部分流量进入新版本,观察稳定性,再逐步放量。
配置示例
txt
upstream backend {
server 192.168.0.101 weight=8; # 老版本服务器,80% 流量
server 192.168.0.102 weight=2; # 新版本服务器,20% 流量
}1
2
3
4
2
3
4
🔎 说明:
weight=8和weight=2代表流量分配比例(约 80% : 20%)。- 随着新版本稳定,可以逐步提高其权重。
容错保护:自动剔除异常节点
在分布式系统中,不可避免会遇到某台服务器挂掉或响应超时的情况。Nginx 提供了 健康检查机制:
配置示例
ini
upstream backend {
server 192.168.0.101 weight=8 max_fails=3 fail_timeout=30s;
server 192.168.0.102 weight=2 max_fails=3 fail_timeout=30s;
}1
2
3
4
2
3
4
🔎 说明:
max_fails=3:30 秒内失败 3 次即认为该节点不可用。fail_timeout=30s:在 30 秒内暂停向该节点转发请求。- 到期后 Nginx 会重新尝试,节点恢复后自动重新加入。
限流控制:防止接口被打爆
在高并发场景中,如果没有流量控制,可能出现接口雪崩。Nginx 提供了 基于漏桶算法的限流。
配置示例
ini
http {
# 定义限流区域,大小 10MB
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
upstream backend {
server 192.168.0.101 weight=8 max_fails=3 fail_timeout=30s;
server 192.168.0.102 weight=2 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl;
server_name example.com;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
location / {
# 限流策略:每个 IP 每秒最多 10 个请求,突发最多 20 个
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend;
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
🔎 说明:
limit_req_zone $binary_remote_addr ...→ 按客户端 IP 做限流。rate=10r/s→ 每秒允许 10 个请求。burst=20→ 突发请求上限 20。nodelay→ 超过速率但未超过突发时立即处理,否则排队。
HTTPS 配置:保证传输安全
生产环境中必须开启 HTTPS 来保障传输安全,配置如下:
ini
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://backend;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
🔎 说明:
- 使用 TLS1.2 和 TLS1.3,避免老旧协议漏洞。
- 强制使用高强度加密套件。
最佳实践流程
上线新版本
- 初始分流 10% →
weight=1 - 逐步增加至 50% → 最后替换旧版本
应对故障
- 节点异常时,自动切换到健康节点
- 防止单点故障拖垮整个服务
防止被打爆
- 每个 IP 限制 QPS
- 配合 Redis/MQ 等后端削峰处理
配置更新
修改配置后执行:
bash
nginx -t # 检查配置是否正确
nginx -s reload # 平滑加载,无中断更新1
2
2
完整配置模板(推荐)
ini
http {
# 定义限流策略
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
upstream backend {
server 192.168.0.101 weight=8 max_fails=3 fail_timeout=30s;
server 192.168.0.102 weight=2 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl;
server_name example.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 每个 IP 每秒最多 10 个请求,突发最多 20
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend;
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
结论
通过合理的 Nginx 配置,我们可以同时实现:
- 灰度发布:按流量比例平滑上线新版本
- 容错保护:自动剔除异常节点,保证高可用
- 限流防护:防止恶意请求或流量洪峰压垮服务
- HTTPS 支持:保障传输安全,符合安全合规
这套配置在实际生产环境中已被广泛验证,适合电商、金融、视频点播等高并发场景。
V 0.11.7 |
MIT Licensed版权所有 © 2009-2025 CMONO.NET
本站访客数
--次 本站总访问量
--人次 