3

apache2 と mod_proxy を使用して透過プロキシを実装しようとしていますが、今のところ何もしません。トラフィックを正しい「ホスト」に転送するだけです。

ホストに依存したくありませんが、動的であるため、すべてのホストで機能します。私はこれをやろうとしました:

RewriteEngine on
RewriteLogLevel 5
RewriteLog "/var/log/apache2/rewrite.log"
RewriteRule ^(.*)$ $1
ProxyPass / http://$1

私は他のいくつかのアプローチも試しました(どれもうまくいきませんでした)。ヘッダーから「ホスト」にアクセスして、ProxyPass ディレクティブで使用する方法はありますか?

nginx では、$host、$remote_addr などを使用します。Apache でそれを置き換える方法はありますか?

私が必要としているのは、ProxyPass コマンド内で %{HTTP_HOST}、%{REQUEST_URI}、および %{SERVER_PORT} にアクセスできることです。

4

3 に答える 3

3

動的ホスト名で Apache ProxyPass ディレクティブを使用するには、ModRewrite も使用する必要があります。

目的

virtualhost へのすべてのリクエストは、%{HTTP_HOST} への ProxyPass および ProxyPassReverse (「Apache ゲートウェイ」とも呼ばれます) になります。

これが理にかなっている唯一の理由は、Apache サーバーに特定のホスト名の localhost エントリがある場合です。

ローカルホスト ファイル

10.0.0.2 foo.bar.com    
10.0.0.3 bar.bar.com    

使い方

  1. クライアントは foo.bar.com にリクエストを送信します (dnslookup はパブリック IP です... あなたの APACHE SERVER)
  2. Apache サーバーには、foo.bar.com (ネットワーク上の他のサーバー) の 10.0.0.2 の localhost エントリがあります。
  3. リクエストは ModRewrite を通過し、/path1 が追加され、ProxyPass と ProxyPassReverse に渡されます
  4. ProxyPass と ProxyPassReverse は、IP 10.0.0.2 で foo.bar.com に呼び出しを渡します。

クライアントは foo.bar.com --- リバース プロキシを ----> foo.bar.com/path1 に要求します (他の内部サーバー上)

アパッチ構成

    <VirtualHost *:443>
    Servername *

    # Must not contain /path1 in path (will add /path1)
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/path1/.*
    RewriteRule ^/(.*) https://%{HTTP_HOST}/path1$1 [NC,R=302,L]

    # Must contain /path1 in path (will send request to the proxy)
    RewriteEngine On
    RewriteOptions Inherit
    RewriteCond %{REQUEST_URI} ^/path1/.*
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [NC,P]

    SSLEngine on
    SSLProxyEngine On
    ProxyRequests Off

    ProxyPass            /  https://$1/
    ProxyPassReverse     /  https://$1/

    ProxyPreserveHost On

    ###################
    # SSL Constraints #
    ###################

    SSLProtocol -ALL +SSLv3 +TLSv1

    # Choose cipher suites
    SSLHonorCipherOrder On
    SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXPORT

    # SameOrigin The page can only be displayed in a frame on the same origin as the page itself
    Header set X-Frame-Options SAMEORIGIN

    SSLCertificateFile     /etc/apache2/example.crt
    SSLCertificateKeyFile  /etc/apache2/example.key
    SSLCertificateChainFile /etc/apache2/gd_bundle.crt
    SetOutputFilter INFLATE;proxy-html;DEFLATE
</VirtualHost>
于 2013-09-18T18:32:18.210 に答える
1

自分の質問に答えるだけです:

私は2つのことを見逃していました:

構成は次のとおりです。

RewriteEngine On
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [P]

仮想ディレクトリで継承を有効にすることを忘れないでください。

RewriteEngine On
RewriteOptions Inherit
于 2013-03-28T14:24:10.827 に答える
0

まだ読んでいない場合は、このページを読む必要があります。

https://httpd.apache.org/docs/2.2/mod/mod_proxy.html#forwardreverse

ProxyRequests ディレクティブが探しているものだと思います。

于 2013-03-28T14:04:42.840 に答える