如何在 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:
- http://localhost:5000
- https://localhost:5001 (when a local development certificate is present)
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 等反向代理托管,允许您在同一端口上托管多个应用程序,因为它是监听这些端口的反向代理进程。
我在 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:
- http://localhost:5000
- https://localhost:5001 (when a local development certificate is present)
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 等反向代理托管,允许您在同一端口上托管多个应用程序,因为它是监听这些端口的反向代理进程。