Nginx反向代理重定向到帐户/登录

时间:2018-02-12 10:55:57

标签: asp.net-mvc asp.net-core asp.net-core-mvc

重定向到标准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的解决方案,并尝试了所有提出的配置 - 都无济于事。

任何帮助非常感谢。

1 个答案:

答案 0 :(得分:1)

这个问题根本不是由于asp.net Core框架,而是Nginx反向代理设置的内容。

Nginx省略了302(重定向)“位置”标题中的端口号。

通过更改反向代理配置文件中的一行来解决此问题:

自:

proxy_set_header Host $host;

要:

proxy_set_header Host $host:$server_port;

所有现在都按预期工作。