在 Nginx 中,可以通过 upstream
模块配置多个上游服务器地址,并结合负载均衡策略(如 proxy_next_upstream
)实现故障自动转移。以下是具体配置方法:
1. 基础配置示例
http {
upstream backend {
server 192.168.1.100:8080; # 第一个上游地址
server 192.168.1.101:8080; # 第二个上游地址(备用)
# 可选:设置健康检查(Nginx Plus或开源版+lua模块)
# max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
# 当第一个地址失败时(超时/5XX错误等),自动尝试下一个地址
}
}
}
2. 关键参数说明
proxy_next_upstream
指定何种情况下切换到下一个上游服务器,常用值:error
:连接错误
timeout
:请求超时
http_500/http_502...
:服务器返回特定状态码
max_fails
&fail_timeout
(可选)
定义服务器不可用的阈值(需配合健康检查模块):server 192.168.1.100:8080 max_fails=3 fail_timeout=30s;
3. 高级场景
权重分配与优先级
upstream backend {
server 192.168.1.100:8080 weight=5; # 主节点,权重更高
server 192.168.1.101:8080 backup; # 备份节点(仅当主节点全部失败时启用)
}
TCP/UDP层故障转移
对于非HTTP协议(如数据库、gRPC),使用 stream
模块:
stream {
upstream db_backend {
server db1.example.com:3306;
server db2.example.com:3306 backup;
}
server {
listen 3306;
proxy_pass db_backend;
proxy_timeout 3s;
}
}
4.验证方法
- 手动测试:关闭第一个上游服务,观察请求是否自动切换到第二个地址。
- 日志监控:检查Nginx错误日志(
error_log /var/log/nginx/error.log warn;
)。
注意事项
- Nginx默认采用轮询策略,若需更智能的容灾(如心跳检测),建议使用商业版Nginx Plus或开源方案如OpenResty + Lua脚本。
- Kubernetes环境中可结合Ingress Controller的注解实现类似功能。
如果有特殊需求(如长连接处理、自定义超时时间),可以进一步调整参数!
内容由零声教学AI助手提供,问题来源于学员提问