Nodejs / Socket.io на сервере Ubuntu с обратным прокси-сервером Nginx - «ошибка: ошибка при установлении соединения: net :: ERR_CONNECTION_TIMED_OUT» - PullRequest
0 голосов
/ 02 июля 2019

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

Я использую обратный прокси-сервер nginx для переключения с http://localhost:3000 на мой внешний домен, чтобы я мог получить к нему доступ через Интернет извне: http://tfmserver.dynu.net/

Nginx прокси:

server {
    listen 80;
    listen [::]:80;

    root /var/www/tfmserver.dynu.net/html;
    index index.html index.htm index.nginx-debian.html;

    server_name tfmserver.dynu.net;

    location / {
    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;
    proxy_cache_bypass $http_upgrade;
}

Кажется, я получаю ошибки, подобные следующим, но иногда они отличаются в зависимости от того, что я пытаюсь сделать, чтобы это исправить:

WebSocket connection to 'ws://tfmserver.dynu.net/socket.io/?EIO=3&transport=websocket&sid=wQY_D0JOZm4VWGXgAAAA' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

или

POST http://tfmserver.dynu.net/socket.io/?EIO=3&transport=polling&t=MklujE_&sid=fbdZir8lxOlMOZm6AAAA net::ERR_CONNECTION_TIMED_OUT

Согласно некоторым сообщениям, которые люди сделали об этой ошибке, они говорят, что Chrome пытается использовать его как SSL, но он не обслуживается таким образом, однако я добавил SSL на сервер и в проект, но он не устраняет вопрос. На данный момент я удалил его, но не возражал бы добавить его обратно, если это возможно, как только оно заработает.

Я перепробовал все, что мог, из всех возможных других вопросов, опубликованных здесь, но ни один не решил проблему.

Как я могу заставить это работать внешне? Что я делаю не так?

Вот соответствующие части проекта для сокетов. Если вам нужно что-то еще, что может помочь, пожалуйста, дайте мне знать - заранее спасибо!

Сервер:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(process.env.PORT || 3000, 'localhost');

клиент:

var socket = io.connect();

ОБНОВЛЕНИЕ: - Примечание: я только что подключился к нему со своего рабочего компьютера, и он работает ?! Но это не работает в моей собственной сети при попытке использовать внешний адрес? Что с этим?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

ОБНОВЛЕНИЕ: Итак, я наконец решил (в основном)!

В основном я имею в виду, что я все еще не могу использовать свой домен для доступа к нему, когда я нахожусь дома в той же сети, что и мой сервер. Для его просмотра я ДОЛЖЕН использовать внутренний IP-адрес сервера или сетевое имя сервера. Домен работает вне сети, например, с работы или в другом месте. (Я могу жить с этим!)

Проблема была с прокси Nginx, окончательный вариант, который решил эту проблему для меня, выглядит следующим образом:

server {
        listen 80;
        server_name tfmserver.dynu.net;
        client_max_body_size 800M;

        root /home/tfm/Projects/Chat;

        gzip on;
        gzip_comp_level 6;
        gzip_vary on;
        gzip_min_length  1000;
        gzip_proxied any;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        gzip_buffers 16 8k;

        location **/socket.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:9000**/socket.io/**;
                proxy_redirect off;

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

Чтобы исправить новую ошибку, неверный шлюз 502, мне нужно было добавить « / socket.io / » в местоположение и имя хоста. Другие дополнения были рекомендованы Jairo Malanay, и я добавил их, что устранило начальную проблему отказа в соединении, которая у меня была.

У меня была проблема с загрузкой CSS, и при добавлении /socket.io/ эта проблема также была решена.

Мой последний сервер:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(process.env.PORT || 9000, 'localhost');

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {

И мой последний клиент:

var socket = io.connect();

Еще раз спасибо за помощь Хайро Маланай!

0 голосов
/ 02 июля 2019

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

server {
    listen 80;
    server_name 11.111.111.111;
    client_max_body_size 800M;

    gzip on;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_buffers 16 8k;

   location / {
        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:9000/;
        proxy_redirect off;

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


  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:4001;
        proxy_redirect off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
...