3

これは私を夢中にさせています。EC2 でコンテンツを提供するアクティブで使用中の Apache プロキシ サーバーがあります。それはうまく機能しており、次のように構成されたさまざまな仮想ホストがあります。

<VirtualHost *:80>
    ServerName m.FOO.com
    ServerAlias customer.FOO.com

    ProxyPreserveHost On
    ProxyPass / ajp://10.211.42.48:8009/
    ProxyPassReverse / ajp://10.211.42.48:8009/

    <Proxy ajp://10.211.42.48:8009/*>
          Order allow,deny
          Allow from all
    </Proxy>
</VirtualHost>

これらはすべてうまく機能し、問題はありません。今私がやりたいのは、それを移動することです。そのため、アプリごとに単一の vhost の代わりに、アプリサーバーにプロキシするメイン サイトにサブ URL が必要です。したがって、「customer.FOO.com」を持つ顧客の代わりに、「FOO.com/customer/」を持つことになります。

簡単ですね。ええ、そうではありません。サーバーの「ルート」の vhost エントリ (現在ランディング ページを表示) を編集し、その中のディレクトリにプロキシ エントリを追加します。それはそれをするべきですよね?ええ、そうではありません:

<VirtualHost *:80>
    ServerName web01.aws.FOO.com
    DocumentRoot /var/www/html
    ErrorLog logs/www.FOO.com-error_log
    CustomLog logs/www.FOO.com-access_log common

    <Location /a>
            ProxyPass ajp://10.211.42.48:8009
            ProxyPassReverse ajp://10.211.42.48:8009
    </Location> 

    <Location /t>
            ProxyPass http://adm01
            ProxyPassReverse http://adm01
    </Location>

    <Proxy ajp://10.211.42.48:8009/*>
          Order allow,deny
          Allow from all
    </Proxy>

</VirtualHost>

http://www.FOO.com/t/にアクセスすると、内部 Web サーバーが取得され、正しくプロキシ転送され、すべて問題ありません。http://www.FOO.com/a/にアクセスすると、404 エラーが発生します。アクセスログにも 404 エラーが表示されます。

ProxyPass AJP エントリは、他の vhost エントリの内容と同じであることに注意してください。では、メイン vhost のサブディレクトリとしてではなく、他の vhost エントリのルートで機能するのはなぜですか?

ハーフ!

4

1 に答える 1

1

どこかのメーリングリストで見つけた特定のヒントでこれを解決することになりました。ProxyPassReverse ディレクティブは非常に扱いやすく、基本的な機能が 1 つあります。2 番目の引数 (ProxyPassReverse AB 形式を使用すると仮定) で一致するものはすべて、最初の引数に適用されます。したがって、2 番目の引数がアプリケーションからのリダイレクトとまったく同じであることを確認することが重要です。そうしないと、ProxyPassReverse ディレクティブが無視されます。

私の場合、最終的には Location エントリを次のように変更しました。

ProxyPass /a/ ajp://10.211.42.48:8009
ProxyPassReverse /a/ http://my.apphost.com/

そして、すべてがうまく機能し始めました。

于 2012-11-24T15:15:20.587 に答える