Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Apache反向代理上运行Socket.io_Node.js_Apache_Socket.io - Fatal编程技术网

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

Node.js 在Apache反向代理上运行Socket.io,node.js,apache,socket.io,Node.js,Apache,Socket.io,我试图在Apache后面运行NodeJS,但到目前为止,我仍然遇到Socket.io问题 直接访问应用程序没有问题,但每当我通过我的域进行访问时,socket.io就会抛出以下错误: Firefox can’t establish a connection to the server at wss://example.com/socket.io/?EIO=3&transport=websocket&sid=X-hLU73t7ojk2zoRAAAB. 我的Apache配置如下:

我试图在Apache后面运行NodeJS,但到目前为止,我仍然遇到Socket.io问题

直接访问应用程序没有问题,但每当我通过我的域进行访问时,socket.io就会抛出以下错误:

Firefox can’t establish a connection to the server at wss://example.com/socket.io/?EIO=3&transport=websocket&sid=X-hLU73t7ojk2zoRAAAB.
我的Apache配置如下:

     <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>
这让我很烦


似乎有些连接正在通过,但有一个没有通过。

研究在Apache中设置连接升级。这就是我配置nginx所需要的。此外,这些http请求可以是为客户机文件提供服务的socketio

此外,请注意:

编辑:

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

         ProxyPass /socket.io/ ws://localhost:8080/socket.io
         ProxyPassReverse /socket.io/ ws://localhost:8080/socket.io
与此相反:

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

研究在Apache中设置连接升级。这就是我配置nginx所需要的。此外,这些http请求可以是为客户机文件提供服务的socketio

此外,请注意:

编辑:

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

         ProxyPass /socket.io/ ws://localhost:8080/socket.io
         ProxyPassReverse /socket.io/ ws://localhost:8080/socket.io
与此相反:

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

在Centos 7上使用Apache 2.4.6

您需要做两件事,首先,在客户端,通过以下方式启动套接字io:

var socket_io = io(wss://YOUR-IP/,{
        path: '/monitor-01',
        transports: ['websocket']
    });
然后,在apache端,必须执行以下配置:

<VirtualHost *:443>
    .
    .
    .
    ProxyPass /monitor-01 ws://localhost:4000/socket.io
    ProxyPassReverse /monitor-01 ws://localhost:4000/socket.io
</VirtualHost>

通过这些配置,您还可以在同一台服务器上为不同的应用程序提供多个套接字连接。

在Centos 7上使用Apache 2.4.6

您需要做两件事,首先,在客户端,通过以下方式启动套接字io:

var socket_io = io(wss://YOUR-IP/,{
        path: '/monitor-01',
        transports: ['websocket']
    });
然后,在apache端,必须执行以下配置:

<VirtualHost *:443>
    .
    .
    .
    ProxyPass /monitor-01 ws://localhost:4000/socket.io
    ProxyPassReverse /monitor-01 ws://localhost:4000/socket.io
</VirtualHost>
通过这些配置,您还可以在同一服务器上为不同的应用程序建立多个套接字连接