首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET Core3DockerProject在失败前生成太多307次重定向

.NET Core3DockerProject在失败前生成太多307次重定向
EN

Stack Overflow用户
提问于 2019-11-29 20:47:52
回答 1查看 686关注 0票数 1

当启动部署到灵活的应用程序时,它会失败,太多307次重定向。它在VS中在本地成功运行。

开发和计算堆栈包括:

  • MacOS
  • .NET Core 3
  • Visual 2019用于Mac
  • Docker
  • Google应用程序引擎

我使用VS模板创建了一个项目(天气预报)。

  • Create API项目
  • 添加码头支持(通过菜单)
  • 创建和导出SSL证书:

代码语言:javascript
复制
dotnet dev-certs https -v -ep /Users/QQQQQQQ/Projects/CostZzzzzzzzzz/xxxxx.Orchestration.Cost/Certificate/dev-certificate.pfx -p ufo

(我随后将其移至项目的根)

  • 修改Dockerfile如下:

代码语言:javascript
复制
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    EXPOSE 8080

    FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
    WORKDIR /src
    COPY Xxxxx.Orchestration.Cost/Xxxxx.Orchestration.Cost.csproj Xxxxx.Orchestration.Cost/
    RUN dotnet restore "Xxxxx.Orchestration.Cost/Xxxxx.Orchestration.Cost.csproj"
    COPY . .
    WORKDIR "/src/Xxxxx.Orchestration.Cost"
    RUN dotnet build "Xxxxx.Orchestration.Cost.csproj" -c Release -o /app/build

    FROM build AS publish
    RUN dotnet publish "Xxxxx.Orchestration.Cost.csproj" -c Release -o /app/publish

    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENV ASPNETCORE_ENVIRONMENT=Development
    ENV ASPNETCORE_URLS=http://*:8080;https://*:443
    ENV ASPNETCORE_HTTPS_PORT=443
    ENV ASPNETCORE_Kestrel__Certificates__Default__Path=Xxxxx.Orchestration.Cost/dev-certificate.pfx
    ENV ASPNETCORE_Kestrel__Certificates__Default__Password=ufo
    ENTRYPOINT ["dotnet", "Xxxxx.Orchestration.Cost.dll"]

  • 创建app.yaml

代码语言:javascript
复制
    runtime: custom
    env: flex

    # This sample incurs costs to run on the App Engine flexible environment.
    # The settings below are to reduce costs during testing and are not appropriate
    # for production use. For more information, see:
    # https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
    manual_scaling:
      instances: 1
    resources:
      cpu: 1
      memory_gb: 0.5
      disk_size_gb: 10

    network:
        name: default
        subnetwork_name: default-us-east1

    service: get-cost

    env_variables:
      # The __ in My__Greeting will be translated to a : by ASP.NET.
      My__Greeting: Hello AppEngine Flex!

  • 修改Program.cs以支持kestrel和ssl

代码语言:javascript
复制
     public class Program
    {
        public static void Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();
            CreateWebHostBuilder(args).Build().Run();

        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseKestrel(options =>
             {
                 //     //options.Listen(IPAddress.Loopback, 5000);  // http:localhost:5000
                 options.Listen(IPAddress.Any, 8080);         // http:*:80
                 options.Listen(IPAddress.Any, 443, listenOptions =>
                    {
                        listenOptions.UseHttps("dev-certificate.pfx", "ufo");
                    });

             })
            .UseStartup<Startup>();
    }

  • 部署服务到GAE: gcloud应用程序部署

此解决方案是描述如何通过Docker创建.NET核心应用程序并将其部署到GAE的几篇文章的合并。

错误日志的主要消息是: XXX.YYY.ZZZ.AAA - "GET /“307未定义的"Mozilla/5.0 (Macintosh;Intel 10_14_6) AppleWebKit/537.36 (KHTML,类似壁虎) Chrome/78.0.3904.108 Safari/537.36”

我正在寻找有关如何正确配置应用程序以便它将在GAE中正确运行的帮助。

PS:通过删除Dockerfile中的ENV指令,码头容器将在我的mac上本地运行。然而,我无法在GAE上运行它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 03:34:14

事实证明,一旦我理解了真正的问题是什么,这个解决方案就非常简单,部分原因在于对较新的.net核心版本(如3.x、GAE和Docker都是新的)来说,这些问题都是非常新的。

无论如何,删除app.UseHttpsRedirection();在Startup.cs类的配置方法中解决了眼前的问题。本文解释了这个问题:https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-3.1&tabs=visual-studio

实际上,GAE Flex已经在端口8080上提供重定向,因此代码中的附加重定向指令会导致HTTP 307结果的无穷无尽的重定向。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59110808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档