我在防火墙后面有一个 Web UI,它采用“简单”身份验证(Hadoop JobTracker UI)。这意味着 URL 包含用户名作为参数,并且 Web 服务器相信浏览器就是它所说的那个人。它侦听非标准端口 (50030) 并且没有任何“应用程序”标识符(因此 URI 部分实际上是随机的)。因此,我的目标 URL 可能类似于:https://actual_web_server:50030/jobqueue_details.jsp?queueName=default&User.Name=foo
使事情复杂化:
- 我想使用 Apache 作为反向代理,以减少防火墙中的漏洞数量。
- 我希望 Apache 对用户进行身份验证(即针对 LDAP)。
- 我想为我们的最终用户提供一个很好的 URL,以区分我拥有的几个不同的 Hadoop 集群。
- 我必须使用加密。
因此,我希望在浏览器上显示上述 URL:
https://JobTracker.Cluster1.MySite.com/jobqueue_details.jsp?queueName=default
我希望我可以将 Apache 配置为:
1) 使用 mod_authnz_ldap 对 LDAP 的传入连接进行身份验证(根据此处。)这看起来相对简单,有很多示例,我想我可以处理这一点!
2) 在 Apache 上使用 DNS 条目 (JobTracker.Cluster1.MySite.com) 和虚拟主机条目来启用更漂亮的 URL。同样,这不是真正的挑战,而是使配置复杂化。
3) 使用 mod_rewrite 来:
3a) 如果用户提供了“User.Name=foo”参数,则删除它,因为我们不能信任他们提供的值。
3b) 将参数“User.Name={Authenticated LDAP Username}”添加到 URL。
3c) 将漂亮的主机名和端口 (JobTracker.Cluster1.MySite.com) 替换为目标主机名和端口 (actual_web_server:50030)
3d) 使用这个新 URL 将请求代理到目标 Web 服务器
3e) 浏览器中显示的 URL(以及页面上的任何链接)也被修改为使用正确的“漂亮”主机名。
3f) 理想情况下,浏览器中显示的 URL 未显示“User.Name=foo”参数。如果放映的话,这不是一部大戏,但我宁愿不放映。
注意我不能简单地重定向,因为我不能从浏览器直接连接到“actual_web_server”。此外,这一 Apache 安装将提供与此相同配置的多个 Web UI(每个的自定义 DNS 条目)。
希望有人“去过那里,做过那个”足以知道如何,或者即使,这是可能的......