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 및 컨텐츠는 웹 서버의 도메인과 함께 jellyfish
혼란 없이 제공 됩니다.
다음 구성 (스 니펫)을 사용하여 Apache가 간단한 리버스 프록시로 작동하도록 할 수 있습니다.
ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
...하지만 브라우저의 URL을 포함 jellyfish
해야하고 루트 URL ( http://web-server
)로 이동하면 404를 찾을 수 없습니다.
나는이 문제를 해결하기 위해 깃발을 사용하거나 사용 mod_rewrite
하지 않고 많은 시간을 [P]
보냈지 만 성공하지 못했습니다. 그런 다음 ProxyPassMatch
지시문 을 시도했지만 그 어느 것도 올바르게 얻을 수없는 것 같습니다.
/etc/apache2/sites-available/
웹 서버에 로드 된 현재 구성은 다음과 같습니다 . 로컬로 호스팅 된 이미지 디렉토리가 있습니다. 또한 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 에 액세스하려고 시도 하면 브라우저의 주소 표시 줄에 이중이 포함되어 있지 않습니다 /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
그래서 나는 어떻게 든 규칙을 두 번 통과하고 있다고 생각합니다. 또한 home
첫 번째 예제에서 URL 의 비트 가 어디에서 나오는지 약간 기쁘게 생각합니다 .
누군가 올바른 방향으로 나를 가리킬 수 있습니까?
고마워, J.
ProxyPassMatch
하는를 사용하여 동등한 것으로 대체mod_rewrite
했습니다jellyfish
. 이제 Karaf에 필요한 Wicket 구성 요소와 같은 기본 요소와 관련하여 팝업되는 404 수를 조사하고 있습니다. 다음은 코드 스 니펫입니다.# 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/