当前位置: 首页 > 知识库问答 >
问题:

在apache代理上运行socket.io的问题

汝飞
2023-03-14

最近,我从使用端口号转移到使用apache代理,现在我得到了以下浏览器控制台错误:

[Mon Mar 02 18:25:03.1998982020][Proxy_HTTP:错误][pid 28494][client 71.223.254.40:50269]AH01114:HTTP:无法连接到后端:本地主机,引用:https://example.com/proxyport20005/

--

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

但是当我使用代理进行同样的尝试时:

https://example.com/proxyport20005/socket.io/?eio=3&transport=polling

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

 ## 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>

共有1个答案

竺勇
2023-03-14

经过大量的时间和努力,我有两个解决方案:

##  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']
                    }
            );

但是,我希望WebSockets和轮询都能工作,这个例子只有轮询:

<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']
                    }
            );
 类似资料:
  • 我有一个socket.iowebservice运行端口8080在我的正式服,它响应超文本传输协议请求,但我认为它有困难解决代理时,我的客户端是发送通过web套接字协议(ws://) 我的客户告诉我服务器以400(错误请求)错误响应,所以要么是我客户端出了问题,要么是我正式服出了问题。我指望这是我的正式服,但我自己或我的同事都不知道具体在哪里。 这些是我们为节点生产盒提供的nginx配置.js。 我

  • 我正在尝试连接到运行在apache代理后面的Jira REST API。我尝试使用PythonJira模块来完成这项任务,它工作得很好,因为我绕过apache代理授权直接连接到jira。然而,随着apacheproxy的启动,我不断地遇到“Err:401unauthorized”错误。 问题是我需要提供两次授权凭据,一次用于代理,一次用于Jira。 所有测试都在我的本地虚拟机上完成。 apache

  • 我正在使用ApacheTomcat7.0和eclipse创建一个jersey应用程序。我在eclipse中创建了一个动态web项目,并将资源文件定义为:- 网状物xml文件也创建如下- 以下jar文件已添加到web inf中的lib文件夹中,并且在部署war文件后,也将以目录结构出现在web应用程序中。 一旦启动tomcat并部署war文件,就会出现以下错误: org.apache.catalin

  • GitBlog在Aapche上运行需要开启Aapche Rewrite模块用以支持GitBlog的伪静态URL。并且要配置.htaccess文件可用,然后在.htaccess文件中配置Rewriter规则。 打开Aapache Rewrite模块 打开httpd.conf文件,解除rewrite_module模板前的的注释#: LoadModule rewrite_module modules/m

  • 我有一个运行在EC2机器上的Nifi实例,并且我正在尝试访问一个受限制的s3 bucket。因为不建议手动生成访问密钥,所以我希望为机器提供访问外部桶的正确IAM角色。 我给了EC2机器一个角色,这个角色似乎适用于除NIFI之外的所有应用程序。是否有一些特殊的配置我需要设置Nifi不使用手动访问键?

  • 我有一个Apache-Server在端口80上运行我的PHP应用程序。PHP应用程序通过端口3000与NodeJS-Server(socket.io)通信。