如何使Kestrel Web服务器监听非本地主机的请求?
我已经将c#,asp.net 5,mvc 6应用程序部署到Windows 2008服务器。我已经启动dnx
web,它正在侦听端口5000,并且从本地计算机访问时工作正常。
如何获取它以侦听非本地主机的请求?
PS这个问题不是这个问题的重复...当hosting.ini实际上具有.ini格式时,它指的是asp.net
RC1之前的版本。现在,它是JSON,我找不到任何有关它实际内容的文档。
PPS真正的解决方案是对链接的问题的不可接受的回答,其中有很多警告。脚步:
- 根据链接的答案更改project.json。
- 将项目发布到服务器。
- 在服务器上,转到… \ approot \ src \ YourProject文件夹,然后在此处打开命令窗口。
- 运行
dnx web
-它将失败 - 跑
dnu restore
- 运行’dnu build`
- 运行’dnx web`-Web服务器现在应该可以正常启动了
PS对于支持这个问题的人。过时了 非常不合时宜!
它适用于.NET Core的早期版本。问题和答案当然不适用于当前版本的框架(例如2.x,3.x)
回答:
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:5000netsh 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: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地址的注册。
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 run
将http://localhost:12541/
用于绑定。
您可以在此处找到HTTPS绑定用法的示例。
在ASP.NET的更高版本中,环境变量的名称从更改ASPNETCORE_SERVER.URLS
为ASPNETCORE_URLS
(请参阅此处的ASP.NET Core 3.1文档)。
以上是 如何使Kestrel Web服务器监听非本地主机的请求? 的全部内容, 来源链接: utcz.com/qa/411151.html