gpt4 book ai didi

node.js - 使用代理时 Node Express : res. 重定向中断

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:15 24 4
gpt4 key购买 nike

我有一个在代理后面运行的 Node Express 应用程序,使用 Apache ProxyPass(在 httpd.conf 中配置):

ProxyPass /nodeapp http://localhost:9009

我的应用程序使用 Passport 来验证用户身份,因此当我访问基本路径时,我应该被重定向到登录页面:

-- 旧重定向:http://example.com:9009 --> http://example.com:9009/login

-- 新重定向:http://example.com/nodeapp --> http://example.com/nodeapp/login

不幸的是,重定向不起作用:

-- 损坏的重定向:http://example.com/nodeapp --> http://example.com/login

我尝试在express中启用代理配置,但这没有什么区别:

 app.enable('trust proxy');
**编辑:**正如 Ethan 在下面的评论中所建议的,我可以对所有路径进行硬编码以适应新环境,但是,当在本地计算机的根目录(“/”)上运行时,这会破坏路径。

我正在寻找一种更加集中的解决方案,如果可能的话,可以适应不同的运行时环境?

最佳答案

为了实现这两种方式,您需要计算每个请求的代理路径或本地路径。

我正在使用 Nginx 代理,它注入(inject)“x-forwarded-for”和“x-forwarded-proto”(原始请求的协议(protocol))。转储“req.headers”以查看您的代理可能传递哪些 header 。

在路由之前在 Express 配置中创建此内容:

app.use(function(req, res, next) {

if (req.headers.hasOwnProperty('x-forwarded-for')) {
// proxy in effect
req.redirUrl = req.headers['x-forwarded-proto']
+ "://"
+ req.headers.host // proxy
// plus any proxy subdirs if needed
+ "/"
+ proxy_subdir
;

} else {
// direct requeset
req.redirUrl = req.protocol
+ "://"
+ req.headers.host
;
}

next();
});

您现在有了一个可以在任何重定向开始时使用的 req.redirUrl,它将在代理或直接访问下工作:

res.redirect(req.redirUrl + "/redir_path");

关于node.js - 使用代理时 Node Express : res. 重定向中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com