Когда я использую 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
Но не удалось обновить до websocket!
Что означает сообщение об ошибке? «Ошибка во время рукопожатия WebSocket: неожиданный код ответа: 200»
Я гуглю сообщение об ошибке, и самое близкое, что я нашел, это https://github.com/websockets/ws/issues/979, add proxy_set_header Host $host;
, но это не решило мою проблему.