使用 .NET Core 2.0 如果我按照官方文档强制执行 HTTPS,网站将无法加载并出现错误 ERR_TOO_MANY_REDIRECTS。
重现步骤:
- 创建新的 .NET Razor 应用程序: dotnet new razor -o aspnetcoreapp
- 从此处详述的文档中添加两个代码片段: https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.0
- 部署到在 Ubuntu 17.10 上运行的 Apache2(未在旧版本上测试),其中 conf 使用此代码将连接传递到 Kestrel 服务器:
ProxyPreserveHost 打开 代理通行证/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 似乎改变了方法,但尚未发布。
请您参考如下方法:
您已将直通设置为 http,而不是 https。此处的 Apache 作为反向代理运行,因此它只是将请求转发到您的直通服务器上,它始终会根据您在此处的配置通过 http 执行此操作。然后,由于 ASP.NET Core 应用被配置为需要 HTTPS,它会重定向,导致新请求到达 Apache,然后它再次通过 http 转发该请求。
总而言之,您需要传递到https,而不是http。或者,您可以从 ASP.NET Core 应用程序中删除仅限 HTTPS 的要求,而是在 Apache 中强制执行 HTTPS。
