Nginx 反向代理重定向到帐户/登录
Posted
技术标签:
【中文标题】Nginx 反向代理重定向到帐户/登录【英文标题】:Nginx reverse proxy re-direct to Account/Login 【发布时间】:2018-07-22 12:32:25 【问题描述】:重定向到标准 MVC“登录”页面不起作用。
我使用 Visual Studio 2017 在 Windows 下开发 - 这是一个标准的模板化 Asp.Net Core 2.0 MVC 包。
在 Windows 下本地运行良好。
但是,当我发布到 Ubuntu 16.04-x64 机器时,重定向失败。
我有 nginx 提供反向代理如下:
server
listen 24147;
location /
proxy_pass http://localhost:5001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
在我的 Startup.cs 中:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
var forwardedHeadersOptions = new ForwardedHeadersOptions
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
// ForwardedHeaders = ForwardedHeaders.All (also tried)
;
forwardedHeadersOptions.KnownNetworks.Clear(); // Tried both with and
forwardedHeadersOptions.KnownProxies.Clear(); // without these lines
app.UseForwardedHeaders(forwardedHeadersOptions);
// .....
app.UseAuthentication();
// .....
程序.cs:
public static IWebHost BuildWebHost(string[] args)
return WebHost.CreateDefaultBuilder(args)
.UseStartup()
.UseUrls("@987654321@")
.Build();
网页中的所有超链接都是正确的,例如:"myserver.com:24147/Home/Online"
,但在尝试访问需要授权的页面时重定向会得到“404 Not Found”。
在 Ubuntu 下使用的重定向地址是"myserver.com/Account/Login?ReturnUrl=%2FHome%2FOnline"
(注意缺少的端口号)
在 Windows 下使用的地址是"localhost:5001/Account/Login?ReturnUrl=%2FHome%2FOnline"
(正确,带有端口号)
我已经搜索了 Google 和 *** 的解决方案,并尝试了所有提出的配置 - 均无济于事。
非常感谢任何帮助。
【问题讨论】:
你能分享一个类似的 Fiddler 跟踪吗? @Tratcher:感谢您鼓励我创建 Fiddler 跟踪。它指导我解决了下面概述的问题。 【参考方案1】:这个问题根本不是asp.net Core框架的问题,而是Nginx反向代理设置的内容。
Nginx 在其 302(重定向)“Location”标头中省略了端口号。
通过更改反向代理配置文件中的一行来解决此问题:
发件人:
proxy_set_header Host $host;
收件人:
proxy_set_header Host $host:$server_port;
现在一切都按预期工作了。
【讨论】:
以上是关于Nginx 反向代理重定向到帐户/登录的主要内容,如果未能解决你的问题,请参考以下文章
nginx实现内容重定向的两种方式:rewrite和反向代理