Назад | Перейти на главную страницу

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/ 

Помощь очень ценится

Если ваша версия 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.