Apache 웹 서버에서 프록시를 설정하려고 하는데 경로의 결과 URL 부분이 누락되어 URL 빌드에 문제가 있습니다. 예:
http://server/webapp/style.css
(예상되는)
http://server/style.css
(실제 결과)
웹에 노출된 서버(프론트엔드 서버라고 함)와 외부에 프록시하려는 웹 애플리케이션이 있는 내부 네트워크(웹에서 액세스할 수 없음)에 다른 서버(백엔드 서버)가 있습니다. 몇 가지 방법을 시도했는데 주요 문제는 프록시에서 URL이 올바른 방식으로 (다시) 작성되지 않아 서버나 브라우저가 일부를 놓치는 것입니다.
내가 시도한 것:
ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver
브라우저에 있는 앱의 URL이 정확합니다 http://frontendserver/webapp
. 그만큼index.htmlhttp://frontendserver/style.css
표시되지만 URL이 대신에 있기 때문에 모든 첨부된 리소스(js, 소켓, CSS 등)가 누락되었습니다 http://frontendserver/webapp/style.css
.
이 유형의 프록시를 올바르게 설정하는 올바른 방법입니까?
Apache 재작성 모듈을 사용하여 다른 솔루션을 시도했지만 좋은 결과에 도달하지 못했습니다. 어쩌면 누군가가 문제를 해결하기 위한 좋은 제안을 가지고 있을 수도 있습니다.
감사해요
답변1
ProxyPass
URL 응답 방법을 변경하지만 index.html의 URL을 다시 작성하지는 않습니다. 해당 문제를 해결하기 위한 옵션은 다음과 같습니다.
css/style.css
절대 링크( ) 대신 상대 링크( ) 를 사용하도록 index.html을 다시 작성하면/css/style.css
여전히 다른 URL 기반에서 작동합니다.사용mod_proxy_html나가는 HTML, Javascript 및 CSS 콘텐츠의 링크를 다시 작성합니다. 다음과 같은 것 :
<Files *.html> ProxyHTMLEnable On ProxyHTMLLinks a href ... ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/ </Files>
첫 번째 솔루션은 콘텐츠를 이식 가능하고 더욱 안정적으로 만들기 때문에 쉽게 수행할 수 있는 경우 가장 좋습니다.
콘텐츠의 모든 URL이 정적인 경우 두 번째 해결 방법이 적합할 수 있습니다. 그러나 mod_proxy_html은 동적으로 계산된 URL에 대해 아무것도 모릅니다. 예를 들어 Javascript에서 URL을 계산하는 경우입니다. 따라서 동적 URL 기반을 사용하도록 코드를 수정하지 않는 한 실패할 것입니다.