Nginx的upstream模块用于定义一组后端服务器,实现负载均衡和高可用性。当网站出现故障时,合理的upstream配置可以帮助快速恢复服务。
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
max_fails
: 允许失败的次数fail_timeout
: 失败后暂停服务的时间根据业务特点选择合适的负载均衡策略:
upstream backend {
# 轮询(默认)
server backend1.example.com;
server backend2.example.com;
# 加权轮询
server backend3.example.com weight=2;
# IP哈希(保持会话)
ip_hash;
# 最少连接数
least_conn;
}
upstream backend {
server backend1.example.com;
server backend2.example.com;
# 健康检查配置
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
需要安装nginx_upstream_check_module
模块。
防止新启动的服务器被突然的流量压垮:
upstream backend {
server backend1.example.com slow_start=30s;
server backend2.example.com slow_start=30s;
}
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backup.example.com backup;
}
当所有主服务器都不可用时,才会使用备份服务器。
检查Nginx配置语法:
nginx -t
查看Nginx状态:
systemctl status nginx
查看upstream状态(需要安装相应模块):
curl http://localhost/upstream_status
查看错误日志:
tail -f /var/log/nginx/error.log
upstream backend {
server backend1.example.com:443;
server backend2.example.com:443;
# 保持长连接
keepalive 32;
}
server {
location / {
proxy_pass https://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
upstream backend {
server backend1.example.com;
# 提高上传超时时间
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;
}
502 Bad Gateway错误:
proxy_next_upstream
配置:
nginx
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
连接数不足:
worker_connections
和worker_processes
nginx
upstream backend {
keepalive 100;
}
负载不均衡:
least_conn
或ip_hash
策略通过合理配置Nginx upstream,可以显著提高网站的可用性和稳定性,快速响应各种故障场景。