如何在Nginx中配置负载均衡?
美国、香港服务器
如何在Nginx中配置负载均衡?
10-15 来源:
## 一、核心语法:upstream 块(写在 `nginx.conf` 的 `http {}` 里面,不能写在 server 块)
打开主配置
sudo nano /etc/nginx/nginx.conf
在 `http { ... }` 内部添加 upstream 后端池示例:
# 后端服务器池,名称 backend_servers 自定义
upstream backend_servers {
# 默认策略:轮询,依次分发请求
server 192.168.1.10:80;
server 192.168.1.11:80;
server 192.168.1.12:80;
}
### 负载均衡调度算法(4 种常用)
1. **轮询(默认)**:逐个分配,后端权重一致,上面示例就是。
2. **weight 加权轮询**,性能好的服务器权重高,分配更多流量
upstream backend_servers {
server 192.168.1.10:80 weight=3; #权重3
server 192.168.1.11:80 weight=2; #权重2
server 192.168.1.12:80 weight=1; #权重1
}
3. **ip_hash**:同一个访客 IP 永远分到同一台后端(适合会话保持,登录状态)
upstream backend_servers {
ip_hash;
server 192.168.1.10:80;
server 192.168.1.11:80;
server 192.168.1.12:80;
}
搭配 Cloudflare 注意:开启`ip_hash`时,因为 Nginx 拿到的是访客真实 IP(CF‑Connecting‑IP 配置完成后),ip_hash 是基于真实访客 IP;**如果没配置 realip,ip_hash 拿到的是 CF 节点 IP,大量用户分到同一后端,会失效**。
4. **least_conn**:最少连接,请求分给当前连接数最少的后端
upstream backend_servers {
least_conn;
server 192.168.1.10:80;
server 192.168.1.11:80;
}
### 后端健康检查参数(推荐加上)
upstream backend_servers {
server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
server 192.168.1.12:80 max_fails=3 fail_timeout=30s;
}
- `max_fails=3`:连续 3 次访问失败,标记后端不可用
- `fail_timeout=30s`:30 秒内不再转发流量给故障机器,30 秒后重试
## 二、在站点 server {} 里面引用 upstream
站点配置 `/etc/nginx/sites-available/yourdomain`
server {
listen 443 ssl http2;
server_name yourdomain.com www.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;
# 反向代理转发到后端负载池
location / {
proxy_pass http://backend_servers; # 和upstream名字保持一致
# 透传真实访客IP(重要!后端服务器拿到真实用户IP)
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_pass` 后面写 `http://` + upstream 名称,末尾**不要加 `/`**
## 三、完整 http 块参考(合并 CF 真实 IP + 负载均衡)
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# CF真实IP配置(之前配置的)
include /etc/nginx/cf-realip.conf;
log_format cf_log "$remote_addr [$time_local] "$request" $status "$http_referer" "$http_user_agent" CF_RAW:$http_cf_connecting_ip";
# ==========负载均衡后端池==========
upstream backend_servers {
least_conn;
server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
server 192.168.1.12:80 max_fails=3 fail_timeout=30s;
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/sites-enabled/*;
}
## 四、校验 + 重载 Nginx
sudo nginx -t
sudo systemctl reload nginx
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快