WebSocket failed: Error during WebSocket handshake: Unexpected response code: 400

傷城~ 2022-10-10 15:58 124阅读 0赞

前后端分离架构,开发环境正常,部署到线上报错如下:

websocket报错:WebSocket failed: Error during WebSocket handshake: Unexpected response code: 400

很明显会联想到是nginx的配置不支持websocket的反向代理,故搜寻以及排障结果如下:

其中最重要的是这三行

  1. proxy_http_version 1.1;
  2. proxy_set_header Upgrade $http_upgrade;
  3. proxy_set_header Connection "upgrade";
  • 第一行是告诉nginx使用HTTP/1.1通信协议,这是websoket必须要使用的协议。
  • 第二行和第三行告诉nginx,当它想要使用WebSocket时,响应http升级请求。
  • 这里http和websocket反向代理共存,只是个协议的升级

补充

  1. server {
  2. listen 80;
  3. server_name school.godotdotdot.com;
  4. charset utf-8;
  5. proxy_http_version 1.1;
  6. proxy_set_header Upgrade $http_upgrade;
  7. proxy_set_header Connection "upgrade";
  8. location / {
  9. proxy_pass http://127.0.0.1:3000;
  10. proxy_set_header Host $host;
  11. proxy_set_header X-Real-IP $remote_addr;
  12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13. proxy_connect_timeout 60;
  14. proxy_read_timeout 600;
  15. proxy_send_timeout 600;
  16. }
  17. error_page 500 502 503 504 /50x.html;
  18. location = /50x.html {
  19. root html;
  20. }
  21. }

发表评论

表情:
评论列表 (有 0 条评论,124人围观)

还没有评论,来说两句吧...

相关阅读