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 连接到 'ws://localhost:4444/subscriptions' 失败:WebSocket 在连接建立之前关闭