我对网站基础架构设计经验不多。我知道这可能是特定情况。该网站应该:
1)有些页面需要HTTPS支持(例如登录页面),而其他页面只是HTTP页面。
2)需要多个 Web 服务器,因此需要一些负载平衡。
3)需要 HTTP 缓存和压缩来提高性能。
4) 某些请求(例如图片上传)需要路由到专用的后端服务器。因此需要基于 URL 的负载均衡。
我知道 NginX 和 HAProxy 都是不错的开源反向代理和/或负载均衡器。由于 HAProxy 不支持 SSL,而 Nginx 负载均衡不如 HAProxy。我会选择两者。
那么,我应该将 Nginx(作为反向代理)放在 HAProxy(作为负载均衡器)的前面,还是放在对面?
谢谢
答案1
如果你计划每一个如果您的 Web 服务器可通过 HTTPS 访问,则需要在 HAProxy 前面安装 Nginx。通过该配置,您的 Nginx 将处理所有 SSL 工作并将解密的 HTTP 流量直接发送到 HAProxy 前端,然后前端将根据您指定的规则将请求负载平衡到您的 Web 服务器。
使用 LVS 的想法,正如沃姆布尔是它不太具有侵入性,因为它不在您的 Web 服务器和访问站点的客户端之间建立连接。另一方面,LVS 仅为您提供简单的负载平衡,并且不允许您根据文件扩展名、请求的 URL、标头等转发请求。这就是在许多情况下使用 HAProxy 的原因。
如果您只需要在一台服务器上使用 SSL(非负载平衡),那么您可以放心地使用 HAProxy 处理所有事情,而无需使用 Nginx。另一方面,您会遇到一个问题,即无法在 Web 服务器的 HTTPS 日志中看到客户端的源 IP 地址(因为 HAProxy 会重写该地址)。但是,如果您启用它,IP 将会出现在 HAProxy 日志中 ;)
答案2
哈普罗西自 2014 年发布 v. 1.5 以来,确实非常支持 SSL,包括 SNI。
因此我会把 haproxy 放在 nginx 前面。
答案3
你应该只使用 nginx,它可以完成你作为前端 Web 服务器所需的一切。如果你需要前端负载平衡,请使用 L3 负载平衡器,例如Linux 虚拟服务器,因为它不会像 HAproxy 那样妨碍工作。如果需要进行幕后负载平衡,例如将请求平衡到后端工作器池,请使用 HAproxy。