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

WebSockets和Apache代理:如何配置mod_proxy_wstunnel?

陆洛城
2023-03-14
<VirtualHost *:80>
    ServerName www.domain2.com
    ProxyPass / http://localhost:3001/
    ProxyPassReverse / http://localhost:3001/
    ProxyPass / ws://localhost:3001/
    ProxyPassReverse / ws://localhost:3001/
</VirtualHost>

除了websocket部分之外,ws://...不会像代理那样传输。

当我访问www.domain2.com上的页面时,我有:

Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.

问题:如何使Apache代理也成为WebSockets?

共有1个答案

耿弘阔
2023-03-14

我终于设法做到了,多亏了这个题目。

TODO:

1)安装Apache 2.4(不能与2.2一起使用),并执行以下操作:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

2)在端口3001上运行nodejs

3)在Apache配置中执行此操作

<VirtualHost *:80>
  ServerName www.domain2.com

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

  ProxyPass / http://localhost:3001/
  ProxyPassReverse / http://localhost:3001/
</VirtualHost>

注意:如果在使用websockets的同一服务器上有多个服务,您可能希望这样做来分离它们。

 类似资料:
  • 问题内容: 我有 : (v2.4)在我服务器的端口80上,启用了 mod_proxy 和 mod_proxy_wstunnel 在同一服务器的端口3001上。 由于使用此处描述的方法,访问(使用端口80)将重定向到2 .。我已经在Apache配置中对此进行了设置: 它适用于除websocket部分之外的所有内容:不会像代理服务器那样传输。 访问上的页面时,我有: 问: 如何也使Apache代理We

  • 我有: > Apache 2.4在我服务器的80端口上,启用了mod_proxy和mod_proxy_wstunnel 节点.js 在同一服务器的端口 3001 上 访问<code>示例。com(带有端口80)重定向到2。这得益于具有以下Apache配置的此方法: 它适用于所有事情,除了websocket部分 :不是由代理传输的。 当我访问 上的页面时,我有: 问题:如何让Apache也代理Web

  • 配置代理服务器能干嘛 NEI toolkit 提供了代理服务器的功能,帮助将接口代理到NEI官网或者特定的服务器上 将接口代理到NEI官网 开启该功能只需将server.config.js中的online设为true, 那么对Mock Server的所有请求都将会代理到NEI官网上,该模式也被称为在线模式。 启用在线模式可以减少执行nei update的操作,在频繁更改官网数据的情况下能够大幅加快

  • 我在设置apache反向代理服务器时遇到问题,希望您能提供帮助。 我安装了带有apache的ubuntu服务器,并启用了以下模块: 然后我用以下内容在代理上设置000-default.conf: 路由器上的端口80和443被转发到代理服务器。在服务(1-3)服务器上,使用来自Lets Encrypt的证书启用SSL。 谢谢你的帮助!

  • 我在将nginx配置为代理WebSockets时遇到了一些麻烦。我有一个Node.js应用程序,它使用Socket.io V0.9.16侦听端口9090上的连接,使用nginx V1.6.2侦听端口9000上的连接,并且(应该)配置为将请求代理到我的Node.js应用程序。nginx配置如下所示: 这可能是安全问题吗?浏览器是否以某种方式“知道”Socket.io在端口9090上运行,并拒绝通过9

  • 我不确定这是否可以实现。我正在使用以下版本以群集模式运行docker: 客户端:版本:17.03.0-CE API版本:1.26Go版本:GO1.7.5 Git提交:3A232C8构建:周二2月28日08:10:07 2017 OS/arch:linux/amd64 显然,客户端套接字连接无法解析到群集中托管的服务集群。docker swarm是否有一个变通配置,或者它只是不可能?我没有太多的运气