Pregunta N00b. tengo una URL
http://myserver.com/game
y me gustaría llamar a un recurso interno
http://localhost:5732/
Lo intenté:
AllowCONNECT 5732
ProxyPass /game/ http://localhost:5732/ nocanon
ProxyPassReverse /game/ http://localhost:5732/
pero el HTML que regresaba contenía enlaces a los que no se les anteponía /game/ y JS y CSS se rompieron. Entonces lo intenté:
RewriteEngine On
RewriteRule ^/game(.*) http://localhost:5732$1
pero eso envía una redirección (que por supuesto no funciona) al navegador.
¿Qué me equivoco? Mi meta es:
http://myserver/game --> http://localhost:5732/
Se agradece mucho la ayuda
Respuesta1
Si su versión de Apache es lo suficientemente reciente (2.4+), puede intentarmod_proxy_html
ProxyPass /game http://localhost:5732 nocanon
ProxyPassReverse /game http://localhost:5732
<Location /game/>
ProxyHTMLEnable On
ProxyHTMLURLMap / /game/
</Location>
Para versiones anteriores de Apache, puedes probar conmod_sustituto. Sin embargo, esto requiere que escriba manualmente sus expresiones regulares. Este podría ser un punto de partida:
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>
Por supuesto, la configuración exacta dependerá de la salida que obtengas actualmente de tu servidor de juego.
Respuesta2
La primera versión que hiciste, con ProxyPass y ProxyPassReverse, es la forma más común de hacer lo que quieres. El problema es que sea lo que sea que esté ejecutando en localhost:5732 es lo que crea el HTML que se enviará de vuelta, y no sabe que no se llama localhost:5732. Tu proxypass no cambia las páginas por las que pasas, por lo que si tu juego contiene todos los enlaces incorrectos, eso es lo que verás.
Entonces, para que esto funcione, necesitas reconfigurar tu juego para que sepa presentar sus enlaces, etc. como your.server/game en lugar de localhost.5732.