在Express中处理重定向以支持nginx反向代理

时间:2018-09-30 13:23:29

标签: node.js express nginx

我有一个Express应用程序,该应用程序在本地环境上的端口3001上运行良好。我需要将其部署在运行nginx并在端口80上侦听的生产服务器上。以下是一些Express路由

router.get('/', (req, res) => {
    //home page, show login page
});


router.post('/login', (req, res) => {
    if(errors){
        //invalid credentials
        return res.redirect('..');
    }

    //successful login, redirect to admin area
    return res.redirect('../admin');
})

以及经过身份验证的管理员用户的类似路由。使用反向代理在nginx上部署时,路由无法正常工作。 Nginx反向代理设置如下:

location /v2manager/ {
                proxy_set_header        Host    $host;
                proxy_pass  http://127.0.0.1:3001/;
        }

我希望可以在生产域中的路由v2manager(例如example.com/v2manager)上访问该应用程序。因此所有路线变为:

  1. example.com/v2manager/进入主页
  2. example.com/v2manager/login用于登录POST路由,并且
  3. example.com/v2manager/admin(用于管理区域)

但是,重定向无法正常工作,如果登录失败,return res.redirect('..')会将我重定向到具有不同页面的example.com,而应重定向到example.com/v2manager

我显然可以更改应用程序路由,以在任何地方添加v2manager,但是路由v2manager可以根据我们的环境和版本而频繁更改。另外,该解决方案也不会妨碍本地环境,因此localhost:3000/login将始终有效

1 个答案:

答案 0 :(得分:0)

您需要设置代理重定向:

location /v2manager/ {
  proxy_set_header Host $host;
  proxy_redirect ~/(.*)$ /v2manager/$1;
  proxy_pass http://127.0.0.1:3001/;
}