Apache2 가상 호스트 역방향 프록시 자산 링크 재작성

Apache2 가상 호스트 역방향 프록시 자산 링크 재작성

내 서버의 포트 8080에서 실행되는 웹 애플리케이션이 있습니다: myip:8080/app

내 httpd.conf에 다음 구성이 있습니다

<VirtualHost *:80>
 ServerName subdomain.mydomain.com
 ServerAlias mydomain.com
 ProxyPass /app http://localhost:8080/app/
 ProxyPassReverse /app http://localhost:8080/app/
</VirtualHost>

이는 제대로 작동하며 subdomain.mydomain.com/app에서 앱을 사용할 수 있게 됩니다.

이제 subdomain.mydomain.com(/app 없이)에서 사용할 수 있게 만드는 데 어려움을 겪고 있습니다. 나는 처음 시도했다

<VirtualHost *:80>
 ServerName subdomain.mydomain.com
 ServerAlias mydomain.com
 ProxyPass / http://localhost:8080/app/
 ProxyPassReverse / http://localhost:8080/app/
</VirtualHost>

그리고 또 추가됨

ProxyHTMLURLMap /app/ /

하지만 둘 다 작동하지 않는 것 같습니다. 기본 페이지가 로드되지만 모든 자바스크립트 및 CSS 링크는 여전히 자산 대신 기본 HTML 페이지를 반환하는 /app/...을 가리킵니다.

내가 무엇을 놓치고 있나요? 나는 올바른 길을 가고 있습니까, 아니면 이를 달성하기 위한 완전히 다른(더 나은) 방법이 있습니까?

이 애플리케이션은 Ubuntu 12.04의 Tomcat 7에 있는 Tapestry 웹 애플리케이션입니다.

성능에 대한 통찰력도 흥미로울 것입니다.

답변1

ProxyPassReverseHTTP 헤더(예: 301 리디렉션)에서만 작동합니다.

HTML 재작성을 활성화하려면 다음을 통해 활성화해야 합니다.

ProxyHTMLEnable On
ProxyHTMLURLMap /app/ /

그러나 최신 웹 애플리케이션은 역방향 프록시에 의해 수행된 HTTP 요청에서 무슨 일이 일어나고 있는지 쉽게 이해할 수 있으며 이 경우 일반적으로 프록시 수준에서 추가 조정이 필요하지 않습니다.

mod_proxy_html해당 요청을 처리하는 데 약간의 오버헤드가 추가된다는 점을 명심하세요 .

답변2

Giovanni의 대답은 나를 올바른 길로 인도했습니다. 추가해야 했어요

ProxyHTMLEnable On

또는 더 정확하게는 (내 mod_proxy_html 버전의 경우) 이에 상응하는 것입니다.

SetOutputFilter INFLATE;proxy-html;DEFLATE

그러나 나는 그것을 재작성과 함께 사용하기로 결정했습니다(다른 방식으로 작동하도록 Tapestry 이벤트 링크를 얻을 수 없었기 때문에):

<VirtualHost *:80>
 ServerName subdomain.mydomain.com
 ServerAlias mydomain.com
 ProxyRequests Off
 ProxyPreserveHost On
 SetOutputFilter INFLATE;proxy-html;DEFLATE     
 ProxyPass / http://localhost:8080/app/
 ProxyPassReverse / http://localhost:8080/app/
 ProxyHTMLURLMap /app/ /     
 ProxyPassReverseCookiePath /app /
 RewriteEngine on
 RewriteRule ^/app/(.+) /$1 [R,L]
</VirtualHost>

ProxyPassReverseCookiePath /app /또한 Tomcat 세션 쿠키가 작동하려면 쿠키 경로( )를 조정해야 했습니다 .

답변3

귀하 의 웹 애플리케이션 myip:8080/app에는 HTML 및 JS에 /app/....mod_proxy_html

먼저 myip:8080/blah. 브라우저의 개발자 툴바를 실행하고 네트워크 탭에서 계속 요청되는 파일을 확인 /app/...하고 두 URL(/blah 및 /app) 모두에서 작동할 때까지 수정하세요.

목표는 앱의 모든 링크가 상대적인 것입니다. 즉, 다음과 같이 지정됩니다.

<script type="text/javascript" src="file.js"></script>

이런 것 대신에

<script type="text/javascript" src="/app/file.js"></script>

또한 다음을 확인하세요.<base>기본 기본 URL을 재정의하는 방법에 대한 태그입니다.

관련 정보