Nginx反向代理的容灾备份主要通过以下机制实现: - 上游服务器(upstream)负载均衡:将请求分发到多个后端服务器 - 健康检查:自动检测后端服务器可用性 - 故障转移:当主服务器不可用时自动切换到备份服务器 - 会话保持:确保用户请求被正确路由
http {
upstream backend {
server backend1.example.com weight=5; # 主服务器,权重较高
server backend2.example.com; # 备份服务器
server backend3.example.com backup; # 专用备份服务器
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
Nginx Plus版本内置健康检查,开源版可通过第三方模块或定期检查实现:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
# 健康检查参数
check interval=5000 rise=2 fall=3 timeout=1000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
upstream backend {
# 主数据中心
server dc1-server1.example.com;
server dc1-server2.example.com;
# 备份数据中心
server dc2-server1.example.com backup;
server dc2-server2.example.com backup;
# 使用DNS解析实现跨数据中心容灾
resolver 8.8.8.8 valid=30s;
}
upstream backend {
ip_hash; # 基于客户端IP的会话保持
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
或使用sticky cookie:
upstream backend {
sticky cookie srv_id expires=1h domain=.example.com path=/;
server backend1.example.com;
server backend2.example.com;
}
建议将Nginx配置纳入Git等版本控制系统,确保配置变更可追溯和回滚。
# 检查配置语法
nginx -t
# 平滑重载配置
nginx -s reload
# 备份关键目录
tar -czvf nginx_backup_$(date +%Y%m%d).tar.gz \
/etc/nginx \
/usr/local/nginx/conf \
/var/log/nginx
启用Nginx状态模块:
server {
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
配置错误日志和访问日志,建议使用ELK等工具集中分析。
脑裂问题:
配置同步问题:
rsync -avz /etc/nginx/ nginx-backup:/etc/nginx/
DNS缓存问题:
resolver 8.8.8.8 valid=10s;
set $backend "http://backend.example.com";
proxy_pass $backend;
通过以上配置,可以构建一个高可用的Nginx反向代理架构,确保服务在单点故障时仍能正常运行。