5

我一直在尝试在一个 Digital Ocean 液滴上的不同域上设置多个 Node 应用程序。我完全按照 nginx、forever 和 crontab 文章在单个 VPS 上托管多个 Node.js 应用程序。

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

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

我按照要求更改了 Nginx 设置:

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

我为应用程序创建了 /etc/nginx/conf.d/example.com.conf 文件(它们是不同的域。我将 1 放在端口 3000 上,另一个放在 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;
}

}

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

我似乎无法同时运行超过 1 个应用程序。我可以弄清楚如何正确地将 Node 应用程序文件夹分配给端口并使其永远保持活动状态。

4

2 回答 2

6

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

选择要运行的端口取决于应用程序本身。这些应用程序是您编写的还是只是您安装的东西?通常,您可以将端口设置为环境变量。因此,您可以使用以下内容启动您的应用程序:

PORT=4000 forever start --sourceDir /path/to/your/node/app main.js

假设该应用程序执行如下操作。这是来自使用 express-generator 创建的模板,所以它是相当通用的:

#!/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);
});

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

于 2014-05-07T21:21:37.533 回答
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。现在您在具有三个不同访问链接的同一服务器上拥有三个节点应用程序。

于 2017-03-16T10:11:48.283 回答