HAProxy 与 Nginx
Posted
技术标签:
【中文标题】HAProxy 与 Nginx【英文标题】:HAProxy vs. Nginx 【发布时间】:2014-02-06 01:13:57 【问题描述】:我正在研究使用 HAProxy 和 nginx 进行负载平衡,但我有一些问题:
我应该使用 JUST HAProxy over Nginx 作为代理服务器吗? 是否有任何理由将 HAProxy 和 Nginx 安装在同一个代理服务器上?谢谢
【问题讨论】:
【参考方案1】:haproxy 是一个“负载平衡器”,它不知道提供文件或动态内容。 nginx 是一个能够处理许多有趣事情的 Web 服务器。如果您只需要负载平衡 + HA 一些第三个 Web 服务器,那么 haproxy 就足够了。如果您需要在请求的路由中实现一些静态内容或一些逻辑,然后在第三台服务器上终止它们,那么您可能需要 nginx。
您可以在同一主机上看到 haproxy+nginx 的原因是它允许您关闭单个 nginx 实例,而 haproxy 继续为来自其他主机的请求提供服务。想象一下使用 A 记录的 RR DNS:
myapp.com IN A 1.1.1.1
myapp.com IN A 1.1.1.2
其中 1.1.1.1 和 1.1.1.2 是两台主机,配置了 haproxy+nginx 以在它们之间进行负载平衡。现在由于某种原因,您的 1.1.1.1 的 nginx 出现故障。进入 1.1.1.1 的浏览器仍然由其上的 haproxy 提供服务,而后者又从 1.1.1.2 的 nginx 获取数据。
希望对你有帮助
【讨论】:
【参考方案2】:HAProxy 绝对是更好、功能更全的负载均衡器(与免费的 nginx 相比,而不是 nginx plus(但也有人可能会这样说)。
遗憾的是,HAProxy 仍然无法做的一件事是通用 UDP 连接。所以我们在日志记录 lbs 上使用了 HAProxy 和 nginx。但是 HAProxy 在 2.3 中发布了对 syslog/udp 的支持,所以我们即将改变它。 :)
【讨论】:
【参考方案3】:我们将 HAProxy 与 nginx 一起使用。原因有很多。
Nginx 可以做任何事情(或多或少),但您不希望您的负载均衡器服务于网页。配置中的一些错误(可能与负载平衡无关)并且您的整个设置突然停止。想象一下,您有一个 Nodejs 应用程序、一个 Dotnet Core 应用程序、由 Nginx 提供的静态文件和一个 php 应用程序。你只是犯了一些错误,你的 4 个应用程序就停止了。如果每个应用都有多个实例,您也失去了冗余。
即使你说 Nginx 只会做负载均衡,但 Nginx 不支持 PROXY 协议,如果你转发到其他同样不提供页面服务的服务器,这是有问题的。
此外,做一件事并且做得好,还有一些话要说。 Nginx 是当今的主要工具箱。它几乎可以做所有事情。您的负载均衡器应该是您设置中最稳定的部分。你不想使用专为负载平衡而构建的东西吗?
如果您使用 varnish,那么 HAProxy 可以很好地使用它,实际上它们是由同一个人制作的。
如果您想要更高级别的平衡,那么您还可以将 dns 用作具有多个 HAPROXY 实例的负载平衡器。 Dns 并不适用于此本身,但您总会有一些薄弱环节。即使您的负载均衡器由您的云提供商管理,它也可能崩溃。如果您的 dns 条目中有多个服务器,今天的大多数 Web 浏览器都会尝试其他服务器,因此它就像一个负载均衡器。您的 dns 应该非常可靠,从而增加您的正常运行时间。
我们使用 2 个 haproxy 实例和 2 个 varnish 实例和两个 dns 条目。
【讨论】:
以上是关于HAProxy 与 Nginx的主要内容,如果未能解决你的问题,请参考以下文章