当前位置:  开发笔记 > 编程语言 > 正文

如何让kestrel Web服务器监听非localhost请求?

如何解决《如何让kestrelWeb服务器监听非localhost请求?》经验,为你挑选了3个好方法。

我已经将我的c#,asp.net 5,mvc 6应用程序部署到了Windows 2008服务器上.我已经启动dnx web它正在侦听端口5000并且从本地计算机访问时工作正常.

如何让它听取非本地主机请求?

PS这个问题并不重复......当hosting.ini实际上有.ini格式时,它指的是asp.net pre RC1.现在,它是JSON,我找不到任何实际应该包含在其中的文档.

PPS真正的解决方案是对链接问题的未接受答案,并提出了一个重要的警告.脚步:

    根据链接的答案更改project.json.

    将项目发布到服务器.

    在服务器上,转到...\approot\src\YourProject文件夹并在那里打开命令窗口.

    dnx web- 它会失败

    dnu restore

    运行'dnu build`

    运行'dnx web` - Web服务器现在应该可以正常启动了

Oleg.. 103

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地址.一要仔细,不能使用http://*:5000;http://::5000,http://::5000;http://*:5000,http://*:5000;http://0.0.0.0:5000http://*:5000;http://0.0.0.0:5000因为它需要注册IP6地址::或地址IP4 0.0.0.0 两次.

对应公告

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

我认为将来可能会改变这种行为.因此,我建议仅使用*:5000,0.0.0.0:5000::5000注册任何IT地址.

更新2: 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()
        .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

覆盖默认设置(从UseUrls)和"server.urls"属性的设置,hosting.json如果它存在.

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

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

那么应用程序的默认启动dotnet.exe runhttp://localhost:12541/用于绑定.

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



1> Oleg..:

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地址.一要仔细,不能使用http://*:5000;http://::5000,http://::5000;http://*:5000,http://*:5000;http://0.0.0.0:5000http://*:5000;http://0.0.0.0:5000因为它需要注册IP6地址::或地址IP4 0.0.0.0 两次.

对应公告

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

我认为将来可能会改变这种行为.因此,我建议仅使用*:5000,0.0.0.0:5000::5000注册任何IT地址.

更新2: 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()
        .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

覆盖默认设置(从UseUrls)和"server.urls"属性的设置,hosting.json如果它存在.

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

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

那么应用程序的默认启动dotnet.exe runhttp://localhost:12541/用于绑定.

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



2> Trygve..:

在RC2中,不再使用project.json的命令部分.我还没有得到Kestrel来接收hosting.json,但是您可以以编程方式在创建和配置新WebHostBuilder的应用程序的Main中设置端口.只需添加.UseUrls()方法,如下面的示例所示

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseUrls("http://0.0.0.0:5000/")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup()
            .Build();

        host.Run();
    }


这是一个很大的帮助.我改为使用`.UseUrls("http://*:5000")`,并在VirtualBox上使用空主机IP转发5000转发,最后我可以从我的Mac到达Docker托管的.NET Core端点.甜!
也适用于1.0.0-preview2-003121,docker image

3> GrandOpener..:

如果您尝试将ASP.NET Core应用程序放在docker容器中(这是我需要监听非本地主机地址的用例),请注意Microsoft已经为您提供了这个用例.你可以在https://hub.docker.com/r/microsoft/aspnetcore/看到完整的荣耀

在当前(v1.0.1),解决此问题的关键魔法是源Dockerfile包含url环境变量设置,并且应用程序不会尝试覆盖它.(实际上,容器化应用程序应该在内部尽可能少地声明它将运行的环境.)

ENV ASPNETCORE_URLS http://+:80

注意那里的加号而不是星号.我实际上建议访问上面的dockerhub链接阅读我的答案,只要链接是好的.版本1.1即将来临,未来可能会再次发生变化.

运行容器时,请确保根据环境变量设置公开guest虚拟机端口80.例如:

docker run -d -p 8000:80 myapp
curl localhost:8000

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有