通过apache代理运行socket.io时出现问题

通过apache代理运行socket.io时出现问题,socket.io,Socket.io,最近,我从使用端口号改为使用apache代理,现在出现以下浏览器控制台错误: VM6:1 GET 400(错误请求) VM6:1 POST 400(错误请求) 我的apache日志文件中充满了以下消息: [Mon-Mar 02 18:25:03.199849 2020][proxy:error][pid 28494](111)连接被拒绝:AH00957:HTTP:尝试连接到127.0.0.1:20005(本地主机)失败 [Mon-Mar 02 18:25:03.199892 2020][prox

最近,我从使用端口号改为使用apache代理,现在出现以下浏览器控制台错误:

VM6:1 GET 400(错误请求)

VM6:1 POST 400(错误请求)

我的apache日志文件中充满了以下消息:

[Mon-Mar 02 18:25:03.199849 2020][proxy:error][pid 28494](111)连接被拒绝:AH00957:HTTP:尝试连接到127.0.0.1:20005(本地主机)失败

[Mon-Mar 02 18:25:03.199892 2020][proxy:error][pid 28494]AH00959:ap_proxy_connect_后端禁用(本地主机)的工作程序5s

[Mon-Mar 02 18:25:03.199898 2020][proxy_http:error][pid 28494][client 71.223.254.40:50269]AH01114:http:无法连接到后端:本地主机,请参阅:

--

我确实发现使用端口和代理之间有一个有趣的区别。使用端口号,当我输入以下内容时:

这些结果在浏览器窗口中返回:

96:0{“sid”:“XXXX”,“升级”:[“websocket”],“pingInterval”:25000,“pingTimeout”:5000}

但当我使用代理尝试同样的方法时:

我看到可疑的结果,与我使用端口号时非常不同:

{“代码”:1,“消息”:“会话ID未知”}

奇怪的是,除了所有的错误消息外,一切似乎都正常工作

我的httpd.conf配置如下:

 ## 2020-03-02 - tried acquire
 ## 2020-03-02 - tried disablereuse=on
<Location /proxyPort20005/>
        ProxyPass http://localhost:20005/ Keepalive=On retry=5 timeout=600
        ProxyPassReverse http://localhost:20005/
</Location>
##2020-03-02-尝试获取
##2020-03-02-尝试禁用重用=打开
ProxyPasshttp://localhost:20005/ Keepalive=On重试=5超时=600
ProxyPassReversehttp://localhost:20005/
有人对我下一步的尝试有什么建议吗


非常感谢大家。

经过许多时间和努力,我有两个解决方案:

##  thank you lopezdonaque @ https://github.com/socketio/socket.io/issues/1696

RewriteEngine On 
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteRule /proxyPort3030/(.*) ws://localhost:3030/$1 [P,L]

<Location /proxyPort3030/>
    ProxyPass               http://localhost:3030/
            ## it seems to work fine without proxyPassReverse ??
    ProxyPassReverse        http://localhost:3030/
</Location>

const socket = io.connect
            (
                    {       'path'  : window.location.pathname + 'socket.io'
                    ,       'transports'    : ['websockets', 'polling']
                    }
            );
##谢谢你lopezdonaque@https://github.com/socketio/socket.io/issues/1696
重新启动发动机
RewriteCond%{HTTP:Connection}升级[NC]
重写规则/proxyPort3030/(*)ws://localhost:3030/$1[P,L]
ProxyPasshttp://localhost:3030/
##如果没有proxyPassReverse,它似乎可以正常工作??
ProxyPassReversehttp://localhost:3030/
常量套接字=io.connect
(
{'path':window.location.pathname+'socket.io'
,'transports':['websockets','polling']
}
);
这同样有效,但是,我希望WebSocket和轮询都能工作,这个示例只有轮询:

<IfModule mod_proxy.c>
  <Proxy *>
    Order allow,deny
    allow from all
  </Proxy>
</IfModule>

ProxyPass          /proxyPort3030/                 http://localhost:3030/
ProxyPassReverse   /proxyPort3030/                 http://localhost:3030/
ProxyRequests off

const socket = io.connect
            (
                    {       'path'  : window.location.pathname + 'socket.io'
                    ,       'transports'    : ['polling']
                    }
            );

命令允许,拒绝
通融
ProxyPass/proxyPort3030/http://localhost:3030/
ProxyPassReverse/proxyPort3030/http://localhost:3030/
代理请求关闭
常量套接字=io.connect
(
{'path':window.location.pathname+'socket.io'
,'transports':['polling']
}
);