node.js - 在单个服务器上运行多个 Node 实例

标签 node.js server digital-ocean

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

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

同时,我在 GoDaddy 购买了多个域名:site1.com、site2.com 等。

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

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

我想过为每个网站使用不同的端口,但我认为不可能将域 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;
    }
}

关于node.js - 在单个服务器上运行多个 Node 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986500/

相关文章:

docker - 绑定(bind)到端口 80 的问题 : Could not bind to IPv4 or IPv6 with certbot

mysql - NodeJS + ExpressJS 管理与 mysql 数据库连接的正确方法

javascript - 从 XYZ 解码并编码为 UTF8

linux - 我可以运行在云中保持端口打开的微服务吗?

mysql - 在 Icecast Server 2 上设置用户名和密码

node.js - 如何将nodejs和express设置为 digital ocean 上的docker容器?

node.js - 即使我已经卸载了 Homebrew 的 Node 版本,npm 仍然将包安装到 '/usr/local/Cellar/node/...'

node.js - MongoDB连接不断增加

python - TCP 服务器在初始连接后未收到任何信息。 Python

java - 在java中用文本文件读写数据