Вопрос нуб. У меня есть 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. Ваш proxypass не изменяет страницы, через которые он проходит, поэтому, если ваша игра содержит все неправильные ссылки, вы увидите именно это.
Итак, чтобы это заработало, вам нужно перенастроить вашу игровую штуковину так, чтобы она знала, что ее ссылки и т. д. следует представлять как your.server/game вместо localhost.5732.