내 서버의 포트 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
ProxyPassReverse
HTTP 헤더(예: 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을 재정의하는 방법에 대한 태그입니다.