Тебе нужно написать проксирующий виртуальный хост для Nginx. Что-то типа такого.
server {
listen *:80;
# Для SSL, при необходимости раскоментировать и настроить под себя
#listen *:443 ssl http2;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_certificate /cert.crt;
#ssl_certificate_key /key.key;
#if ($scheme != "https") {
# rewrite ^ https://$http_host$request_uri? permanent;
#}
server_name site.ru; # доменное имя
root /var/www/site.ru/; # Путь к статическим файлам js, css, jpg, jpeg, gif и пр.
# правила для статики
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|pdf|txt|webp)$ {
access_log off;
expires 8d;
}
location ~* ^.+\.(css)$ { access_log off; expires 7d; add_header "Vary" "Accept-Encoding"; }
location / {
proxy_pass http://localhost:3000/;
# Если включен SSL раскомментировать
# add_header Strict-Transport-Security 'max-age=631138519; includeSubDomains; preload' always;
}
}
Далее когда разберёшься и всё заработает, в своём приложении сделай доступ к порту 3000 только из локалки, чтобы на сайт нельзя было попасть по порту, так как ты попадаешь сейчас. Делается это примерно так.
// Установка порта
server.listen(3000, '127.0.0.1', () => {
console.log('Server started on port 3000');
});
Указав тут ip(127.0.0.1), ты сообщаешь что вещаешь на ip 127.0.0.1(локально на сервере), а значит Nginx будет иметь доступ к нему, а из вне его никто не откроет)