5 分钟阅读 - 2025年5月15日
使用 NGINX 在多个地点的 VPS 服务器之间分配网站流量。了解如何配置负载平衡、避免单点故障并提高性能。
在不同地理位置的多个 VPS 实例之间对网站进行负载平衡可提高性能、减少延迟并增强冗余。通过使用NGINX 作为反向代理,您可以在后端服务器之间分配流量,每个服务器托管一份网站或应用程序副本。
在本指南中,我们将介绍设置流程,重点介绍最佳实践,并讨论使用反向代理引入单点故障的常见隐患,以及缓解该隐患的解决方案。
首先在多个地理位置部署VPS 实例,例如,一个在纽约,一个在法兰克福,一个在新加坡。每个 VPS 都应运行
确保所有服务器的内容和配置一致。
选择一个 VPS 作为反向代理和负载平衡器,或为此配置一个新的 VPS。该服务器将把流量路由到后端 VPS 节点。
使用基本的 NGINX 反向代理配置,定义上游组并将传入请求代理到后端节点。
下面是一个 NGINX 代理配置示例
http { 上游 backend_servers { 服务器 vps1.example.com; 服务器 vps2.example.com; 服务器 vps3.example.com; } 服务器 { listen 80; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } }
托管 NGINX 反向代理的 VPS 成为单点故障。如果该服务器宕机,即使后端服务器仍在运行,整个网站也将不可用。
使用Keepalived或带有VRRP的Pacemaker等工具,在两个或多个 NGINX 节点之间创建一个浮动 IP。如果其中一个出现故障,IP 会自动切换到另一个。
运行多个 NGINX 负载平衡器节点,并使用循环 DNS或GeoDNS(如 AWS Route 53、Cloudflare 负载平衡)在它们之间分配流量。
使用BGP 和 Anycast,从多个地理区域宣传同一 IP 地址。流量会根据用户的位置自动路由到最近的节点。
小贴士将基于 DNS 的地理路由与高度可用的 NGINX 代理服务器相结合,可提供最佳的覆盖范围和弹性。
虽然 NGINX Open Source 本身不支持主动健康检查,但它会在连接错误后停止向故障节点路由。如需更高级的健康检查,请使用 NGINX Plus:
更新 DNS 记录,指向 NGINX 反向代理的 IP 地址(如果使用 HA,则为浮动 IP)。如果使用多个代理,请将 DNS 提供商配置为负载平衡或地理感知解析。
NGINX 本身并不处理基于地理位置的路由,但你可以将其与以下功能搭配使用:
```` 用户请求 | v +---------------------+ | GeoDNS / 负载感知 | | DNS 路由层 | +---------------------+ | v +----------------------+ | 区域 NGINX 代理 | | (HA 或 Anycast IP) | +----------------------+ | v +---------------------+ | VPS 后端节点 | +---------------------+ | VPS 后端节点
使用 NGINX 在多个 VPS 服务器之间实现负载平衡,可帮助您进行全球扩展并减少延迟。但请记住:反向代理必须具有高可用性,否则就会成为负担。
要消除单点故障,可考虑基于 DNS 的负载分配、浮动 IP 或Anycast 网络。经过精心规划,您的多地点 VPS 设置可以提供快速、容错的大规模性能。
本指南仅适用于网络前端,不包括数据库连接以及高可用性分布的问题和解决方案。我们将在以后的文章中介绍...
使用 NGINX 在多个地点的 VPS 服务器之间分配网站流量。了解如何配置负载平衡、避免单点故障并提高性能。
5 分钟阅读 - 2025年5月15日
5 分钟阅读 - 2025年5月13日