gpt4 book ai didi

c# - Kestrel::通过 appsettings.json 绑定(bind)到多个 HTTP 和 HTTPS url

转载 作者:行者123 更新时间:2023-12-05 05:56:18 26 4
gpt4 key购买 nike

我在 .Net 5 中构建了一个 ASP.NET Core 服务,它使用 Kestrel 作为边缘服务器。该服务需要在 HTTP 协议(protocol)上监听多个域 - 例如http://foo:12912 & http://bar:12912 和 HTTPS 协议(protocol)如 http://foo:443 & http://bar:443.

我知道我们可以在 Program.cs 中使用 UseUrls

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://foo:12912", "http://bar:12912");
});
}

但是 - 考虑到 Kestel 已经发展了很多 - 应该有一种方法可以从 json 配置本身进行配置。我能找到的所有配置示例都只针对单个 url,例如

"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://foo:12912"
},
"Https": {
"Url": "https://foo:443"
}
}
}

属性名称也是 url 而不是 urls 所以我的假设是它只支持单个 url 而不是多个。我的期望是否正确,还是我遗漏了什么?

最佳答案

在开发中,您可以像这样使用 launchSettings.json:

"WebApplication1": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}

请注意,applicationUrl 采用分号分隔的列表。

在生产中,kestrel 通常会以反向代理为前端。

就像将 NGINX 配置为反向代理来处理 SSL,kestrel 不需要公开 ssl 端口,因为所有安全性应该由实际的网络服务器处理, 红隼。

Kestrel 并非旨在暴露 到互联网。但它实际上是 Web 应用程序的简约包装器。

话虽这么说……然而,有办法做你想做的事。

方式一使用多个端点:请注意,您可以添加许多具有不同 json 键的端点。

 {
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:5000"
},
"HttpsInlineCertFile": {
"Url": "https://localhost:5001",
"Certificate": {
"Path": "<path to .pfx file>",
"Password": "<certificate password>"
}
},
"HttpsInlineCertAndKeyFile": {
"Url": "https://localhost:5002",
"Certificate": {
"Path": "<path to .pem/.crt file>",
"KeyPath": "<path to .key file>",
"Password": "<certificate password>"
}
},
"HttpsInlineCertStore": {
"Url": "https://localhost:5003",
"Certificate": {
"Subject": "<subject; required>",
"Store": "<certificate store; required>",
"Location": "<location; defaults to CurrentUser>",
"AllowInvalid": "<true or false; defaults to false>"
}
},
"HttpsDefaultCert": {
"Url": "https://localhost:5004"
}
},
"Certificates": {
"Default": {
"Path": "<path to .pfx file>",
"Password": "<certificate password>"
}
}
}
}

方法 2 使用 ASPNETCORE_URLS 或 DOTNET_URLS 环境变量并分配以分号分隔的 url 列表。

方式 3 在 appsettings.json 中设置“urls”键,它也使用分号分隔的 url 列表。

{
"Urls": "http://localhost:9999;https://someotherdomain.com"
}

此处提供每种方法的更多文档和限制

Configure endpoints for the ASP.NET Core Kestrel web server

关于c# - Kestrel::通过 appsettings.json 绑定(bind)到多个 HTTP 和 HTTPS url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69197803/

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