[英]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
路由上访问该应用程序。 因此所有路线变为:
example.com/v2manager/
主页 example.com/v2manager/login
用于登录POST路由,以及 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.