Asp.net core Azure web应用程序部署为docker容器循环
我们正在尝试将REST Web API从作为Windows.NET Core 3.1堆叠Web应用程序托管迁移到Azure上Linux上的容器化Web应用程序 到目前为止,我们已经成功地将映像推送到Azure容器注册表,在那里它将被自动拾取并成功部署到应用程序服务。不幸的是,该应用程序还不能正常工作。尝试从API(Asp.net core Azure web应用程序部署为docker容器循环,asp.net-core,azure-web-app-service,azure-container-registry,Asp.net Core,Azure Web App Service,Azure Container Registry,我们正在尝试将REST Web API从作为Windows.NET Core 3.1堆叠Web应用程序托管迁移到Azure上Linux上的容器化Web应用程序 到目前为止,我们已经成功地将映像推送到Azure容器注册表,在那里它将被自动拾取并成功部署到应用程序服务。不幸的是,该应用程序还不能正常工作。尝试从API(GET)的(匿名)端点获取一些配置数据时https://foo.azurewebsites.net/api/configuration),而不是像以前那样返回数据,我得到一个301(永
GET)的(匿名)端点获取一些配置数据时https://foo.azurewebsites.net/api/configuration
),而不是像以前那样返回数据,我得到一个301(永久移动)完全指向自身的状态代码:位置:https://foo.azurewebsites.net/api/configuration
这将导致重定向循环
到目前为止,我不知道为什么我会得到301,我很高兴得到任何提示
关注点:
- Docker:映像的基础是:
mcr.microsoft.com/dotnet/core/aspnet:3.1
- Azure:身份验证/授权已关闭
- Azure:没有安装任何组件
- 该应用程序正确地服务于招摇过市用户界面
- Docker映像在本地运行良好
启动中的以下代码结合在一起的:
services.AddControllersWithViews()
.AddMvcOptions(o =>
{
...
o.Filters.Add(new RequireHttpsAttribute { Permanent = true }); // REMOVE THIS LINE
...
});
一旦我删除了requireHttpAttribute
过滤器,应用程序就开始按预期工作。由于我已经将TLS/SSL设置配置为只允许HTTPS,因此我认为省略过滤器是安全的
更新2021-01-20
我刚刚发现有一种更好的方法可以做到这一点,它不需要删除requireHttpAttribute
过滤器。问题的核心是Kestrel不知道通信是通过安全通道进行的,因为反向代理通过http
将请求转发给Kestrel。因此,我们需要启用头的转发。对于.NET Core 2.x应用程序,这意味着要遵循中介绍的步骤。幸运的是,对于ASP.NET Core 3.x应用程序,有一种更简单的方法(遗憾的是,官方文档中还没有提到这一点,但这是发布的一部分):只需将ASPNETCORE\u FORWARDEDHEADERS\u ENABLED环境变量设置为true
。这可以在Azure门户中的配置应用程序设置下以常规方式完成:
在我们调试问题之前,您可能需要在启动时使用代码和示例api创建测试项目。建议先在iis上部署,然后再部署。我知道您的应用程序部署在linux下。我的建议是确保程序正常运行,以便您可以在本地部署iis。@JasonPan感谢您的支持。很抱歉,如果没有遇到此问题,但我们正在尝试从Windows/IIS迁移到Docker/Linux。我们的代码在以前的部署设置中已经运行良好。