首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Apache和Socket.io的代理Socket.io连接

使用Apache和Socket.io的代理Socket.io连接
EN

Stack Overflow用户
提问于 2015-04-13 19:48:53
回答 1查看 954关注 0票数 2

我在通过Apache (2.4.6)代理我的WebSocket连接(Socket.io)时遇到了问题。我正在尝试使用Socket.io described https://github.com/Automattic/socket.io/issues/1696上描述的设置,但在开发人员工具中一直有一个错误,即在WebSocket握手过程中连接失败:

代码语言:javascript
复制
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文档来确认所有的行)。

代码语言:javascript
复制
<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文件中看到什么明显的东西会导致这个问题吗?

如果需要其他相关信息,请告诉我。我已经查看了日志,但我不完全确定我需要寻找的是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-19 20:06:46

嗯,我不完全确定正确的答案,因为我的另一位同事是那个想出答案的人--我也不确定他完全理解这个答案。

我想我们发现的是我们所拥有的mod_rewrite模块的版本有一个bug。我们必须用建议的修补程序编译该模块的源代码,从而使代理正常工作。

它似乎也有某种“头剥离”的请求通过防火墙进行。似乎正在剥离Connection: Upgrade头,这显然导致了我们的连接失败。

因此,虽然我没有我想要的那么多细节,但希望这能为其他人提供一些线索,让他们知道未来该寻找什么。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29613822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档