运行 单个服务器上的多个 Node 实例

Run several Node instances on a single server

我买了一个 DigitalOcean droplet,我想用它来托管多个网站。
所有这些网站都在 Node.js 中设有服务器。我的droplet的结构是每个网站一个目录,每个目录下一个文件server.js

当我想把网站放到网上时,我 运行 node server.js 在正确的目录中。这将在端口 80 上创建 运行 的服务器实例。

同时,我有几个在 GoDaddy 购买的域名:site1.com、site2.com 等

我的问题是:我应该如何同时 运行 所有节点实例,同时域重定向到正确的服务器?

我不必创建一个文件来处理对服务器的所有传入请求的解决方案将是首选(除非这是非常通用的东西,我不必在每次添加新站点时都进行修改).

我考虑过为每个网站使用不同的端口,但我认为无法将域 site1.com:80 重定向到 ip_address:another_port。

到目前为止,更简单的方法是:

  • 为每个 nodejs 应用程序使用不同的端口
  • 设置防火墙规则以关闭 HTTP、HTTPS 等端口以外的端口
  • 安装 NGINX 并将其设置为反向代理

这种方式还可以让您直接使用 nginx 托管所有静态文件、处理 HTTPS、创建访问日志...以及网络服务器通常执行的所有操作!

server {
    listen       80;
    server_name  domain1.com;

    location / {
        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_set_header    X-Forwarded-Proto $scheme;
        proxy_pass          http://localhost:8001;
    }
}

server {
    listen       80;
    server_name  domain2.com;

    location / {
        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_set_header    X-Forwarded-Proto $scheme;
        proxy_pass          http://localhost:8002;
    }
}