如何更改 ASP.NET Core 的内置 Web 服务器 (Kestrel) 默认 IP 绑定,从 127.0.0.1 到 0.0.0.0?

How to Change ASP.NET Core's Built-In Web-Server (Kestrel) Default IP Binding, from 127.0.0.1 to 0.0.0.0?

我在 Ubuntu VPS,
上安装了 .NET Core SDK v3.1 我现在正在试验 ASP.NET Core 个项目。

我用
dotnet new webapp -o <ProjectName> --no-https
创建一个 ASP.NET 核心项目,

dotnet run
运行 它,使用 .NET Core 的内置 Web 服务器。

我有一个小问题,即.NET Core 的内置Web 服务器绑定到IP 127.0.0.1 (localhost),
而不是我 VPS.

的 Public IP

这意味着我无法从远程计算机上的浏览器连接到我的 ASP.NET 核心项目,只能从 VPS.

上的浏览​​器连接

如果 Web 服务器不绑定到 127.0.0.1,而是绑定到 0.0.0.0
那么它会很好,因为 0.0.0.0 意味着 "All Network Interfaces",而不仅仅是本地主机 IP。

在 Google 中搜索后,人们建议转到项目文件夹,
然后进入Properties文件夹,
在那里,编辑一个名为 launchSettings.json.

的文件

在该文件中,我们需要更改:
"applicationUrl": "http://localhost:5000"

"applicationUrl": "http://0.0.0.0:5000"

这样做后重新运行ning项目,问题解决,
我可以从远程计算机连接到 Web 服务器。

所以这个解决方案有效,
但我有 1 个问题:
它需要编辑每个项目的 launchSettings.json 文件。

我正在寻找不需要为此更改每个项目的解决方案,
但更像是更改 Web 服务器的设置,一次..

有这样的解决方案吗?

例如 Web 服务器的一些设置文件,它定义了要绑定到的 IP 和端口,
或者如果不是那样,那么可能有一些 ASP.NET 核心项目的模板,我可以转到该模板的文件夹,然后在那里编辑模板的 launchSettings.json 文件,
因此,从那一刻起将创建的所有新 ASP.NET 核心项目都将使用正确的 IP (0.0.0.0) 创建。

任何可以完成一次而不是每次的解决方案都很棒。

launchSettings.json 仅真正用于开发目的。那时,您通常只在本地进行开发,而不是寻找外部设备来访问您的服务器。这就是环回接口上的默认设置有意义的原因。

出于生产或一般非开发目的,您应该使用 dotnet publish(或通过 Visual Studio)正确捆绑应用程序。届时,已发布的应用程序将不包含 launchSettings.json,因此该配置实际上并不适用。

相反,您应该设置 URL 您的应用程序应该通过配置监听。例如使用环境变量 ASPNETCORE_URLS:

# E.g. on Linux:
ASPNETCORE_URLS=http://0.0.0.0:80 dotnet MyApp.dll

或者将 URL 传递给 --url 命令行参数

MyApp.exe --urls http://0.0.0.0:80

您也可以将其放入 appsettings.json 或特定于环境的 appsettings.ENV.json:

{
    // …
    "urls": "http://0.0.0.0:80"
}

由于应用程序设置通常提交给源代码管理,因此您可以跨机器保持配置。

至于一次更改多个项目,唯一的选择是使用更新后的 URL 设置全局环境变量。但是由于多个应用程序不能托管在同一个 interface/port 组合上,这可能不是最好的主意,因为环境变量的值会覆盖 appsettings 的值,从而使推理变得更加复杂。