2015-03-14 5 views
9

Я пытаюсь обслуживать статические файлы с помощью nginx 1.6 и для прокси-сокета, идущего с веб-сервера Node.js с socket.io.Socket.io с nginx

Это соответствующая часть 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 
... 

вместо этого, уш owser получает и:

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 

UPDATE 2:

Я определил, что та же самая конфигурация прекрасно работает на моем офисном компьютере, а это означает, что это мой домашний компьютер проблема. Во всяком случае, было бы очень приятно определить, что именно происходит неправильно.

+0

Есть ли разница в системе Конфи домашней и офисной системы? – tharif

ответ

1

Каждый пример, я видел (Nginx docs, Nginx blog) использует:

proxy_set_header Connection "upgrade"; 

Примечание все строчные буквы "обновить". В вашем примере есть капитал «U». Возможно, стоит попробовать.

+0

Определенно стоит попробовать. Я сделал это уже, не работает. – Aleks

0

Возможно, вы забыли о proxy_redirect off;

location/{ 
      proxy_pass http://localhost:3000/; 
      include proxy_params; 
      proxy_redirect off; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "Upgrade"; 
    } 
24

В работающем сервере, конфигурация Nginx в настоящее время используется здесь:

# Requests for socket.io are passed on to Node on port 3000 
    location ~* \.io { 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-NginX-Proxy true; 

     proxy_pass http://localhost:3000; 
     proxy_redirect off; 

     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
+0

Это единственное, что сработало для меня! Благодаря! – GobSmack

+0

Благодарите «сена Сьюза», отца Авраама, Будду и Матери-Земли! Beachfront.Digital благодарит вас. –

+0

это сработало для меня отлично .. спасибо :) – dip1232001

Смежные вопросы