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/
Помощь очень ценится
Если ваша версия 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>
Конечно, точная конфигурация будет зависеть от того, какой вывод вы в настоящее время получаете от своего игрового сервера.
Первая версия, которую вы сделали, с ProxyPass и ProxyPassReverse, является наиболее распространенным способом делать то, что вы хотите. Проблема в том, что все, что у вас запущено на localhost: 5732, создает HTML-код, который будет отправлен обратно - и он не знает, что он не называется localhost: 5732. Ваш proxypass не изменяет страницы, которые проходят, поэтому, если ваша игра содержит все неправильные ссылки, вы увидите именно это.
Итак, чтобы это сработало, вам нужно перенастроить свою игру, чтобы она знала, что свои ссылки и т. Д. Следует представлять как your.server / game вместо localhost.5732.