相关疑难解决方法(0)

如何为Meteor/SockJS和WebSocket设置apache代理?

我有一个apache代理用于流星应用程序,apache和meteor在两台独立的机器上.我需要这样,因为apache必须服务于很多真实的网站,由于资源有限,在这台机器上安装meteor应用程序并不是一个好主意.

但是,如果我尝试通过代理从外部连接,则WebSocket握手失败,响应代码为400"只能升级到websocket".当我从局域网内直接连接到流星机器时,一切正常.当WebSocket失败时,SockJS/Meteor会重新回到XHR,但不幸的是,这会在应用程序中出现一些错误.所以我真的需要WebSocket才能在大多数情况下工作.

我用这里提到的补丁修补了我的apache安装:https://stackoverflow.com/a/16998664 看起来它运行良好但没有改变......

我的apache代理指令目前如下:

ProxyRequests Off
ProxyPreserveHost On
ModPagespeed Off
<proxy>
Order deny,allow
Allow from all
</proxy>
ProxyPass / http://10.0.2.6:3000/
ProxyPassReverse / http://10.0.2.6:3000/
Run Code Online (Sandbox Code Playgroud)

我甚至知道是什么引发了这个问题.apache代理与标题混杂在一起.离开我的机器的数据包的原始请求标题如下所示:

GET /sockjs/430/minw4r_o/websocket HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: myKey
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: My Agent
Run Code Online (Sandbox Code Playgroud)

数据包从apache代理转发,如下所示:

GET /sockjs/430/minw4r_o/websocket HTTP/1.1
Host: example.com
Origin: http://example.com
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: myKey
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: My Agent
X-Forwarded-For: 24.xxx.xxx.xxx
X-Forwarded-Host: …
Run Code Online (Sandbox Code Playgroud)

apache proxy websocket meteor sockjs

7
推荐指数
3
解决办法
8893
查看次数

标签 统计

apache ×1

meteor ×1

proxy ×1

sockjs ×1

websocket ×1