web-dev-qa-db-ja.com

HTTPS接続に外部プロキシを使用するようにApacheを構成する

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リクエストに外部プロキシを使用するにはどうすればよいですか?

7
tomalec

私はついにそれを動作させました:)問題は(RTFM)でした

「matchは、リモートサーバーがサポートするURLスキームの名前、またはリモートサーバーを使用する部分的なURLのいずれか、またはすべての要求についてサーバーに接続する必要があることを示す*のいずれかです。リモートサーバーは部分的なURLですリモートサーバー用。」

したがって、解決は簡単です。代わりにProxyRemoteMatchを使用してください:

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

あなたが得るエラーは、設定への最後の行が原因です

 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

1
silviud