如何在 Asp.Net Core 应用程序中将域 url 与 kestrel 一起使用?

A.R*_*R.F 8 kestrel .net-core asp.net-core asp.net-core-2.2

我有一个asp.net core 2.2windowsos 中的项目。

我部署项目并kesterl使用以下命令运行:

dotnet myapp.dll
Run Code Online (Sandbox Code Playgroud)

那是运行在http://localhost:5000.

我需要在mydomain.com.

mydomain.com在hosts中设置了127.0.0.1ip。

如何设置这个配置?

pok*_*oke 9

当您直接通过 Kestrel 运行 ASP.NET Core 应用程序时,无需使用 IIS 或 nginx 等额外的反向代理,您将需要正确配置托管 URL。文档的端点配置章节详细描述了一些选项:

默认情况下,ASP.NET Core 绑定到:

使用以下方式指定 URL:

  • ASPNETCORE_URLS环境变量。
  • --urls命令行参数。
  • urls主机配置密钥。
  • UseUrls扩展方法。

一个非常常见的解决方案是更改环境变量。这允许您以非常灵活的方式设置 URL,这对于快速启动应用程序非常有用。当您从命令行启动服务器时,可能如下所示:

# PowerShell
PS> $env:ASPNETCORE_URLS = 'http://example.com'
PS> dotnet myapp.dll

# cmd
> set ASPNETCORE_URLS=http://example.com
> dotnet myapp.dll

# bash
$ ASPNETCORE_URLS=http://example.com dotnet myapp.dll
Run Code Online (Sandbox Code Playgroud)

更永久(但仍然灵活)的解决方案是将 Kestrel 配置指定为appsettings.json文件的一部分。如果您想通过 HTTPS 托管,这还允许您配置 HTTPS 证书。

例如,这可能如下所示:

{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://example.com"
      },
      "Https": {
        "Url": "https://example.com",
        "Certificate": {
          "Path": "<path to .pfx file>",
          "Password": "<certificate password>"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看有关使用 Kestrel 托管的文档。

如果您想在公共端口上托管应用程序,您应该记住,只能有一个进程在侦听端口。因此,如果您有其他应用程序已在侦听端口 80 和 443,您将无法在这些端口上使用 Kestrel 托管您的应用程序。这是仅使用 Kestrel 的托管模型的限制,因为每个应用程序都是一个单独的进程。相比之下,通过反向代理(例如 IIS 或 nginx)托管,允许您在同一端口上托管多个应用程序,因为反向代理进程正在侦听这些端口。