【问题标题】:.NET Core - RequireHttpsAttribute causes ERR_TOO_MANY_REDIRECTS on Ubuntu with Apache2.NET Core - RequireHttpsAttribute 在带有 Apache2 的 Ubuntu 上导致 ERR_TOO_MANY_REDIRECTS
【发布时间】:2018-10-06 07:11:56
【问题描述】:
使用 .NET Core 2.0 如果我按照官方文档强制执行 HTTPS,则网站无法加载并出现错误 ERR_TOO_MANY_REDIRECTS。
重现步骤:
- 创建新的 .NET Razor 应用程序:
dotnet new razor -o aspnetcoreapp
- 从此处详述的文档中添加两个代码片段:
https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.0
- 部署到在 Ubuntu 17.10 上运行的 Apache2(未在旧版本上测试),其中 conf 使用以下代码传递与 Kestrel 服务器的连接:
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5001/
ProxyPassReverse / http://127.0.0.1:5001/
如果删除第 2 步中的代码,则网站可以通过 HTTP 或 HTTPS 正常工作(但显然不会重定向),但如果添加此代码,则网站无法通过 HTTP 或 HTTPS 加载 ERR_TOO_MANY_REDIRECTS。
.NET Core 2.1 似乎改变了方法,但尚未发布。
【问题讨论】:
标签:
c#
redirect
asp.net-core
https
【解决方案1】:
您已将传递设置为http,而不是https。此处的 Apache 作为反向代理运行,因此它只是将请求转发到您的直通服务器,它始终会根据您在此处的配置通过 http 执行此操作。然后,由于 ASP.NET Core 应用程序配置为需要 HTTPS,因此它会重定向,从而导致新请求到达 Apache,然后通过 http 转发 再次。
长短,需要直通https,而不是http。或者,您可以从 ASP.NET Core 应用程序中删除仅 HTTPS 的要求,而是在 Apache 中强制执行 HTTPS。
【讨论】:
-
这个答案对于解决this problem 非常有帮助,这已经让我发疯了将近两个星期。我仍然不明白为什么我的问题只在有限的场景(即蜂窝移动)中表现出来,但是在 IIS 上而不是在 ASP.NET Core 上的 HTTPS 解决方案就像一个魅力。顺便说一句,如果您对我的蜂窝移动场景中发生的事情有解释,欢迎您在上面的链接中发布答案。
【解决方案2】:
检查你的逻辑,应该有地方导致循环重定向。如果你使用反向代理,检查HttpContext是否正确获取Https状态