首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apache反向代理上运行Socket.io

在Apache反向代理上运行Socket.io
EN

Stack Overflow用户
提问于 2018-02-25 06:30:42
回答 2查看 11K关注 0票数 2

我试图在Apache后面运行NodeJS,到目前为止,我一直在处理Socket.io问题。

直接访问应用程序没有问题,但是每当我通过域访问时,都会从socket.io抛出这个错误:

代码语言:javascript
复制
Firefox can’t establish a connection to the server at wss://example.com/socket.io/?EIO=3&transport=websocket&sid=X-hLU73t7ojk2zoRAAAB.

我的Apache配置如下:

代码语言:javascript
复制
     <VirtualHost _default_:443>
            ServerName example.com

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            SSLEngine on

            SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
            SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key


            ProxyRequests off
            ProxyVia on

            RewriteEngine On
            RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
            RewriteCond %{QUERY_STRING} transport=websocket    [NC]
            RewriteRule /(.*)           ws://localhost:8080/$1 [P,L]

            ProxyPass        /socket.io http://localhost:8080/socket.io
            ProxyPassReverse /socket.io http://localhost:8080/socket.io

            <Location />
                ProxyPass http://127.0.0.1:8080/
                ProxyPassReverse http://127.0.0.1:8080/
            </Location>
            #ProxyPass / http://localhost:8080/
            #ProxyPassReverse / http://localhost:8080/

            # BrowserMatch "MSIE [2-6]" \
            #               nokeepalive ssl-unclean-shutdown \
            #               downgrade-1.0 force-response-1.0

            BrowserMatch "MSIE [2-6]" \
                           nokeepalive ssl-unclean-shutdown \
                           downgrade-1.0 force-response-1.0

    </VirtualHost>

我还尝试将RewriteRule /(.*)更改为wss://localhost:8080/$1 [P,L],但仍然引发了相同的错误。似乎找不到其他答案来解决这个问题。

我相信我正在使用socket.io 2.0,并且在客户端它是以这样的方式连接起来的:

代码语言:javascript
复制
var socket = io();

这就是困扰我的地方,

似乎有些连接正在通过,但其中一条不存在。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-25 06:53:19

查看如何在Apache中设置连接升级。这就是我需要配置nginx的地方。另外,这些http请求可以是为客户端文件提供服务的socketio。

还请查看以下内容:wstunnel.html

编辑:

如mod_proxy_wstunnel所述,通过传递ws/wss代理解决了这个问题。apache虚拟主机配置应该具有以下内容:

代码语言:javascript
复制
         ProxyPass /socket.io/ ws://localhost:8080/socket.io
         ProxyPassReverse /socket.io/ ws://localhost:8080/socket.io

而不是这样:

代码语言:javascript
复制
        ProxyPass /socket.io http://localhost:8080/socket.io
        ProxyPassReverse /socket.io http://localhost:8080/socket.io
票数 6
EN

Stack Overflow用户

发布于 2020-03-20 17:46:42

在Centos 7上使用Apache 2.4.6

您需要做两件事,首先,在客户端以下列方式启动socket-io:

代码语言:javascript
复制
var socket_io = io(wss://YOUR-IP/,{
        path: '/monitor-01',
        transports: ['websocket']
    });

然后,在apache方面,您必须执行以下配置:

代码语言:javascript
复制
<VirtualHost *:443>
    .
    .
    .
    ProxyPass /monitor-01 ws://localhost:4000/socket.io
    ProxyPassReverse /monitor-01 ws://localhost:4000/socket.io
</VirtualHost>

使用这些配置,您还可以在同一台服务器上和不同的应用程序上拥有多个套接字连接。

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

https://stackoverflow.com/questions/48970876

复制
相关文章

相似问题

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