Anfängerfrage. Ich habe eine URL
http://myserver.com/game
und möchte eine interne Ressource anrufen
http://localhost:5732/
Ich habe es versucht:
AllowCONNECT 5732
ProxyPass /game/ http://localhost:5732/ nocanon
ProxyPassReverse /game/ http://localhost:5732/
aber das zurückgegebene HTML enthielt Links, denen /game/ nicht vorangestellt wurde, und JS und CSS funktionierten nicht. Also habe ich Folgendes versucht:
RewriteEngine On
RewriteRule ^/game(.*) http://localhost:5732$1
aber dadurch wird eine Weiterleitung (die natürlich nicht funktioniert) an den Browser gesendet.
Was mache ich falsch? Mein Ziel ist:
http://myserver/game --> http://localhost:5732/
Hilfe wird sehr geschätzt
Antwort1
Wenn Ihre Apache-Version aktuell genug ist (2.4+), können Sie versuchenmod_proxy_html
ProxyPass /game http://localhost:5732 nocanon
ProxyPassReverse /game http://localhost:5732
<Location /game/>
ProxyHTMLEnable On
ProxyHTMLURLMap / /game/
</Location>
Bei älteren Versionen von Apache können Sie versuchen mitmod_ersatz. Dies erfordert jedoch, dass Sie Ihre regulären Ausdrücke manuell schreiben. Dies könnte ein Ausgangspunkt sein:
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>
Die genaue Konfiguration hängt natürlich davon ab, welche Ausgabe Sie derzeit von Ihrem Spieleserver erhalten.
Antwort2
Die erste Version, die Sie mit ProxyPass und ProxyPassReverse erstellt haben, ist die gängigste Methode, um das zu erreichen, was Sie möchten. Das Problem ist, dass das, was Sie auf localhost:5732 laufen haben, das HTML erstellt, das zurückgesendet wird – und es weiß nicht, dass es nicht localhost:5732 heißt. Ihr Proxypass ändert die Seiten, die durchgeleitet werden, nicht. Wenn Ihr Spiel also alle falschen Links enthält, werden Sie diese sehen.
Damit dies funktioniert, müssen Sie Ihr Spiel-Ding neu konfigurieren, damit es seine Links usw. als your.server/game und nicht als localhost.5732 anzeigt.