Nginx负载均衡实战:多台香港VPS构建高可用Web集群完整配置
单台服务器存在性能上限和单点故障风险。通过Nginx负载均衡将流量分发到多台后端服务器,可以同时提升并发处理能力和系统可用性。本文以两台香港VPS为例,搭建完整的负载均衡集群。
一、负载均衡架构设计
用户请求
↓
负载均衡节点(Nginx LB) ← 香港VPS #1(公网IP)
↓ ↓
后端节点1 后端节点2 ← 香港VPS #2 #3(内网IP)
↓ ↓
共享数据库(MySQL主从)
↓
共享文件存储(NFS 或 对象存储)二、Nginx负载均衡配置
基础轮询配置(Round Robin)
<code">http {
upstream web_backend {
server 内网IP1:8080; # 后端节点1
server 内网IP2:8080; # 后端节点2
}
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://web_backend;
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_connect_timeout 10s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
}
}加权轮询(根据服务器性能分配流量)
<code">upstream web_backend {
server 内网IP1:8080 weight=3; # 高配服务器接70%流量
server 内网IP2:8080 weight=1; # 低配服务器接约30%流量
}IP哈希(同一用户始终访问同一节点)
<code">upstream web_backend {
ip_hash; # 根据客户端IP哈希,解决Session不一致问题
server 内网IP1:8080;
server 内网IP2:8080;
}最少连接数(推荐生产环境)
<code">upstream web_backend {
least_conn; # 将新请求分发到当前连接数最少的节点
server 内网IP1:8080;
server 内网IP2:8080;
keepalive 64; # 维持长连接,减少建连开销
}三、健康检查配置
<code">upstream web_backend {
server 内网IP1:8080 max_fails=3 fail_timeout=30s;
server 内网IP2:8080 max_fails=3 fail_timeout=30s;
# max_fails=3:30秒内失败3次则标记为不可用
# fail_timeout=30s:不可用状态持续30秒,之后尝试恢复
# 备用节点(只有主节点全部不可用时才启用)
server 内网IP3:8080 backup;
}四、Session共享方案
多节点部署时,Session必须集中存储,否则用户请求到不同节点时会丢失登录状态。
方案A:Redis集中存储Session(推荐)
<code"># PHP配置(所有后端节点的php.ini) session.save_handler = redis session.save_path = "tcp://Redis服务器内网IP:6379?auth=密码"
<code"># WordPress的wp-config.php
define('WP_REDIS_HOST', 'Redis服务器内网IP');
define('WP_REDIS_PASSWORD', 'Redis密码');
define('WP_REDIS_DATABASE', 0);方案B:Sticky Session(Nginx IP哈希)
<code">upstream web_backend {
ip_hash; # 简单方案,但节点故障时影响对应IP用户
server 内网IP1:8080;
server 内网IP2:8080;
}五、共享文件存储配置(NFS)
多节点部署时,WordPress的uploads目录需要共享,否则节点间文件不同步。
<code"># NFS服务器(存储节点)安装配置 apt install nfs-kernel-server -y # 创建共享目录 mkdir -p /shared/uploads chown -R www-data:www-data /shared/uploads # 配置导出 echo "/shared/uploads 内网IP1(rw,sync,no_subtree_check) 内网IP2(rw,sync,no_subtree_check)" >> /etc/exports exportfs -ra systemctl restart nfs-kernel-server
<code"># 所有后端节点挂载NFS apt install nfs-common -y mount NFS服务器内网IP:/shared/uploads /var/www/html/wp-content/uploads # 开机自动挂载 echo "NFS服务器内网IP:/shared/uploads /var/www/html/wp-content/uploads nfs defaults 0 0" >> /etc/fstab
六、动静分离配置
负载均衡节点直接处理静态资源请求,动态请求才转发到后端,减轻后端压力:
<code">server {
listen 443 ssl http2;
server_name yourdomain.com;
root /var/www/html; # 静态文件直接从LB节点本地提供
# 静态资源由LB节点直接返回(不转发到后端)
location ~* \.(jpg|jpeg|png|gif|webp|ico|css|js|woff2|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
# 动态请求转发到后端节点
location / {
try_files $uri @backend;
}
location @backend {
proxy_pass http://web_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}七、监控后端节点状态
<code">server {
listen 127.0.0.1:8081;
location /nginx-status {
stub_status on;
allow 127.0.0.1;
deny all;
}
location /upstream-status {
# 需要nginx-module-upstream-fair或商业版Nginx Plus
# 开源替代:lua-upstream-nginx-module
}
}<code"># 实时查看连接状态 curl http://127.0.0.1:8081/nginx-status # 输出: # Active connections: 45 # server accepts handled requests # 12345 12345 67890 # Reading: 2 Writing: 8 Waiting: 35
八、总结
Nginx负载均衡集群的核心配置项:选择合适的分配策略(推荐 least_conn)、配置健康检查避免流量打到故障节点、用Redis解决Session共享、用NFS或对象存储解决文件共享。IDC.Net的香港VPS同账号多台服务器支持内网互通,构建负载均衡集群时内部通信无需走公网,延迟低且免出站流量费用。
版权声明:
作者:后浪云
链接:https://idc.net/help/442768/
文章版权归作者所有,未经允许请勿转载。
THE END
