在Apache中配置代理以删除身份验证

问题描述:

为了避免牦牛剃须,我会尽量提供尽可能多的上下文。在Apache中配置代理以删除身份验证

我们有一个内部应用程序,也可在公共互联网上使用。这个应用程序运行在IBM i上的几个Apache实例上 - 大多数这些实例都需要http基本认证,除了一个实例充当“欢迎页面”。这个“欢迎页面”没有身份验证,但作为一个导航中心,用户可以转到应用程序的其他部分(具有身份验证并在不同的Apache实例上运行)的链接。

我们还有一些存储在Confluence(一个wiki应用程序)中的文档,它运行在一个单独的服务器上。这个wiki应用程序可以在不需要验证的情况下显示文档,但是如果您进行了验证,则可以选择编辑文档(当然,假设您有权这样做)。但关键在于文档在不需要验证的情况下可见。

我的问题是:我们希望Confluence中的文档可以在主应用程序内部访问(无论是在内部还是通过互联网访问时),但由于文档有点敏感,我们不希望它可以访问整个互联网。

我们提出的解决方案是使用反向代理 - 我们在主应用程序上配置Apache实例,以便主应用程序上/help/的请求代理到合流应用程序。因此,Confluence应用程序不直接暴露于Internet。

但这是问题出现的地方。

如果我们只是代理/help/通过不需要身份验证的主要应用Apache实例,则该文档可从没有问题的主要应用 - 但因为你不需要身份验证,这是提供给大家上互联网也是如此 - 所以这是一个不行。

如果我们通过主要应用程序通过主要应用程序的Apache实例来代理'/ help /',那么好像基本认证信息从主应用程序服务器传递到Confluence服务器上,然后我们得到一个认证失败,因为不是每个使用主应用程序的人在Confluence服务器上都有一个帐户。 (对于那些做的,它工作正常 - 但大多数用户不会有一个Confluence帐户)。

所以(可能牦牛剃须从这个角度提出警告),却仿佛与HTTP基本验证打交道时,如果从服务器上配置了代理配置到服务器B,并设置将服务器A上的代理配置为需要http基本认证,然后该认证信息直接传递给服务器B,并且在这种情况下,服务器B抱怨,因为它不期望认证信息。

我对该问题的解决方案是设置2级代理 - 使用需要身份验证的Apache实例也需要代理身份验证/help/,但代理服务器(服务器C)有/help/。此服务器C不需要身份验证,但不会暴露于Internet。并且服务器C配置为将/help/代理到实际的Confluence服务器。

我在proxy-chain-auth的基础上这样做了一个环境变量,它似乎表明默认情况下,如果您有代理链,认证信息不会自动沿着链发送。

唉,这没有奏效 - 我得到一个认证错误,似乎表明Server C事实上代理了认证信息,尽管我没有设置proxy-chain-auth

所以,这是我的牦牛剃毛之旅。

我只是想设置一个配置,使我们存储在Confluence上的文档需要某种认证,但认证来自主应用程序,而不是来自Confluence。

(没有要求通过互联网访问它,因为Confluence服务器可以被其网络上的任何人查看而没有问题,所以这些都不会成为问题)。

我希望我的问题已经够清楚了 - 我实在不介意指向不同的方向来实现主要目标,但我不能改变主应用程序(或Confluence)从使用HTTP基本认证。

想法,任何人?

PS。为了从Confluence服务器中检索文档,我实际上使用它们的REST API来检索页面内容 - 我不知道它是否有任何相关性,但我只是想明确说明它是否适用。

事实证明,问题的解决方案非常简单。

对于我的第二个不需要身份验证的代理,我必须更改Apache配置以删除任何授权标头。

RequestHeader unset Authorization 

这会停止从第二个代理传递到Confluence的认证信息。