Прокси-соединение Socket.IO на nginx не работает - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь прокси передать приложение node.js-socket.io с помощью nginx.

Клиент представляет собой HTML-файл с некоторым количеством JavaScript;

<html>
<head>
<script src="socket.io.js"></script>
<script>
    var socket = io('http://localhost:80');
    socket.on('welcome', function(data){
        console.log('Server says:' + data);
        socket.emit('client-response', 'thank you!');
    });
</script>
</head>
<body>
Socket.io
</body>
</html>

А серверный блок, который должен проходить через прокси в файле nginx.conf, таков:

server {
        listen       80;
        listen       [::]:80;
        #root         /usr/share/nginx/html;
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_pass "http://localhost:2156";
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

У меня установлено приложение node.js в порту "2156".

Когда я проверяю это, клиент пытается получить доступ к socket.io через порт 80 и завершается неудачно с ошибкой 404 (поскольку предполагалось, что nginx передаст прокси на порт 2156, но это не так).

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 06 мая 2018

Редактировать: я изменил клиент для подключения на "http://localhost/socket.io/" и переписал nginx.conf так:

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        root         /usr/share/nginx/html;

        location /socket.io/ {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $host;
            proxy_pass http://localhost:2156/socket.io/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

И это сработало.

...