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/something を要求すると、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リクエストに外部プロキシを使用するにはどうすればよいですか?
私はついにそれを動作させました:)問題は(RTFM)でした
「matchは、リモートサーバーがサポートするURLスキームの名前、またはリモートサーバーを使用する部分的なURLのいずれか、またはすべての要求についてサーバーに接続する必要があることを示す*のいずれかです。リモートサーバーは部分的なURLですリモートサーバー用。」
したがって、解決は簡単です。代わりにProxyRemoteMatch
を使用してください:
ProxyRemoteMatch externaldomain\.com http://external.proxy.com:8585
あなたが得るエラーは、設定への最後の行が原因です
ProxyPass /sub https://sub.externaldomain.com/
これにより、Apacheは/ subからsub.externaldomain.com:443にリクエストをプロキシするように指示されます。これは、実際にエラーメッセージに表示されるものです。
現在、セットアップがありません
ProxyRequests On
これは、ProxyRemoteが機能するのは、これがオンになっていて、ユーザーエージェント(ブラウザ)がApacheサーバーをプロキシとして使用するように構成されているためです。あなたが次のようなことをしたいという私の理解は:
1-設定したリモートプロキシを介してすべてのトラフィックを/ subにプロキシしますが、ローカルApacheサーバーをProxyPassとして使用しませんか。 -その場合、最後の行を削除します
2-ローカルにリソース/ subがあり、実際にリクエストがリモートサーバーに送信されるように、Apacheサーバーに働きかけたいですか? -その場合は、適切なポートを使用して最後の行だけを構成し、このディレクティブも使用する必要があります。
ProxyPassReverse /sub https://sub.externaldomain.com/ # here configure the right port as you can see 443 is not working