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

How to use domain url with kestrel in Asp.Net core app?

我在 windows os 中有一个 asp.net core 2.2 的项目。

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

dotnet myapp.dll

那是 http://localhost:5000 中的 运行。

我需要 运行 mydomain.com 中的网站。

我在 hosts 中为 127.0.0.1 ip 设置了 mydomain.com

如何设置这个配置?

当您直接通过 Kestrel 运行 一个 ASP.NET 核心应用程序时,没有像 IIS 或 nginx 这样的额外反向代理,您将需要正确配置主机 URL。文档的 endpoint configuration chapter 中详细描述了一些选项:

By default, ASP.NET Core binds to:

Specify URLs using the:

  • ASPNETCORE_URLS environment variable.
  • --urls command-line argument.
  • urls host configuration key.
  • UseUrls extension method.

一个非常常见的解决方案是更改环境变量。这允许您以非常灵活的方式设置 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

一个更永久(但仍然灵活)的解决方案是将 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>"
        }
      }
    }
  }
}

有关详细信息,请查看 hosting with Kestrel 上的文档。

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