В Socket.io с совпадением пути расположения nginx произошла ошибка «во время рукопожатия WebSocket: неожиданный код ответа: 200» - PullRequest
0 голосов
/ 02 ноября 2019

Когда я использую location / { ... }, он работает хорошо, но если я использую location /admin { ... }, он перестает работать. Следующий код для иллюстрации проблемы.

Это хорошо работает:

location / {
    root   ...;
    index  index.html index.htm;
    try_files $uri $uri/ @websocket;
}

location @websocket {
    proxy_pass http://127.0.0.1:3000; # the websocket server
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
} 

Но мне нужно разместить свой SPA в подпуть, скажем, /admin, я изменил socket.ioкод клиента на

socket = io({ transports: ['websocket'], path: '/admin' })

Изменен код сервера socket.io на

var io = require('socket.io')(http,{path: '/admin'}) 
//Actually I tried with or without path parameter

Также изменено правило nginx, но оно не работает.

location /admin {
    alias   ...;
    index  index.html index.htm;
    try_files $uri $uri/ @websocket;
}

location @websocket {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Получите 200 OK 200 OK

Но не удалось обновить до websocket! enter image description here

Что означает сообщение об ошибке? «Ошибка во время рукопожатия WebSocket: неожиданный код ответа: 200»

Я гуглю сообщение об ошибке, и самое близкое, что я нашел, это https://github.com/websockets/ws/issues/979, add proxy_set_header Host $host;, но это не решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...