繁体   English   中英

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

[英]Handling redirects in Express to support nginx reverse proxy

我有一个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/;
        }

我希望可以在我的生产域(例如example.com/v2manager上的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 ,但是路由v2manager可以根据我们的环境和版本控制频繁更改。 另外,该解决方案不会妨碍本地环境,因此localhost:3000/login始终可以工作

您需要设置代理重定向:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM