我安裝了 Apache/2.4.6 作為某些應用程式的反向代理。現在我必須配置另一台。 HTTP 代理程式運作良好,但在網頁的某些部分,用戶端嘗試啟動 Websocket 連線。
問題是 url 部分共享:
HTTP 請求:http://domain/context/[whatever]
WS請求:ws://domain/context/specific-text?param1¶m2
無法使用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-text
,specific-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規則會依照配置的順序進行檢查。第一個匹配的規則獲勝。