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
ProxyPassReverse / http://granny-server:8181/jellyfish
ProxyPreserveHost On
SecRuleRemoveById 981059 981060
<Directory "/var/www/images">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
に移動するとhttp://web-server
、リダイレクトされますhttp://web-server/jellyfish/home
が、これにより404 /jellyfish/jellyfish/home
が表示されます。アクセスしようとすると苦情が出ます-NBのブラウザーのアドレスバーにはdoubleが含まれていません/jellyfish
。
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/home. Reason:
Not Found
そして、に移動するとhttp://web-server/login
、にリダイレクトされますhttp://web-server/jellyfish/login?0
が、これにより404が表示され、アクセスしようとして苦情が出ます/jellyfish/jellyfish/login
。
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/login. Reason:
Not Found
だから、私は何らかの形でルールを2回通過していると推測しています。私はまたどこに困惑していますhome
、最初の例でURLの一部がから来たのいます。
誰かが私を正しい方向に向けることができますか?
ありがとう、J
ProxyPassMatch
する同等のusingに置き換えています。私は現在、Karafが必要とするWicketコンポーネントなどの基礎となる要素に関してポップアップする多くの404を調べています。ここでは、コードスニペットがあります:mod_rewrite
jellyfish
# proxy to the Jellyfish server (ignoring images) RewriteCond %{REQUEST_URI} !^/(images)(.*)$ RewriteRule ^(/.*)$ http://app-server:8181/jellyfish$1 [P] ProxyPassReverse / http://app-server:8181/jellyfish/