HAProxy 和 Nginx 作为反向代理的能力有何区别?
答案1
2019 年更新:
它们都是稳定且成熟的产品。HAProxy 专注于负载平衡,并且在这方面表现更好,而 nginx 是一个可以充当负载平衡器的 Web 服务器。
两个都:
- HTTPS 支持
- Websocket 支持
- 稳定、成熟、高效的产品
- 几乎无需调整即可处理 10k 个连接
HAProxy的:
- TCP、TCP-SSL、HTTP 和 HTTPS 负载平衡
- 在健康检查和故障转移条件方面有更大的灵活性
- 基本缓存(v1.8-2017)
- 可自定义日志格式,将访问日志导入kibana/splunk/graylog
- 详细状态页面,查看活动请求和服务器状态
- 可导出指标,以便与监控解决方案集成(graphite/prometheus/datadog)
- 更注重高性能。更适合处理 100k 个连接或 40 GbE 接口。
Nginx的:
- HTTP 和 HTTPS 负载平衡(付费版本为 TCP - UDP)
- 缓存更加灵活
- 可自定义日志格式,将访问日志导入kibana/splunk/graylog
- 无状态页面(仅限付费版本)
- 没有可导出的指标(仅限付费版本)
- 可以提供本地文件
- 可以提供 FastCGI 应用程序(非 CGI)
HAProxy 是一款免费软件,完全开源。他们通过销售预装 HAProxy 的硬件设备赚钱。
Nginx 是开放核心,许多功能仅在付费版本中可用。值得注意的是,它缺乏状态页面和监控指标这对于操作负载均衡器来说是大忌。
答案2
HAProxy 实际上只是一个负载均衡器/反向代理。Nginx 是一个也可以充当反向代理的 Web 服务器。
以下是一些差异:
HAProxy的:
- 是否支持 TCP 和 HTTP 代理(从 1.5-dev12 开始添加 SSL)
- 更多速率限制选项
- 作者在这里回答有关 Server Fault 的问题 ;-)
Nginx:
- 直接支持 SSL
- 也是一个缓存服务器
在 Stack Overflow 我们主要使用 HAProxy 和 nginx 进行 SSL 卸载,因此我推荐使用 HAProxy。
答案3
我使用 nginx 作为 HAProxy 的前端,但仅用于 SSL 终止。
HAProxy 是一个更易于调整和管理的负载均衡器(根据我的经验)。
我还结合使用 Varnish 进行静态对象缓存。(作为 HAProxy 的特定后端)
请参阅此服务器故障问题以了解更多信息。 订购 nginx/varnish/haproxy
答案4
如果只需要负载平衡,HA 代理会更好。但是结合使用 nginix 和 HA 代理会更有用,因为 nginix 在提供静态内容方面速度很快,它将满足所有静态数据请求,然后将所有请求发送到充当负载平衡器的 HA 代理,并将请求发送到 Web 服务器以通过平衡负载来满足请求。