Apache 反向代理到與 http 相同上下文中的 websocket

Apache 反向代理到與 http 相同上下文中的 websocket

我安裝了 Apache/2.4.6 作為某些應用程式的反向代理。現在我必須配置另一台。 HTTP 代理程式運作良好,但在網頁的某些部分,用戶端嘗試啟動 Websocket 連線。

問題是 url 部分共享:

HTTP 請求:http://domain/context/[whatever]

WS請求:ws://domain/context/specific-text?param1&param2

無法使用If(檢查協定),因為 ProxyPass 無法進入內部<If>

嘗試設定:

<Location /context/specific-text>
    ProxyPass ws://internal.domain/context/specific-text

<Location /context/>
    ProxyPass http://internal.domain/context/

但不起作用,猜測是因為(不存在的)尾部斜線。

更多數據:

  • 套接字抱怨不喜歡“200”代碼,Apache 沒有返回 ws 連接,但在某種程度上,正在進行代理。
  • 嘗試過有和沒有<Location>
  • 想過重寫specific-textspecific-text/但我不喜歡操縱我無法管理的事情。該應用程式是付費產品,不能詢問它是否會造成任何損害。好吧,我可以,我只是不期待任何答案。

答案1

對我有用的是這個 ProxyPass 設定片段:

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/

文件說

訂購 ProxyPass 指令

配置的ProxyPass和ProxyPassMatch規則會依照配置的順序進行檢查。第一個匹配的規則獲勝。

相關內容