您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使Kestrel Web服务器监听非本地主机的请求?

如何使Kestrel Web服务器监听非本地主机的请求?

Kestrel服务器使用的配置文件hosting.json。在不同的beta版本中,名称多次更改。如果您现在project.json使用以下"command"部分

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
}

然后在从命令行启动服务器的过程中

dnx web

文件hosting.json将被读取。文件

{
    "server.urls": "http://0.0.0.0:5000"
}

将配置服务器在每个IP4地址上侦听5000。配置

{
    "server.urls": "http://::5000;http://0.0.0.0:5000"
}

通知在IP4和IP6地址上侦听5000。

可以通过使用ASPNET_ENV环境变量或--config myconfig1.json(或config=myconfig1.json)的使用来指定备用配置文件。例如,您可以使用

SET ASPNET_ENV=Development

并创建hosting.Development.json具有特定配置的文件。或者,您可以project.json

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
    "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"
}

并按使用量启动服务器

dnx webProd

我还必须提醒您,可能需要您允许另外收听和注册(开始dnx web)。由于防火墙和侦听新的TCP / HTTP端口的本地安全性,因此需要它。如下所示,应该为每个人(IPv4和IPv6)进行本地注册和侦听5000端口:

netsh http add iplisten ipaddress=0.0.0.0:5000
netsh http add iplisten ipaddress=::5000
netsh http add urlacl url=http://+:5000/ user=\Everyone

为了更加安全,您可以调整上述配置以授予最少的权限。

谢谢@BlaneBunderson。可以使用代替IP地址(例如http://*:5000)来监听来自任何接口的 任何* IP4和IP6地址。一个应该小心,不要使用这些

因为它将需要 两次 注册IP6地址::或IP4地址。0.0.0.0 __

对应于公告

从技术上讲,任何不是“ localhost”或有效IPv4或IPv6地址的主机名都将导致Kestrel绑定到所有网络接口。

我认为这种行为将来可能会改变。因此,我建议只使用*:50000.0.0.0:5000::5000构成对任何IT地址的注册

ASP.NET Core RC2更改了加载认值的行为(请参见声明)。必须更改Main才能从中加载设置hosting.json和命令行参数。以下是用法示例

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
        .AddCommandLine(args)
        .Build();

    var host = new WebHostBuilder()
        .UseUrls("http://*:1000", "https://*:1234", "http://0.0.0.0:5000")
        .UseEnvironment("Development")
        .UseConfiguration(config)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

上面的代码使用了三个绑定:"http://*:1000""https://*:1234""http://0.0.0.0:5000"认情况下,而不是在认情况下使用认端口5000(准确地说的使用http://localhost:5000)。的呼叫.UseConfiguration(config)是在之后 发出的.UseUrls。因此,hosting.json从命令行加载的配置或命令行将覆盖认选项。如果有.SetBasePath(Directory.GetCurrentDirectory())一行删除行,hosting.json则将从将编译应用程序dll的目录下加载该目录(例如bin\Debug\netcoreapp1.0)。

一个人可以像这样使用执行

dotnet.exe run --server.urls=http://0.0.0.0:5000

覆盖认设置(from UseUrls)和from "server.urls"属性的设置(hosting.json如果存在)。

以相同的方式,可以通过设置环境变量来覆盖ULR设置

set ASPNETCORE_SERVER.URLS=http://localhost:12541/

然后使用的应用程序的认启动dotnet.exe runhttp://localhost:12541/用于绑定。

您可以在此处找到HTTPS绑定用法的示例。

在ASP.NET的更高版本中,环境变量的名称从更改ASPNETCORE_SERVER.URLSASPNETCORE_URLS(请参阅此处的ASP.NET Core 3.1文档)。

其他 2022/1/1 18:15:50 有447人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶