Apache-Reverse-Proxy zum WebSocket im selben Kontext wie http

Apache-Reverse-Proxy zum WebSocket im selben Kontext wie http

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&param2

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-textes umzuschreiben specific-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/

DerDokumentation sagt:

Bestellen von ProxyPass-Anweisungen

Die konfigurierten ProxyPass- und ProxyPassMatch-Regeln werden in der Reihenfolge der Konfiguration überprüft. Die erste Regel, die zutrifft, gewinnt.

verwandte Informationen