如何在一个VPS上托管3个不同域的3个节点应用程序?

Kyl*_*ell 5 nginx node.js express digital-ocean

我一直试图在一个Digital Ocean Droplet上的不同域上设置几个Node应用程序.我在单个VPS上跟踪了Host Multiple Node.js应用程序,其中包括nginx,forever和crontab文章.

我有正确指向的域和A记录集.

除了默认快递3000之外,我似乎无法在任何其他端口上运行应用程序(永远).

我更改了Nginx设置,就像它问的那样:

我取消注释了server_names_hash_bucket_size 64; (就像它说的那样)

我为应用程序创建了/etc/nginx/conf.d/example.com.conf文件(它们是不同的域.我在端口3000上放置1,在4000上放置另一个).

例:

server {
listen 80;

server_name your-domain.com;

location / {
    proxy_pass http://localhost:{YOUR_PORT};
    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;
}
Run Code Online (Sandbox Code Playgroud)

}

我不明白Nginx运行应用程序和永远存在时的区别?"npm start"在哪里发挥作用?有多少潜在服务器同时工作?

我似乎无法一次运行超过1个应用程序.我可以弄清楚如何正确地将Node应用程序文件夹分配给端口,并永远保持它永远活着.

and*_*ing 6

就像我在DigitalOcean上提到的那样,Nginx没有运行应用程序.它是一个Web服务器,在这种情况下它充当代理.应用程序在非标准端口和Nginx上运行,而不是在中继到正确域上的端口80.

选择要运行的端口取决于应用程序本身.这些应用程序是您编写的,还是您安装的内容?通常,您可以将端口设置为环境变量.所以,你可以通过以下方式启动你的应用:

PORT=4000 forever start --sourceDir /path/to/your/node/app main.js
Run Code Online (Sandbox Code Playgroud)

这假设应用程序执行类似下面的操作.这是使用快速生成器创建的模板,因此它非常通用:

#!/usr/bin/env node
var debug = require('debug')('my-application');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});
Run Code Online (Sandbox Code Playgroud)

除非设置了环境变量,否则默认使用端口3000.


Adv*_*are 3

看看您需要做的是:假设您有 3 个节点实例在 3000、5000、7000 上运行。现在你必须将 3 个子域指向相同的 ip 假设你有一个域 example.com 那么 ex1、ex2、ex3 这三个将指向相同的 ip。现在在 /etc/nginx/sites-enabled/ 中创建 3 个单独的文件,例如 ex1.example.com、ex2.example.com、ex3.example.com 现在配置这些文件中的服务器块以指向相应的节点应用程序并重新启动nginx。现在,您在同一服务器上拥有三个节点应用程序,具有三个不同的访问链接。