在子目录中使用NGINX的多节点应用程序

时间:2016-10-02 22:46:57

标签: node.js express nginx

我目前有一个连接到域的数字海洋水滴。在服务器上,我正在运行NGINX并尝试将多个节点应用程序反向代理。目前,我的根目录在位置/。

有一个节点快速应用程序

我正在尝试将另一个节点快速应用程序连接到另一个子目录。这是nginx配置文件:

server {
    listen 80;

    server_name servername.com;

    # my root app
    location / {
        proxy_pass http://127.0.0.1:6001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    # new app
    location ~^ /newapp {
        proxy_pass http://127.0.0.1:6002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

问题在于新应用程序正在尝试提供/ newapp中的文件,这正在破坏。我想我的app.js文件可能是在新应用程序中使用Express,将基目录设置为/ newapp / - 以便从那里提供静态文件和路由。关于如何做到这一点的任何想法?

在newapp中,我正在提供静态文件:

// Serve files out of ./public
app.use(express.static(__dirname + '/public'));

并将路径文件设为:

var index = require('./routes/index');
app.use('/', index);

使用索引路由文件:

var express = require('express');
var router = express.Router();

// Get index page
router.get('/', function(req, res, next) {
    res.render('index', {
        index : 'active'
    });
});

module.exports = router;

1 个答案:

答案 0 :(得分:1)

首先,如果您不需要,请不要使用正则表达式位置。使用简单的位置。关于你的问题 - 将/放在proxy_pass URI的末尾。 Nginx会将/ newapp / xxx重写为/ xxx,反之亦然(例如,对于http重定向)。但是(!)不会重写HTML正文中的链接。

location /newapp/ {
    proxy_pass http://127.0.0.1:6002/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}