다른 컴퓨터에서 실행되는 Rails3 앱의 역방향 프록시를 처리하는 apache2 웹 서버가 있습니다.
webapp 내에서 생성된 URL이 mod_proxy_html에 대한 구성으로 다시 작성되지 않는다는 점을 제외하면 설정이 작동합니다.
그만큼"역방향 프록시 시나리오"이것이 바로 제가 하려는 일이기 때문에 제가 아는 한 튜토리얼을 완벽하게 따랐습니다.
제공된 답변을 적용했거나 시도했습니다여기stackoverflow에서는 아무런 효과가 없습니다.
"역방향 프록시 시나리오"에 따르면 여러 모듈을 로드하려고 합니다. 해당 지침은 모두 내 httpd.conf 파일에 있으며 다음의 출력을 검토할 때
apactectl -t -D DUMP_MODULES
예상되는 모든 모듈이 목록에 표시됩니다.
역방향 프록시를 수행하는 외부 웹 서버는 www.ourdomain.org에 있고 Rails 앱은 apphost.local에서 내부적으로 사용할 수 있습니다(서버는 Mac OS X Server 10.6이고 Rails 앱 서버는 Mac OS X 10.6입니다).
현재 작동하는 것은 다음과 같이 역방향 프록시를 통해 웹앱에 액세스하는 것입니다.
http://www.ourdomain.org/apphost/railsappname/controllername/action
그러나 자바스크립트 파일, CSS 파일 또는 기타 자산은 로드되지 않으며 웹 앱 내부 링크는 URL의 apphost 부분이 누락되어 나옵니다. 마치 재작성 규칙이 잘못 구성된 것처럼(물론 저는 그것에 집중했습니다.) apphost에서 html을 전달하고 Apache 서버를 통해 전달하는 과정에서 추가되거나 삭제될 항목을 얻을 수 없는 것 같습니다.
예를 들어 웹 앱에서 반환된 HTML의 작업 링크 위로 마우스를 가져가면 다음과 같은 결과가 표시됩니다.
http://www.ourdomain.org/railsappname/controllername/action
내 Apache 지시문은 다음과 같습니다.
LoadModule proxy_html_module /usr/libexec/apache2/mod_proxy_html.so
LoadModule xml2enc_module /usr/libexec/apache2/mod_xml2enc.so
ProxyHTMLLogVerbose On
LogLevel Debug
ProxyPass /apphost/ http://apphost.local/
<Location /apphost/>
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyPassReverse /
ProxyHTMLExtended On
ProxyHTMLURLMap railsappname/ apphost/railsappname/
RequestHeader unset Accept-Encoding
</Location>
httpd.conf를 변경할 때마다 제정신이 되도록 apachectl -t를 종교적으로 확인합니다.
저는 분명히 Apache 전문가는 아니지만 제 뒤를 따르는 모든 지시문이 제가 여기서 하고 있는 일을 무시하지 못하는 것 같습니다. 하지만 내가 시도한 어떤 것도 내 웹 앱에 대한 요청으로 Apache 서버에 접속한 후 내 브라우저에 표시되는 URL을 변경하지 못하는 것 같습니다.
내가 무엇을 잘못했는지 말할 수 없더라도 Apache가 작업 중인 작업과 내 웹 앱에서 나오는 html에 대해 수행하는 작업을 확인하는 데 도움이 되도록 하는 방법에 대한 아이디어를 환영합니다. 이것이 ProxyHTMLLogVerbose On 및 LogLevel Debug가 설정된다는 것을 이해했지만 로그 파일에는 아무 것도 표시되지 않습니다.
답변1
다소 단순한 답변일 수도 있지만 지금까지 본 대부분의 ProxyHTMLURLMap 지시어에는 일치/대체 패턴의 시작 부분에 /가 있습니다. 이 구성 변형을 시도해 보셨나요?
ProxyHTMLURLMap /railsappname/ /apphost/railsappname/
그래도 도움이 되지 않으면 어떤 버전의 Apache를 실행하고 있습니까? 해당되는 경우 모듈의 버전은 무엇입니까? Apache 2.4 이후에는 Apache와 함께 번들로 제공되므로 이전 버전의 Apache의 경우 이 모듈(일부 버전)을 직접 설치해야 합니다.
대안으로 mod_substitute로 전환할 수도 있지만, 그러기 위해서는 mod_proxy_html보다 더 많은 구성이 필요합니다.
어떤 시점에서는 사용자가 직접 추가해야 하는 일부 기본 구성이 제거되었습니다. 보다http://apache.webthing.com/svn/apache/filters/proxy_html/proxy_html.conf, ProxyHTMLLinks 및 ProxyHTMLEvents 지시어는 구성에 추가해야 하는 지시어입니다.