HAProxy 可以在一个 IP 和端口上同时处理 Web 服务器和 SSL *** 吗?

Posted

技术标签:

【中文标题】HAProxy 可以在一个 IP 和端口上同时处理 Web 服务器和 SSL *** 吗?【英文标题】:Can HAProxy front both Web servers and SSL *** on one IP and port? 【发布时间】:2010-10-22 04:28:38 【问题描述】:

我需要一个反向代理,通过一个 IP/端口来支持 Lablz Web 服务器和 SSL *** Adito(SSL Explorer fork)。使用 nginx 无法实现这一点。无法将 Adito 用作通用反向 HTTP 代理。

如果 HAProxy 无法感知 HTTP 流量,它是否可以回退为 TCP 代理? 换句话说,如果它的第 7 层检查确定这不是 HTTP 流量,它是否可以回退到第 4 层?

这是我的设置

具有一个公共 IP(弹性 IP)的 EC2 机器。 只有一个端口是开放的 - 443。 Stunnel 位于 443 并将流量传递给 HAProxy(我不喜欢使用 Stunnel,但 HAProxy 还没有完全支持 SSL,这与 Nginx 不同)。 HAProxy 必须配置为将一些 HTTP 流量传递到一台服务器(位于 SVN 服务器前面的 Apache 服务器),并将其余 HTTP 流量传递到我们的 Lablz Web/App 服务器。 所有非 HTTP 流量都必须转发到 Adito ***。 此流量为: VNC、NX、SMB ...以及 Adito 支持的所有其他协议

我不能依赖源 IP 地址或端口将流量分成 HTTP 和非 HTTP。

那么,这样的配置可以在 HAProxy 中完成吗?可以为此使用任何其他反向代理吗?如果我对 HAProxy 的想法不正确,请告诉我,并且可以使用替代方法。

顺便说一句,Adito SSL *** 非常棒,如果此设置有效,我们将能够为 Lablz 开发人员提供出色的一键式单次登录安全 VNC-over-HTTPS 访问权限,以访问他们在云中的盒子。

没有解决方案,但通过 Adito - 请证明我错了。但请不要说 VNC over SSH 更好。是的,VNC-over-SSH 更快、更安全,但也更难(对于我们的目标用户群)设置并假定用户位于允许端口 22 上的出站流量的防火墙后面(并非总是如此)。

此外,Adito 不仅仅是远程访问网关 - 它是一个成熟的浏览器内 ***、一个软件分发平台等等。我与 Adito 的人没有任何关系 - 请参阅我的 Adito post on our Lablz blog。

【问题讨论】:

【参考方案1】:

好的,首先,我会使用一个简单的防火墙将所有 HTTP 流量与非 HTTP 流量分开。您需要的是数据包检查以找出传入的内容。

haproxy 或 nginx 都无法做到这一点。它们都是为网络流量而设计的,我看不出它们如何检查流量来猜测它们正在处理的是什么。

更新:稍微研究了一下,使用 iptables 您可能可以使用字符串匹配来划分流量。然而,这一切都很棘手,尤其是在加密性质的情况下。我的一个朋友发现了l7-filter,这看起来正是您所需要的。让我知道这是否有帮助。

【讨论】:

直到,感谢您的建议。我正在查看 L7-filter,据我所知,它可以使用正则表达式来识别应用程序协议,包括 HTTP。 L7-filter 从 IPTABLES 获取数据包并将它们返回给 IPTABLES。 L7-filter 检查每个 TCP 连接上的第一组 IP 数据包,并根据正则表达式匹配标记每个数据包。然后 IPTABLES 可以使用此标记将标记的数据包转发到正确的 IP/PORT。理论上听起来不错,但设置起来似乎非常复杂 - 至少对我来说是这样。 直到,HAProxy 可以代理任何 TCP 流量,这就是为什么我认为它可以检测 HTTP 和非 HTTP 流量并将它们分开的原因。但是在研究了 HAProxy 文档之后,我找不到方法——因此我在 *** 上问了一个问题。 Nginx 不代理 ant TCP 协议,只代理它支持的特定协议,如 HTTP、SMTP - 所以你是对的 - 它不能使用。 l7-filter 当前的 HTTP 匹配模式使用 HTTP 响应,而不是请求 - 因此它不适合路由流量。可能会为 HTTP 创建新的 l7-filter 正则表达式模式... 我正在探索使用 DeleGate (delegate.org) 的可能性,它是一个全功能代理 - 转发和反向代理。它支持数十种应用协议,可以作为任何应用协议的通用 TCP 代理。

以上是关于HAProxy 可以在一个 IP 和端口上同时处理 Web 服务器和 SSL *** 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Haproxy 安装配置详解-端口映射

HAProxy后端web服务器状态检测

haproxy默认端口号 是多少

haproxy+keepalived应用实战

【HAproy】HAproxy TCP源端口耗尽问题解决方法

HAProxy Lua如何改变服务器端口?