配置 Apache 使用外部代理进行 HTTPS 连接

配置 Apache 使用外部代理进行 HTTPS 连接

我正在尝试让我的 Apache 使用外部代理来处理 HTTPS 请求:

Listen 80
Listen 443
..
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
..
SSLProxyEngine On
SSLProxyVerify none
SSLCACertificateFile conf/cert/curl-ca-bundle.cert

ProxyRemote http://*.externaldomain.com:80 http://external.proxy.com:8585
ProxyRemote http://*.externaldomain.com:443 https://external.proxy.com:8585
ProxyPass    /sub      https://sub.externaldomain.com/

但要求 http://localhost/sub/某物返回 503 并给出:

[Fri Apr 15 17:38:15 2011] [error] (OS 10060)A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.  : proxy: HTTPS: attempt to connect to 11.11.11.111:443 (sub.domain.com) failed

有什么奇怪的

curl -x 11.11.11.111:8585 https://sub.externaldomain.com/something

作品。

如何让 Apache 使用外部代理来处理 https 请求?

答案1

您收到的错误是由于您在配置中的最后一行

 ProxyPass    /sub      https://sub.externaldomain.com/

这告诉 apache 将请求从 /sub 代理传递到 sub.externaldomain.com:443,这正是您实际收到的错误消息。

现在你的设置丢失了

 ProxyRequests On 

因为 ProxyRemote 仅在启用此功能且用户代理(浏览器)配置为使用 apache 服务器作为代理时才起作用。我的理解是您想要执行如下操作:

  • 1 - 通过您配置的远程代理将所有流量代理到 /sub - 但不要使用本地 apache 服务器作为 ProxyPass ?! - 如果是这种情况,请删除最后一行

  • 2 - 你想让你的 apache 服务器认为它在本地有资源 /sub,而实际上请求是发往远程服务器的?!- 如果是这种情况,你只需要配置最后一行适当的端口,并使用此指令

ProxyPassReverse /sub https://sub.externaldomain.com/ # here configure the right port as you can see 443 is not working

答案2

我终于让它工作了:) 问题出在(RTFM)

“match 是远程服务器支持的 URL 方案的名称,或者是应该使用远程服务器的部分 URL,或者是 * 表示应该联系该服务器来处理所有请求。remote-server 是远程服务器的部分 URL。”

所以解决方法很简单,使用ProxyRemoteMatch如下方法:

ProxyRemoteMatch externaldomain\.com http://external.proxy.com:8585

相关内容