如何在Asp.Net核心应用程序中使用带有Kestrel的域URL?

时间:2019-07-27 11:23:40

标签: asp.net-core .net-core asp.net-core-2.2 kestrel

我在asp.net core 2.2操作系统中有一个windows的项目。

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

dotnet myapp.dll

http://localhost:5000中运行。

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

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

如何设置此配置?

1 个答案:

答案 0 :(得分:1)

当直接通过Kestrel运行ASP.NET Core应用程序而没有其他反向代理(如IIS或nginx)时,您将需要正确配置托管URL。文档的endpoint configuration chapter中详细描述了一些选项:

  

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

           

使用以下网址指定网址:

     
      
  • 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

更永久(但仍然灵活)的解决方案是将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)进行托管,则可以在同一端口上托管多个应用程序,因为是在这些端口上侦听的是反向代理进程。