我对像Meteor.JS这样的东西很陌生,并且想知道这个错误。我启动了测试项目(使用按钮点击计)它可以工作,但后来我进入控制台看看
WebSocket connection to 'ws://shibe.ninja/sockjs/243/5gtde_n9/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400
我不知道如何解决它。
谢谢
我对像Meteor.JS这样的东西很陌生,并且想知道这个错误。我启动了测试项目(使用按钮点击计)它可以工作,但后来我进入控制台看看
WebSocket connection to 'ws://shibe.ninja/sockjs/243/5gtde_n9/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400
我不知道如何解决它。
谢谢
我自己碰到了这个问题,但是 我已经正确设置了我的代理标头 它仍然无法正常工作。但显然 CloudFlare的 造成问题。这是一篇关于这个主题的精彩文章: https://meteorhacks.com/cloudflare-meets-meteor
据我所知,有三种解决方案:
选项1: 使用支持套接字的CloudFlare企业。
选项2: 禁用Meteor WebSockets,这将影响您的性能,因为它回退使用sock.js作为替换。要做到这一点,只需设置你的流星环境:
export DISABLE_WEBSOCKETS=1
选项3: 在Cloudflare中,创建一个 DDP websocket的子域(ddp.yourdomain.com),然后在新子域上禁用Cloudflare。之后设置你的流星环境如下:
export DDP_DEFAULT_CONNECTION_URL=http://ddp.example.com
在此之后我的nginx配置需要一些调整,因为这现在已成为跨源(CORS)设置。这是我新的nginx配置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
server_name mydomain.com ddp.mydomain.com;
## This allows the CORS setup to work
add_header Access-Control-Allow-Origin 'http://example.com';
## This hides the CORS setup from the Meteor server
## Without this the header is added twice, not sure why?
proxy_hide_header Access-Control-Allow-Origin;
## Idealy the two options above should be disabeled,
## Then use this one instead, but that caused issues in my setup.
# proxy_set_header Access-Control-Allow-Origin 'http://example.com';
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host; # pass the host header
proxy_set_header Upgrade $http_upgrade; # allow websockets
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr; # Preserve client IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
# Meteor browser cache settings (the root path should not be cached!)
if ($uri != '/') {
expires 30d;
}
}
}
最后,记得重新启动nginx。
也许有点晚,但万一你还是坚持这个。在部署应用程序并使用nginx作为代理时,我遇到了同样的问题。
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
在这里查看nginx文档: http://nginx.com/blog/websocket-nginx/