簡體   English   中英

使用Apache和Socket.io的代理WebSocket連接

[英]Proxy WebSocket connection using Apache & Socket.io

我在通過Apache(2.4.6)代理WebSocket連接(Socket.io)時遇到問題。 我正在嘗試使用Socket.io問題https://github.com/Automattic/socket.io/issues/1696上描述的設置,但是我在開發人員工具中始終遇到錯誤,即在WebSocket握手期間連接失敗:

WebSocket connection to 'ws://example.domain.com/socket.io/?EIO=3&transport=websocket&sid=KPd7VBy4Yi7mj-wAAABN' failed: Error during WebSocket handshake: 'Connection' header value must contain 'Upgrade'

發生這種情況是因為Connection標頭已設置為Close而不是Upgrade

我確認已加載proxy_wstunnel_module模塊,當我查看跟蹤日志時,我可以看到它對某些請求做出了響應,但是仍然出現上述錯誤。 我絕對不是Apache專家,所以我認為我的httpd.conf文件中有錯誤(我嘗試使用Apache文檔確認所有行。

<VirtualHost *:80>

        ServerName example.domain.com
        ServerAlias example.domain.com

        Header set Access-Control-Allow-Origin "*"
        Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
        Header set Access-Control-Allow-Headers "content-type,x-requested-with"

        RewriteEngine on
        RewriteRule ^/$ /otherApp/home [PT]

        RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
        RewriteCond %{QUERY_STRING} transport=polling      [NC]
        RewriteRule /(.*)           http://localhost:3000/$1 [P,L]

        <Directory />
                Options All
                Order Deny,Allow
                Allow from all
        </Directory>

        ProxyRequests off

        <Proxy *>
                Order Deny,Allow
                Allow from all
        </Proxy>

        <Location />
                Order Deny,Allow
                Allow from all
        </Location>

        ProxyPass /socket.io            ws://localhost:3000/socket.io
        ProxyPassReverse /socket.io     ws://localhost:3000/socket.io

        ProxyPass /AnotherApp ajp://localhost:8009/location
        ProxyPass /AnotherApp2  ajp://somewhere.else:8009/location2

        DocumentRoot /opt/appThings
        <Directory /opt/appThings>
                Options +Indexes
                AllowOverride None
                Require all granted
        </Directory>
</VirtualHost>

有人在我上面的httpd.conf文件中看到任何明顯的問題會導致此問題嗎?

讓我知道是否需要其他相關信息。 我已經查看了日志,但是我不確定是否有必要/需要什么。

好吧,我不確定完全正確的答案,因為我的另一個同事是找到答案的人-我也不確定他是否也完全理解答案。

我認為我們發現的是我們擁有的mod_rewrite模塊版本存在錯誤。 我們必須使用建議的補丁來編譯該模塊的源代碼,從而使代理正常工作。

似乎還通過防火牆對請求進行了某種“標頭剝離”。 似乎正在剝奪Connection: Upgrade標頭,這顯然導致我們的連接失敗。

因此,盡管我沒有我想要的很多細節,但希望這可能會給其他人一些關於將來尋找什么的線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM