我一直试图在一个Digital Ocean Droplet上的不同域上设置几个Node应用程序。我完全按照Host Multiple Node.js Applications On a Single VPS with nginx, forever, and crontab文章。
我的域名都正确指出并且A记录设置。
我似乎无法在默认快递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”在哪里发挥作用?有多少潜在服务器同时工作?
我似乎无法同时运行多个应用。我可以弄清楚如何正确地将Node应用程序文件夹分配给端口,并永远保持它永久存在。
答案 0 :(得分:6)
与I mentioned over on DigitalOcean一样,Nginx无法运行该应用。它是一个Web服务器,在这种情况下它充当代理。这些应用程序在非标准端口和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。
答案 1 :(得分: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。 现在,您在同一台服务器上有三个节点应用程序,具有三个不同的访问链接..