当前位置: 首页 > 面试题库 >

使用Nginx的流星WebSocket握手错误400

曹建华
2023-03-14
问题内容

我设法在我的基础架构(Webfactions)上部署了流星。该应用程序似乎运行良好,但是当我的应用程序启动时,我在浏览器控制台中收到以下错误:

WebSocket connection to 'ws://.../websocket' failed: Error during WebSocket handshake: Unexpected response code: 400


问题答案:

WebSocket速度很快,您不必(也不应该)禁用它们。

导致此错误的真正原因是Webfactions使用nginx,并且nginx配置不正确。通过设置和,以下是正确配置nginx代理WebSocket请求的方法:proxy_set_header Upgrade $http_upgrade;``proxy_set_header Connection $connection_upgrade;

# we're in the http context here
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

# the Meteor / Node.js app server
server {
  server_name yourdomain.com;

  access_log /etc/nginx/logs/yourapp.access;
  error_log /etc/nginx/logs/yourapp.error error;

  location / {
    proxy_pass http://localhost:3000;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;  # pass the host header - http://wiki.nginx.org/HttpProxyModule#proxy_pass

    proxy_http_version 1.1;  # recommended with keepalive connections - http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version

    # WebSocket proxying - from http://nginx.org/en/docs/http/websocket.html
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
  }

}

这是基于David Weldon的nginxconfig的改进的nginx配置。安德鲁·毛(Andrew
Mao)已经达到了非常相似的配置。

请记住,还要将HTTP_FORWARDED_COUNT环境变量设置为应用程序前面的代理数量(通常为1)。



 类似资料:
  • 我正在尝试使用SSL证书将java客户端与JMX服务器连接。 但是不幸的是,这个连接给出了一个SSL握手错误。当我尝试使用< code >-DJ avax . net . debug = all 标志对此进行调试时,我在java客户端上得到以下错误消息。 2016-07-15T13:29:50.02-0700[APP/0]退出RMI更新清洁-[10.200.0.27:44445,javax.rmi

  • 我正在使用Python的套接字来响应Websocket请求,并且我面临着头的问题。以前可能有过类似的问题,但没有人为我工作 文档位于https://developer.mozilla.org声明对于要建立的连接: 服务器获取握手请求中发送的Sec-WebSocket-Key的值,追加258EAFA5-E914-47DA-95CA-C5AB0DC85B11,获取新值的SHA-1,然后对其进行Bas6

  • 我有一个使用WinSock2的cpp服务器,我试图用我的javascript客户端连接到这个服务器,但它不起作用,chrome控制台说“WebSocket握手过程中出错:不正确的‘Sec-WebSocket-Access’标头值”。我把我的sha1和bas64函数与在线进行了比较Sha1和Base64,所以问题不在这里。 Chrome响应报头: Chrome请求头: 服务器代码: 客户代码:

  • 我正在go中运行https web服务器。我正在使用angular web应用程序(Chrome浏览器)对其进行测试,该应用程序可以对web服务器进行ajax调用。 如果我不断地点击网络服务器,一切似乎都正常。但每当我让它闲置一段时间并点击web服务器时,来自浏览器的ajax调用都不会得到响应。我几乎总是在服务器日志中看到此日志行。 我可以确认IP地址是我的IP地址。 我像这样启动我的https服

  • 笔记: 最初我试图从使用如下代码 代码1: 错误: 在谷歌搜索之后,我发现您已经使用了SSL验证,使用适配器会话可以解决这个问题。但我仍然有错误,请找到下面的代码和错误 代码2: 错误:

  • 我正在制作一个有游戏的网站。对于游戏,我需要发送数据。加载页面时一切正常,但我无法让握手生效。 socketReq变量存在是因为我不希望任何人直接从浏览器连接到localhost:25580。我的发送和接收功能在不同的线程中,它们将在握手后启动。 JS中新WebSocket(ws://localhost:25580)的结果是 到“ws://localhost:25580/”的WebSocket连接