我正在构建一个代理链,以通过额外的身份验证从外部访问内部代理:
Internet -> [Apache Forward Proxy] -> [Internal Squid Proxy] -> Internal Website
字符串
Apache Forward Proxy正在执行TLS,包括基于证书的身份验证(CBA),Squid Proxy需要使用用户名/密码进行基本身份验证。身份验证对这两个组件都按预期工作。
现在的挑战是让Apache充当转发代理,并将Proxy-Authorization头从用户转发到内部代理。
下面是我使用的当前配置(启用了mod_proxy和mod_proxy_connect):
# Enable forward proxy
ProxyRequests On
# Pass all requests on to the squid proxy
ProxyRemote * http://proxy.internal:3128
# Only allow proxy connect to port 443
AllowCONNECT 443
型
使用此设置,Apache不会将Proxy-Authorization头转发到内部代理。我能找到的所有设置(Proxy-Chain-Auth,ProxyAddHeaders,重写规则等)都只能在使用ProxyPass的反向代理模式下工作。但是反向代理不适合这里,因为在这种模式下,Apache会修改头部,并且用于TLS Web服务器的CONNECT将无法工作。
Apache不转发来自客户端的任何头字段,最后从Apache到内部代理的请求看起来像这样:
CONNECT someserver.de:443 HTTP/1.0\r\n
Proxy-agent: Apache/2.4.18 (Ubuntu)\r\n
\r\n
型
我知道代理授权字段是一个逐跳字段,通常不允许传递给下一个代理。
当Apache作为Forward Proxy时,是否仍然可以将Proxy-Authorization头转发给内部Proxy?
在Apache bugtracker中有一个相关主题的错误。但是这一个是指定用户名/密码硬编码在apache配置,这不是我需要的。我想单独转发客户授权。https://bz.apache.org/bugzilla/show_bug.cgi?id=37355
1条答案
按热度按时间h5qlskok1#
我有一个类似的设置,env变量Proxy-Chain-Auth是解决问题的方法。您可以按如下方式配置Apache:
字符串
通过设置env变量Proxy-Chain-Auth,授权凭证将被转发到下一个代理,即proxy.internal:3128。此外,您可以自己设置代理授权头(通常由客户端提供),并使用squid代理需要的静态/硬编码的基本认证凭证。这是bug报告中问题的可能解决方案:https://bz.apache.org/bugzilla/show_bug.cgi?id=37355
这个解决方案在我使用apache2.4.57时很有效