mod_proxy는 http://myserver/game을 http://localhost:5732/로 매핑합니까?

mod_proxy는 http://myserver/game을 http://localhost:5732/로 매핑합니까?

N00b 질문입니다. URL이 있습니다

 http://myserver.com/game

내부 리소스에 전화하고 싶습니다.

 http://localhost:5732/

나는 시도했다:

AllowCONNECT 5732
ProxyPass /game/ http://localhost:5732/ nocanon
ProxyPassReverse /game/ http://localhost:5732/

하지만 돌아오는 HTML에는 /game/이 추가되지 않고 JS와 CSS가 중단된 링크가 포함되어 있습니다. 그래서 나는 다음을 시도했습니다.

 RewriteEngine On
 RewriteRule ^/game(.*) http://localhost:5732$1

하지만 이는 브라우저로 리디렉션(물론 작동하지 않음)을 보냅니다.

내가 뭘 잘못 했나요? 내 목표는 다음과 같습니다

 http://myserver/game --> http://localhost:5732/ 

도움을 주시면 대단히 감사하겠습니다.

답변1

Apache 버전이 충분히 최신(2.4+)인 경우 시도해 볼 수 있습니다.mod_proxy_html

ProxyPass /game http://localhost:5732 nocanon
ProxyPassReverse /game http://localhost:5732
<Location /game/>
    ProxyHTMLEnable On
    ProxyHTMLURLMap / /game/
</Location>

이전 버전의 Apache의 경우 다음을 시도해 볼 수 있습니다.mod_substitute. 그러나 이를 위해서는 정규식을 수동으로 작성해야 합니다. 이것이 출발점이 될 수 있습니다.

ProxyPass /game http://localhost:5732 nocanon
ProxyPassReverse /game http://localhost:5732
<Location /game/>
    SetOutputFilter SUBSTITUTE
    Substitute s|href='/|href='/game/|nq
    Substitute s|src='/|src='/game/|nq
</Location>

물론 정확한 구성은 현재 게임 서버에서 얻는 출력에 따라 달라집니다.

답변2

ProxyPass 및 ProxyPassReverse를 사용하여 수행한 첫 번째 버전은 원하는 작업을 수행하는 가장 일반적인 방법입니다. 문제는 localhost:5732에서 실행 중인 것이 무엇이든 다시 전송될 HTML을 생성하는 것이며, 이것이 localhost:5732로 호출되지 않는다는 사실을 모른다는 것입니다. 귀하의 프록시 패스는 통과되는 페이지를 변경하지 않으므로 게임에 잘못된 링크가 모두 포함되어 있으면 그것이 표시됩니다.

따라서 이 작업을 수행하려면 링크 등을 localhost.5732 대신 your.server/game으로 표시할 수 있도록 게임을 재구성해야 합니다.

관련 정보