WebSocket 连接到“wss://mydomain.com/one/of/app/graphql”失败 - NestJS GraphQL、docker、nginx

Posted

技术标签:

【中文标题】WebSocket 连接到“wss://mydomain.com/one/of/app/graphql”失败 - NestJS GraphQL、docker、nginx【英文标题】:WebSocket connection to "wss://mydomain.com/one/of/app/graphql" failed - NestJS GraphQL, docker, nginx 【发布时间】:2021-03-29 13:10:04 【问题描述】:

安全的 websocket 连接有问题。我有在 https 上运行的应用程序,突变和查询工作,但无法建立 wss 连接:/ 当我在不安全的连接 (http) 上运行 react 应用程序并使用 ws 时,一切正常。我不确定是什么导致了这个问题——可能是 nginx 代理,可能是 nestjs graphql 配置,或者可能是对 apollo 客户端的反应。很快:

拥有带有配置证书的 nginx 的服务器。我的域的服务器代理子目录到某个应用程序(在 docker 容器中运行并暴露在端口 3000 上):

server 
  listen 443 ssl;
  server_name mydomain.com
  [...cert configs...]

  location /one/of/app/ 
    proxy_pass http://localhost:3000/
  

正如我提到的,该网站使用安全连接,但 wss 连接失败。我没有在服务器或客户端做任何额外的事情——所有配置都一样,而不是 uri(https,wss 而不是 http,ws)。在不安全的连接上,使用 ws:// websocket 有效。有什么建议吗?

完全错误:

WebSocket connection to 'wss://mydomain.com/one/of/app/graphql' failed: Error during WebSocket handshake: Unexpected response code: 400

【问题讨论】:

【参考方案1】:

在这里找到解决方案:https://***.com/a/48096141/13514288

为 api (/one/of/app/) nginx 代理添加额外的标头:

location /one/of/app/ 
  proxy_set_header   X-Forwarded-For $remote_addr;
  proxy_set_header   Host $http_host;
  proxy_set_header   Upgrade $http_upgrade;
  proxy_set_header   Connection "upgrade";
  proxy_pass http://localhost:3000/

【讨论】:

以上是关于WebSocket 连接到“wss://mydomain.com/one/of/app/graphql”失败 - NestJS GraphQL、docker、nginx的主要内容,如果未能解决你的问题,请参考以下文章

内容安全策略拒绝连接到 Websocket 错误

actioncable 无法连接到 websocket

WebSocket 连接到自签名服务器

WCF 连接到 Websocket 服务器

在android java中连接到服务器websocket

WebSocket 连接到 'ws://localhost:4444/subscriptions' 失败:WebSocket 在连接建立之前关闭