我正在尝试让我的 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