重定向到标准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();
// .....
}
的Program.cs:
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup()
.UseUrls("http://localhost:5001")
.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和StackOverflow的解决方案,并尝试了所有提出的配置 - 都无济于事。
任何帮助非常感谢。
答案 0 :(得分:1)
这个问题根本不是由于asp.net Core框架,而是Nginx反向代理设置的内容。
Nginx省略了302(重定向)“位置”标题中的端口号。
通过更改反向代理配置文件中的一行来解决此问题:
自:
proxy_set_header Host $host;
要:
proxy_set_header Host $host:$server_port;
所有现在都按预期工作。