在一个环境中,我们有三台负载均衡服务器,每台服务器都有一个 Tomcat 实例,前面是两个不同的 Apache 虚拟主机。这两个虚拟主机(由所有三台服务器提供服务)都有自己不同的负载均衡器。在内部,第一台主机(我们称之为 barfoo)由其证书的端口 443(HTTPS)提供服务,第二台主机(我们称之为 foobar)由端口 1443(HTTPS)提供服务。当您访问 foobar 时,它会转到使用该主机 IP 亲和性的负载均衡器,因此您可以轻松地在为 foobar 提供服务的其中一台服务器上测试登录/HTTPS,但不能在其他服务器上测试(因为在 LB 会话的整个生命周期内,您都会不断获得该服务器,如果我没记错的话)。
此外,每台服务器都使用 Shibboleth v2 进行 authN/SSO,使用 mod_shib(如果我没记错的话)。因此,对 foobar 的正常请求会到达 LB,然后被定向到第三台服务器(从那时起,只要 LB 会话持续,就会一直这样做),然后是 Apache,然后是 Shibboleth SP,它会查看请求,让您通过与 Shibboleth IdP 协商登录,然后您再次访问 Apache,Apache 又会访问 Tomcat、呈现并返回响应。(我省略了一些步骤。)
我们想要通过 HTTPS(跳过负载均衡器)访问其中一台单独的服务器(foobar-03.acme.org,我们假设它的 IP 是 1.2.3.4),因此我们首先尝试将其放入 /etc/hosts 中:
1.2.3.4 foobar.acme.org
但是由于 foobar.acme.org 是在 1443 上运行的辅助虚拟主机,它会尝试在端口 1443 上获取 barfoo.acme.org 而不是 foobar.acme.org,并且会发现 barfoo.acme.org 的证书在这种情况下无效,因为它与请求的主机 foobar.acme.org 不匹配。
我认为 ssh 隧道可能足够简单,因此我尝试了:
ssh -L 7777:foobar-03.acme.org:1443 [email protected]
我试着打https://localhost:7777/webappname在浏览器中,但是当 Shibboleth 登录结束时,它会再次尝试重定向到 barfoo.acme.org,这是 443 的默认主机,我们陷入了无限重定向循环。
然后,我尝试在本地设置一个具有特权端口 443 的 SSH 隧道,以 foobar-03.acme.org 的 443 作为该虚拟主机的主机名:
sudo ssh -L 443:foobar-03.acme.org:1443 [email protected]
我还编辑了 /etc/hosts 以添加:
127.0.0.1 foobar.acme.org
这终于成功了,我能够让浏览器访问单个 HTTPS 主机https://foobar.acme.org/webappname,绕过负载均衡器。
这有点麻烦,并且并不适合所有人,因为需要使用本地 443 端口并通过 ssh 连接到服务器。
在这种情况下,是否有更简单的方法来浏览并登录单个主机?