Nginx应该位于HAProxy的前面还是相反?


11

我在网站基础架构设计方面的经验很少。我知道这可能取决于具体情况。该网站应该:

1)需要某些页面(例如登录页面)的HTTPS支持,而其他页面只是HTTP页面。

2)需要多个Web服务器,因此需要一些负载平衡。

3)需要HTTP缓存和压缩以提高性能。

4)一些请求(例如图像上传)应路由到专用后端服务器。因此,需要基于URL的平衡。

我知道NginX和HAProxy都是不错的开源反向代理和/或负载均衡器。由于HAProxy不支持SSL,因此Nginx的负载平衡不如HAProxy。我都吃

那么,我应该将Nginx(作为反向代理)放在HAProxy(作为负载均衡器)的前面还是相反?

谢谢

Answers:


7

如果计划通过HTTPS提供每个 Web服务器,则需要在HAProxy之前安装Nginx。使用该配置,您的Nginx将处理所有SSL工作,并将解密的HTTP通信直接发送到HAProxy前端,然后HAProxy会根据您指定的规则来平衡对Web服务器的请求。

正如womble所提到的那样,使用LVS的想法是,它具有较低的侵入性,因为它不保持Web服务器与访问站点的客户端之间的连接。另一方面,LVS仅向您提供简单的负载平衡,而不允许您基于文件扩展名,请求的URL,标头等转发请求。这就是为什么HAProxy在许多情况下都使用的原因。

如果您仅在一台服务器上需要SSL(非负载平衡),那么无需使用Nginx就可以安全地使用HAProxy。另一方面,您将遇到一个问题,即无法在Web服务器的HTTPS日志中看到客户端的源IP地址(因为HAProxy重写了该地址)。如果启用,则该IP将在HAProxy日志中;)


谢谢。因为“某些请求(例如,图像上传)应路由到专用后端服务器。因此,需要基于URL的平衡。” (当我更新问题时)。LVS可能无法满足我的要求。
Morgan Cheng

顺便说一句,HAProxy隐藏IP地址仅用于HTTPS还是HTTP?
Morgan Cheng

@Morgan,ip的隐藏仅用于HTTPS。

它仅用于TCP模式的后端,因此非HTTP的任何内容都不会看到IP地址,因为它是作为HTTP标头(X-Forwarded-For)发送的。

不完全是。Haproxy可以使用客户端的IP地址连接到服务器,但是需要内核合作(例如:TPROXY功能)。但是,应尽可能避免这种情况。
威利·塔罗


1

您应该只使用nginx,它可以做为前端Web服务器所需的一切。如果您需要前端负载平衡,请使用L3负载平衡器,例如Linux Virtual Server,因为它不会像HAproxy那样妨碍您的工作。如果需要进行后台负载平衡,例如平衡对后端工作程序池的请求,请使用HAproxy。


2
据说NginX的负载均衡很简单,只是循环方式。这就是我考虑HAProxy的原因。
Morgan Cheng

1
没错;我自己说过的 这就是为什么我不建议将nginx用作负载平衡器的原因,并且在我的(或任何其他)答案中,您不会发现将nginx用作负载平衡器。
womble

仅当您担心使用自己的源代码(或FreeBSD上的端口)进行编译时。有多个第三方模块可以改善负载平衡:wiki.nginx.org/3rdPartyModules
Martin Fjordvald 2011年

2
改善,是的。使足够,不。我对此的想法可以在hezmatt.org/~mpalmer/blog/2011/07/24/…(搜索“不漂亮”)中找到。
womble
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.