-1

I know this is a very common problem, but I can't seem to find the solution to it, and I'm new to Node JS and Nginx.

I'm trying to run my Node JS app on port 80 of my site at example.com using a nginx reverse proxy, where my app is running on port 5000. I've searched countless forums and followed many tutorials step by step but when I run the app and go to http://example.com, it just doesn't show the app, and shows the default page when there is no index.html file (I removed the index file just in case it was creating some kind of interference).

Just in case this matters, I am hosting 2 other domains on the same server.

Other Information:

  • Server OS: Ubuntu, running VestaCP with File Manager
  • Location of the Node App: /home/admin/web/example.com/node-application

It works fine on port 5000, and I don't get an error when I run the application listening on port 80.

Here's a link to the Github Repository where all the code for the app is, but I'll also add the server.js code here:

Server.js:

var express = require('express');
var http = require('http');
var path = require('path');
var socketIO = require('socket.io');

var app = express();
var server = http.Server(app);
var io = socketIO(server);

app.set('port', 5000);
app.use('/static', express.static(__dirname + '/static'));

// Routing
app.get('/', function(request, response) {
  response.sendFile(path.join(__dirname, '/static/index.html'));
});

// Starts the server.
server.listen(5000, function() {
  console.log('Starting server on port 5000');
});


var players = {};

io.on('connection', function(socket) {
    
    socket.on('new player', function() {
        
        players[socket.id] = {
            
            x: 300,
            y: 300
            
        };
        
        socket.emit("yoursocketid", socket.id);
        
    });
    
    socket.on('movement', function(data) {
        
        var player = players[socket.id] || {};
        
        if (data.left) {
            
            player.x -=5;
            
        }
        
        if (data.up) {
            player.y -= 5;
        }
        if (data.right) {
          player.x += 5;
        }
        if (data.down) {
          player.y += 5;
        }
        
    });
    
    socket.on('disconnect', function() {
            
            io.sockets.emit('player disconnected', "player " + socket.id + " disconnected");
            delete players[socket.id];
            
    });
    
    socket.on("chat message", function(data) {
        
        console.log("message from " + data.from + ": " + data.message);
        
        io.sockets.emit("new message", data.from + ": " + data.message);
        
    });
    
    socket.on("myusername", function(data) {
        
        players[socket.id].username = data;
        
    });
    
});



setInterval(function() {
  io.sockets.emit('state', players);
}, 1000 / 60);

Contents of /etc/nginx/sites-available/default: (that is symbolically linked to /etc/nginx/sites-enabled/default)

server {
    listen 80;
    listen [::]:80 default_server
    server_name alonesolutions.ca;

    location / {
        proxy_pass http://xx.xxx.xxx.xx:5000;
        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;
    }
}

Contents of nginx.conf:

user                    www-data;
worker_processes        auto;
worker_rlimit_nofile    65535;
error_log               /var/log/nginx/error.log;
pid                     /var/run/nginx.pid;

# Worker config
events {
        worker_connections  1024;
        use                 epoll;
        multi_accept        on;
}


http {
    # Main settings
    sendfile                        on;
    tcp_nopush                      on;
    tcp_nodelay                     on;
    client_header_timeout           60s;
    client_body_timeout             60s;
    client_header_buffer_size       2k;
    client_body_buffer_size         256k;
    client_max_body_size            256m;
    large_client_header_buffers     4 8k;
    send_timeout                    60s;
    keepalive_timeout               30s;
    reset_timedout_connection       on;
    server_tokens                   off;
    server_name_in_redirect         off;
    server_names_hash_max_size      512;
    server_names_hash_bucket_size   512;


    # Log format
    log_format  main    '$remote_addr - $remote_user [$time_local] $request '
                        '"$status" $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
    log_format  bytes   '$body_bytes_sent';
    #access_log          /var/log/nginx/access.log main;
    access_log off;


    # Mime settings
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Compression
    gzip                on;
    gzip_static         on;
    gzip_vary           on;
    gzip_comp_level     6;
    gzip_min_length     1024;
    gzip_buffers        16 8k;
    gzip_types          text/plain text/css text/javascript text/js text/xml ap$
    gzip_proxied        any;
    gzip_disable        "MSIE [1-6]\.";

    # Proxy settings
    proxy_redirect      off;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass_header   Set-Cookie;
    proxy_buffers       32 4k;
    proxy_connect_timeout   30s;
    proxy_send_timeout  90s;
    proxy_read_timeout  90s;


    # Cloudflare https://www.cloudflare.com/ips
    set_real_ip_from   103.21.244.0/22;
    set_real_ip_from   103.22.200.0/22;
    set_real_ip_from   103.31.4.0/22;
    set_real_ip_from   104.16.0.0/12;
    set_real_ip_from   108.162.192.0/18;
    set_real_ip_from   131.0.72.0/22;
    set_real_ip_from   141.101.64.0/18;
    set_real_ip_from   162.158.0.0/15;
    set_real_ip_from   172.64.0.0/13;
    set_real_ip_from   173.245.48.0/20;
    set_real_ip_from   188.114.96.0/20;
    set_real_ip_from   190.93.240.0/20;
    set_real_ip_from   197.234.240.0/22;
    set_real_ip_from   198.41.128.0/17;
    #set_real_ip_from   2400:cb00::/32;
    #set_real_ip_from   2606:4700::/32;
    #set_real_ip_from   2803:f800::/32;
    #set_real_ip_from   2405:b500::/32;
    #set_real_ip_from   2405:8100::/32;
    #set_real_ip_from   2c0f:f248::/32;
    #set_real_ip_from   2a06:98c0::/29;
    real_ip_header     CF-Connecting-IP;


    # SSL PCI Compliance
    ssl_session_cache   shared:SSL:10m;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers        "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256$


    # Error pages
    error_page          403          /error/403.html;
    error_page          404          /error/404.html;
    error_page          502 503 504  /error/50x.html;
    
    # Cache settings
    proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m$
    proxy_cache_key "$host$request_uri $cookie_user";
    proxy_temp_path  /var/cache/nginx/temp;
    proxy_ignore_headers Expires Cache-Control;
    proxy_cache_use_stale error timeout invalid_header http_502;
    proxy_cache_valid any 1d;


    # Cache bypass
    map $http_cookie $no_cache {
        default 0;
        ~SESS 1;
        ~wordpress_logged_in 1;
    }


    # File cache settings
    open_file_cache          max=10000 inactive=30s;
    open_file_cache_valid    60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors   off;

    #include sites-enabled configuration files
    include             /etc/nginx/sites-enabled/*;

    # Wildcard include
    include             /etc/nginx/conf.d/*.conf;
}

I have also tried moving the server block that is in /etc/nginx/sites-enabled/default to /etc/nginx/conf.d/thealonegames.com.confbut it still didn't work.

I also tried setcap, although I know it's not as secure, but it still didn't change anything.

Am I doing something wrong in the configuration, or is there something I forgot to do? Please let me know of anything that could be causing the problem, it would really help. Thank you!

1 Answers1

0

I'm not qualified to look at your config and tell you what's wrong, but would like to suggest an alternative. I use the "jc21/nginx-proxy-manager" docker container for managing multiple services through a proxy, and it just works. Unless you care about becoming an expert on nginx proxy config, the docker container is a fantastic solution if you just want to get it working with minimal fuss. It also manages LetsEncrypt certs for all the services you run through it. Cannot recommend it highly enough.

AgentSmith
  • 26
  • 3