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

我在网站基础架构devise方面没有经验。 我知道这可能是具体情况。 该网站应该:

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

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

3)需要HTTPcaching和压缩来提升性能。

4)一些请求(例如图像上传)应该被路由到专用的后端服务器。 所以,基于URL的平衡是必需的。

我知道Nginx和HAProxy都是很好的开源反向代理和/或负载平衡器。 由于HAProxy不支持SSL,而Nginx负载平衡不如HAProxy。 我将采取两个。

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

谢谢

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

正如womble所提到的那样 ,使用LVS的想法是因为它没有在您的Web服务器和访问该站点的客户端之间build立连接,所以它的侵入性稍差。 另一方面,LVS只会为您提供简单的负载平衡,并且不允许您根据文件扩展名,请求的URL,标题等转发请求。这就是为什么HAProxy在许多情况下使用的原因。

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

你应该只使用nginx,它做你需要的一切作为前端的Web服务器。 如果您需要前端负载平衡,请使用Linux虚拟服务器等L3负载均衡器,因为它不像HAproxy那样受阻。 如果需要执行后台负载均衡,请使用HAproxy,例如平衡对后端工作者池的请求。

自从什么时候我就找不到信息,但截至2016年8月,haproxy 支持像魅力一样的SSL,包括SNI。

所以我会把haproxy放在nginx前面。