動的ホスト名による Apache ProxyPass

動的ホスト名による Apache ProxyPass

動的ホスト名と他のポートに基づいて内部サーバーにプロキシするように Apache を設定しようとしています。少し複雑すぎるようです。私の場合は次のようになっています。

<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>

しかし、これは (明らかに) 動的ではありません。書き換えルールなどに取り組んできましたが、うまく動作しませんでした。本当に必要なのは次のようなものです。

^/[internalservername]/awesomewebapp
      proxy internally to
http://[internalservername]:8080/awesomewebapp

前もって感謝します

答え1

RewriteRuleを使用してリクエストをプロキシすることができます。mod_rewrite をプロキシとして使用する場合の Apache ドキュメント次のように表示されます。

説明:

mod_rewrite は [P] フラグを提供します。これにより、URL を mod_proxy 経由で別のサーバーに渡すことができます。ここでは 2 つの例を示します。1 つの例では、URL が別のサーバーに直接渡され、ローカル URL であるかのように提供されます。もう 1 つの例では、不足しているコンテンツをバックエンド サーバーにプロキシします。

解決:

URL を別のサーバーに単純にマップするには、次のように [P] フラグを使用します。

RewriteBase の RewriteEngine "/products/" RewriteRule "^widget/(.*)$" "http://product.example.com/widget/$1" [P] ProxyPassReverse "/products/widget/" "http://product.example.com/widget/

2 番目の例では、リソースがローカルに見つからない場合にのみリクエストをプロキシします。これは、あるサーバーから別のサーバーに移行するときに、すべてのコンテンツがまだ移行されているかどうかわからない場合に非常に便利です。

書き換え条件 "%{REQUEST_FILENAME}" !-f 書き換え条件 "%{REQUEST_FILENAME}" !-d 書き換えルール "^/(.*)" "http://old.example.com/$1" [P] ProxyPassReverse "/" "http://old.example.com/

2 番目の例では、[P] フラグを使用して URL を条件付きで書き換え、リクエストをプロキシすることが必要なようです。

答え2

以前の「解決策」はまだ適切に機能していなかったため、混乱を避けるために削除しました。希望どおりには実行できないようですが、サブディレクトリの代わりにサブドメインを使用する小さな回避策で、まだうまくいきます。

RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]

ソース:http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html

関連情報