我将首先尝试描述我遇到的问题。
假设我在本地机器的防火墙后面的两个不同端口上运行两个不同的 http 服务器:
SERVER1: http://localhost:8001
SERVER2: http://localhost:8002
现在我想要做的是通过一个端口公开这两个端口。假设通过端口 80,如下所示:
http://server1.mydomain.com:80
http://server2.mydomain.com:80
要求还在于保留标头,并且客户端和终端服务器不会意识到中间的代理。因此,如果终端服务器上存在摘要式身份验证,我预计它将继续工作,就像中间没有代理一样。
我猜想这可以通过透明反向代理来实现,但由于这不是我的专业领域,所以我真的不确定我是否正在寻找正确的方向。
因此问题是:
- 实现这一目标的正确方法是什么?
- 哪些解决方案可以实现这一目标?
- 还有其他方法可以达到上述相同的效果吗?
答案1
这取决于您的反向代理产品,但这绝对是可能的。我们为此使用 MS TMG,它可以让客户端直接向后端进行身份验证,并且它也可以代理端口,但其他反向代理解决方案应该能够做到这一点。
答案2
这是非常有可能的,而且很容易,比如HAProxy。
您的字体端/后端配置看起来像这样。
frontend http-in
bind *:80
mode http
option forwardfor
acl isServer1 hdr(host) -i server1.mydomain.com
acl isServer2 hdr(host) -i server2.mydomain.com
use_backend server1 if isServer1
use_backend server2 if isServer2
backend server1
mode http
server server1 127.0.0.1:8001 check
backend server2
mode http
server server2 127.0.0.1:8002 check