具有Nginx反向代理的Ubuntu Server上的Nodejs / Socket.io-“失败:连接建立错误:net :: ERR_CONNECTION_TIMED_OUT”

时间:2019-07-02 01:40:48

标签: node.js ubuntu nginx socket.io reverse-proxy

我一直试图在我的家用Ubuntu服务器上部署我的聊天应用程序。当我使用内部IP或本地服务器主机名连接到本地计算机时,它将在本地运行。

我正在使用Nginx反向代理从http://localhost:3000切换到我的外部域,以便可以通过Internet外部访问它: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 个答案:

答案 0 :(得分:1)

更新: 所以我终于解决了(大部分)!

通常,我的意思是,当我在家中与服务器位于同一网络上时,仍然无法使用我的域来访问此域。要查看它,我必须使用服务器的内部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();

再次感谢Jairo Malanay的帮助!

答案 1 :(得分:0)

我能够使用我的配置使其工作。 您需要考虑重定向和代理

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";
    }
}