我有:
>
Apache 2.4在我服务器的80端口上,启用了mod_proxy和mod_proxy_wstunnel
节点.js socket.io
在同一服务器的端口 3001 上
访问<code>示例。com(带有端口80)重定向到2。这得益于具有以下Apache配置的此方法:
<VirtualHost *:80>
ServerName example.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
它适用于所有事情,除了websocket部分 :ws://...
不是由代理传输的。
当我访问 example.com
上的页面时,我有:
Impossible to connect ws://example.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
问题:如何让Apache也代理WebSocket?
从1.0Socket.IO(2014年5月)开始,所有连接都以HTTP轮询请求开始(更多信息在这里)。这意味着除了转发WebSocket流量之外,您还需要转发任何传输=轮询
HTTP请求。
下面的解决方案应该正确地重定向所有套接字流量,而不重定向任何其他流量。
>
启用以下 Apache2 模组:
sudo a2enmod proxy rewrite proxy_http proxy_wstunnel
在*中使用这些设置。conf文件(例如/etc/apache2/sites-available/mysite.com.conf
)。我为每一篇文章都做了评论:
<VirtualHost *:80>
ServerName www.mydomain.com
# Enable the rewrite engine
# Requires: sudo a2enmod proxy rewrite proxy_http proxy_wstunnel
# In the rules/conds, [NC] means case-insensitve, [P] means proxy
RewriteEngine On
# socket.io 1.0+ starts all connections with an HTTP polling request
RewriteCond %{QUERY_STRING} transport=polling [NC]
RewriteRule /(.*) http://localhost:3001/$1 [P]
# When socket.io wants to initiate a WebSocket connection, it sends an
# "upgrade: websocket" request that should be transferred to ws://
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:3001/$1 [P]
# OPTIONAL: Route all HTTP traffic at /node to port 3001
ProxyRequests Off
ProxyPass /node http://localhost:3001
ProxyPassReverse /node http://localhost:3001
</VirtualHost>
我已经包含了一个额外的部分,用于路由/节点
流量,我觉得很方便,请参阅此处了解更多信息。
除了按URL过滤,还可以按HTTP头过滤。此配置将适用于任何使用websockets的web应用程序,即使它们没有使用socket.io:
<VirtualHost *:80>
ServerName www.domain2.com
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:3001/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:3001/$1 [P,L]
ProxyPassReverse / http://localhost:3001/
</VirtualHost>
多亏了这个话题,我终于做到了。待办事项:
1)安装Apache 2.4(不适用于2.2),并执行:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
2)让nodejs
在端口3001上运行
3)在Apache配置中执行此操作
<VirtualHost *:80>
ServerName example.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>
注意:如果您在同一台服务器上有多个使用web套接字的服务,您可能希望这样做以将它们分开。
问题内容: 我有 : (v2.4)在我服务器的端口80上,启用了 mod_proxy 和 mod_proxy_wstunnel 在同一服务器的端口3001上。 由于使用此处描述的方法,访问(使用端口80)将重定向到2 .。我已经在Apache配置中对此进行了设置: 它适用于除websocket部分之外的所有内容:不会像代理服务器那样传输。 访问上的页面时,我有: 问: 如何也使Apache代理We
除了websocket部分之外,不会像代理那样传输。 当我访问上的页面时,我有: 问题:如何使Apache代理也成为WebSockets?
配置代理服务器能干嘛 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是否有一个变通配置,或者它只是不可能?我没有太多的运气