我有一个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
)上访问该应用程序。因此所有路线变为:
example.com/v2manager/
进入主页example.com/v2manager/login
用于登录POST路由,并且example.com/v2manager/admin
(用于管理区域)但是,重定向无法正常工作,如果登录失败,return res.redirect('..')
会将我重定向到具有不同页面的example.com
,而应重定向到example.com/v2manager
我显然可以更改应用程序路由,以在任何地方添加v2manager
,但是路由v2manager
可以根据我们的环境和版本而频繁更改。另外,该解决方案也不会妨碍本地环境,因此localhost:3000/login
将始终有效
答案 0 :(得分:0)
您需要设置代理重定向:
location /v2manager/ {
proxy_set_header Host $host;
proxy_redirect ~/(.*)$ /v2manager/$1;
proxy_pass http://127.0.0.1:3001/;
}