Ich habe eine Apache/2.4.6-Installation, die für einige Anwendungen als Reverse-Proxy funktioniert. Jetzt muss ich einen weiteren konfigurieren. Das HTTP-Proxying funktioniert einwandfrei, aber in einigen Abschnitten der Webseite versucht der Client, eine WebSocket-Verbindung herzustellen.
Das Problem besteht darin, dass die URL teilweise geteilt wird:
HTTP-Anfrage:http://domain/context/[whatever]
WS-Anfrage:ws://domain/context/specific-text?param1¶m2
Verwendung If
(Überprüfung des Protokolls) nicht möglich, da ProxyPass nicht hinein kann <If>
.
Versuchte Einstellung:
<Location /context/specific-text>
ProxyPass ws://internal.domain/context/specific-text
Vor
<Location /context/>
ProxyPass http://internal.domain/context/
Funktioniert aber nicht, vermutlich wegen des (nicht vorhandenen) abschließenden Schrägstrichs.
Weitere Daten:
- Der Socket beschwert sich, dass ihm der Code „200“ nicht gefällt, Apache gibt keine WS-Verbindung zurück, aber bis zu einem gewissen Punkt wird das Proxying durchgeführt.
- Mit und ohne probiert
<Location>
- Ich habe auch überlegt,
specific-text
es umzuschreibenspecific-text/
, aber ich manipuliere nicht gern Dinge, die ich nicht beherrsche. Die Anwendung ist ein kostenpflichtiges Produkt, ich kann nicht fragen, ob es irgendetwas schaden würde. Nun, ich könnte, ich würde nur keine Antwort erwarten.
Antwort1
Was bei mir funktioniert, ist dieser ProxyPass-Konfigurationsausschnitt:
ProxyPass /specific wss://0.0.0.0:4000/specific
ProxyPassReverse /specific wss://0.0.0.0:4000/specific
ProxyPass / https://0.0.0.0:4000/
ProxyPassReverse / https://0.0.0.0:4000/
Bestellen von ProxyPass-Anweisungen
Die konfigurierten ProxyPass- und ProxyPassMatch-Regeln werden in der Reihenfolge der Konfiguration überprüft. Die erste Regel, die zutrifft, gewinnt.