gpt4 book ai didi

asp.net-core - Asp.net 核心 SSL 无法在 docker 容器中运行

转载 作者:行者123 更新时间:2023-12-02 01:02:15 24 4
gpt4 key购买 nike

我有 Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

var options = new RewriteOptions().AddRedirectToHttps(301, 44339);
app.UseRewriter(options);

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

app.UseStaticFiles();
var localizedOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(localizedOptions.Value);

app.UseIdentity();

app.UseMvc(routes =>
{
routes.MapRoute(
"LocalizedDefault",
"{lang:lang}/{controller=Home}/{action=Index}/{id?}"
);

routes.MapRoute(
"default",
"{*catchall}",
new { controller = "Home", action = "RedirectToDefaultLanguage", lang = "vi" });
});
}

public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel().UseUrls("https://*:443")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();

host.Run();
}

我使用了这个命令:

docker run -it --rm -p 1234:80 --name voiconshop_ps voiconshop

这里是ps:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                   NAMES
f752d350823b voiconshop "dotnet VoiConShop.d…" About a minute ago Up 59 seconds 0.0.0.0:1234->80/tcp voiconshop_ps

这是 dockerfile

FROM microsoft/aspnetcore:1.1
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "VoiConShop.dll"]

我运行 http://localhost:1234/然后直接到https://localhost:44339/ .但是,页面返回“无法访问此站点”。那我做错了什么?请帮我。非常感谢。如果需要更多信息,我将编辑此问题。

最佳答案

我发现您的实现存在多个问题。

  1. 我认为在 HTTPs 中运行网络应用程序/服务需要绑定(bind) SSL 证书。考虑使用以下代码片段替换代码中的 .UseKestrel()。实现 LoadCertificate 方法以返回您的 SSL 证书(X509Certificate2 对象)

     .UseKestrel((options => { options.Listen(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 443),
    listenOptions =>
    {
    var httpsConnectionAdapterOptions = new AspNetCore.Server.Kestrel.Https.HttpsConnectionAdapterOptions()
    {
    ClientCertificateMode = AspNetCore.Server.Kestrel.Https.ClientCertificateMode.NoCertificate,
    SslProtocols = System.Security.Authentication.SslProtocols.Tls,
    ServerCertificate = LoadCertificate()
    };
    listenOptions.UseHttps(httpsConnectionAdapterOptions);
    });
  2. 在 dockerfile 中添加 443 端口。它应该看起来像

    暴露 80 443

  3. 我们还应该在 docker-compose.override.yml 中将“ASPNETCORE_URLS”环境变量设置为“http://:80/;https://:443/”。

    环境:

    • ASPNETCORE_ENVIRONMENT=开发
    • ASPNETCORE_URLS=http://:80/;https://.443

    端口:

    • “80”
    • “443”

关于asp.net-core - Asp.net 核心 SSL 无法在 docker 容器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com