リバースプロキシでのApache URLの書き換え
Karafがホストするアプリケーションの前にApacheをデプロイしています(ApacheとKarafは別々のサーバーにあります)。Apacheをリバースプロキシとして動作させ、URLの一部を非表示にしたいのです。 アプリケーションサーバーからアプリケーションのログインページを直接取得するためのURLはhttp://app-server:8181/jellyfishです。ページはKaraf内で実行されているJettyインスタンスによって提供されます。もちろん、この動作は通常、リバースプロキシサーバーを除くすべてのファイアウォールによってブロックされます。 ファイアウォールをオフにして、このURLにアクセスすると、Jettyはログインページをロードします。ブラウザのアドレスバーが正しく変更されhttp://app-server:8181/jellyfish/login?0、すべてが機能します。 私が望んでいるのは、http://web-server(ルートから)アプリの名前(jellyfish)を抑制して、アプリサーバー上のJettyにマップすることです。たとえば、ブラウザはhttp://web-server/login?0アドレスバーに表示されるように変更され、後続のすべてのURLとコンテンツは、Webサーバーのドメインで、jellyfish乱雑にならずに提供されます。 次の設定(スニペット)を使用して、Apacheを単純なリバースプロキシとして動作させることができます。 ProxyPass /jellyfish http://app-server:8181/jellyfish ProxyPassReverse / http://app-server:8181/ ...ただし、これにはブラウザのURLが含まれている必要がありjellyfish、ルートURL(http://web-server)に移動すると404 Not Foundが返されます。 私はこれを回避するためにフラグのmod_rewrite有無にかかわらず使用しようとして多くの時間を費やしましたが、[P]成功しませんでした。その後、ProxyPassMatchディレクティブを試してみましたが、それもまったく正しいとは思えません。 以下は/etc/apache2/sites-available/、Webサーバーにロードされる現在の構成です。ローカルにホストされている画像ディレクトリがあることに注意してください。また、mod_rewriteプロキシエクスプロイト保護を維持し、mod_security誤検知を引き起こすいくつかのルールを抑制しています。 <VirtualHost *:80> ServerAdmin admin@drummer-server ServerName drummer-server ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /images/ "/var/www/images/" RewriteEngine On RewriteCond %{REQUEST_URI} !^$ RewriteCond %{REQUEST_URI} !^/ RewriteRule .* - [R=400,L] ProxyPass /images ! ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1 …