Я пытаюсь обслуживать статические файлы с помощью nginx 1.6 и прокси-сокета, идущего с веб-сервера Node.js с socket.io.
Это важная часть nginx.conf:
location /socket.io/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
Он отлично работает непосредственно между браузером и Node.js, но socket.io занимает слишком много времени при проксировании с nginx 1.6. Протокол установления связи занимает слишком много времени, но если он не прерывается, он начинает работать через пару минут.
Доставка статических файлов nginx отлично работает.
В чем может быть проблема?
UPDATE:
Я немного проанализировал сетевой трафик и определил, что следующий запрос длится около минуты (он точно при запросе обновления):
Sec-WebSocket-Key: LhZ1frRdl+myuwyR/T03lQ==
Cookie: io=1-A7tpvwmoGbrSvTAAA5
Connection: keep-alive, Upgrade
Upgrade: websocket
....
Ожидаемый ответ код 101 и:
Connection: upgrade
Sec-WebSocket-Accept: HXx3KKJadQYjDa11lpK5y1nENMM=
Upgrade: websocket
...
вместо этого браузер получает 400 и:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:8888
Connection: keep-alive
Content-Type: application/json
Server: nginx/1.6.2
Transfer-Encoding: chunked
ОБНОВЛЕНИЕ 2:
Я решил, что одна и та же конфигурация отлично работает на моем офисном компьютере, а это значит, что это проблема моего домашнего компьютера. Во всяком случае, было бы очень приятно определить, что именно происходит неправильно.