Mor*_*eng 11 nginx reverse-proxy load-balancing haproxy
我在网站基础架构设计方面的经验很少。我知道这可能是针对特定情况的。该网站应该:
1) 某些页面(例如登录页面)需要 HTTPS 支持,而其他页面只是 HTTP 页面。
2) 需要多个 Web 服务器,因此需要进行一些负载平衡。
3) 需要 HTTP 缓存和压缩以提高性能。
4) 一些请求(例如图片上传)应该路由到专用的后端服务器。因此,需要基于 URL 的平衡。
我知道 NginX 和 HAProxy 都是不错的开源反向代理和/或负载均衡器。由于 HAProxy 不支持 SSL,而 Nginx 负载均衡不如 HAProxy。我两个都要。
那么,我应该将 Nginx(作为反向代理)放在 HAProxy(作为负载均衡器)的前面,还是相反?
谢谢
小智 8
如果您计划让每个Web 服务器都通过 HTTPS 可用,那么您需要在 HAProxy 之前安装 Nginx。使用该配置,您的 Nginx 将处理所有 SSL 工作并将解密的 HTTP 流量直接发送到 HAProxy 前端,然后根据您指定的规则将请求负载均衡到您的 Web 服务器。
womble提到使用 LVS 的想法是它的侵入性稍低,因为它在您的 Web 服务器和访问该站点的客户端之间没有连接。另一方面,LVS 只会为您提供简单的负载平衡,并且不允许您根据文件扩展名、请求的 URL、标题等转发请求。这就是为什么在许多情况下使用 HAProxy。
如果您只需要在一台服务器上使用 SSL(非负载平衡),那么您可以安全地将 HAProxy 用于所有内容而不使用 Nginx。另一方面,您会遇到无法在 Web 服务器的 HTTPS 日志中看到客户端的源 IP 地址的问题(因为 HAProxy 重写了该地址)。如果您启用它,IP 将在 HAProxy 日志中;)
你应该只使用 nginx,它可以完成你作为前端网络服务器所需的一切。如果您需要前端负载平衡,请使用 L3 负载平衡器,例如Linux Virtual Server,因为它不会像 HAproxy 那样妨碍。如果需要进行后台负载平衡,例如平衡对后端工作池的请求,请使用 HAproxy。