2013-11-29 6 views
3

я хочу связать nodejs к URL, например: http://myproject.com/nodejs/Nginx установить nodejs в порту 80

В настоящее время у меня есть узел в порту 8080.

И у меня есть Nginx конфигурации:

upstream app { 
    server 127.0.0.1:8080; 
}  
server { 
    listen 80; ## listen for ipv4; this line is default and implied 

    root /home/myproject/www; 
    index index.html index.htm; 

    server_name myproject.com; 

      location /nodejs/ { 
        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://app/; 
        proxy_redirect off; 
      } 
} 

Когда я открыть URL я получаю:

Welcome to socket.io. 

сопп Это нормально.

Но, когда я пытаюсь подключиться на моем сайте, я получаю это:

GET http://myproject.com/socket.io/1/?t=1385767934694 404 (Not Found) socket.io.js:1659 

это мой сайт линия сделать подключение:

var socket = io.connect('http://myproject.com/nodejs/'); 

Как я могу это сделать?

ответ

2

Он ответил ранее в другом потоке: https://stackoverflow.com/a/12904282/2324004

К сожалению, Socket.io вики не хватает некоторых данных но разгадка создать ресурс:

Client

var socket = io.connect('http://localhost:8081', {resource: 'test'}); 

Сервер

var io = require('socket.io').listen(8081, {resource: '/test'}); 

Выше работает (я проверил это на данный момент). Это один должен работать с указанной выше конфигурации:

location /test/ { 
    proxy_pass http://localhost:8081; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $connection_upgrade; 
} 
+0

Thx для этой помощи –

1

Я никогда не встречал такого переключателя конфигурации, который позволяет изменять socket.io часть из URL. Но AFAIK, ваша проблема будет решена, если вы используете эту конфигурацию:

location /socket.io/ { 
    proxy_pass http://localhost:8080; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $connection_upgrade; 
} 

http://michieldemey.be/blog/proxying-websockets-with-nginx-and-socket-io/

4

Я получаю сообщение об ошибке =/

WebSocket connection to 'ws://myproject/socket.io/1/websocket/IomP5jiBBNv8rgGYFFUS' failed: Error during WebSocket handshake: 'Connection' header value is not 'Upgrade' 

это мой Nginx стороне сервера конф:

map $http_upgrade $connection_upgrade { 
    default upgrade; 
    ''  close; 
} 

server { 
    listen 80; ## listen for ipv4; this line is default and implied 

    root /home/myproject/www; 
    index index.html index.htm; 

    server_name myproject.com; 

     location /socket.io/ { 
     proxy_pass http://localhost:8080; 
     proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $connection_upgrade; 
     } 
} 

если я не добавить :

map $http_upgrade $connection_upgrade { 
    default upgrade; 
    ''  close; 
} 

Я получаю эту ошибку:

Restarting nginx: nginx: [emerg] unknown "connection_upgrade" variable 
nginx: configuration file /etc/nginx/nginx.conf test failed 

Я вижу эту конф в этой ссылке: http://mattpatenaude.com/hosting-chatroom/

+0

привет, вы получили решение для неизвестной проблемы «connection_upgrade»? – suman

+0

У меня эта проблема сама. @suman Пол, вы решили это? –

+0

Поскольку это происходит в Google, когда я ищу эту проблему, я думаю, что я бы ответил на нее здесь: она определена в https://nginx.org/en/docs/http/websocket.html – innocenat

0

Я не могу комментировать, но пока вы уверены, что если вы не опечатка на имена хостов?

Вы отправили несколько фрагментов кода, все зависит от того, что вы настроили.

0

Это просто WebSocket не работает, если я удалить WebSocket из Io транспортов, все отлично работает, я использую эту линию на моем клиенте:

io.transports = [ 'xhr-polling', 'jsonp-polling', 'htmlfile' ]; 

Если я не редактировать этот список транспортов, это работа, но у меня ошибка websocket, и через 10 секунд клиент использует xhr-опрос, и это работает.

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