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

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

如何使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
环境变量或
--configmyconfig1.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:5000netsh http add iplisten ipaddress=::5000netsh 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:5000
  • http://*: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<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的目录下加载该目录(例如
binDebugnetcoreapp1.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 run
http://localhost:12541/
用于绑定。

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

备注:
在ASP.NET的更高版本中,环境变量的名称从更改

ASPNETCORE_SERVER.URLS
ASPNETCORE_URLS
(请参阅此处的ASP.NET Core 3.1文档)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5063846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存