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.conf
but 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!