我如何让红帽网页服务器收听非本地主机的请求?

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

我如何获得它听非本地主机的请求?

PS这个问题不是这个的重复…它指的是asp.net pre RC1当hosting.ini实际上有一个.ini格式。 现在,这是JSON,我不能find任何文件实际上应该在其中。

PPS真正的解决scheme是对被链接的问题的不被接受的答案 ,这是一个巨大的警告。 脚步:

  1. 改变你的project.json每个链接的答案。
  2. 将您的项目发布到您的服务器。
  3. 在服务器上,转到… \ approot \ src \ YourProject文件夹并在那里打开一个命令窗口。
  4. 运行dnx web – 它会失败
  5. 运行dnu restore
  6. 运行“dnu build”
  7. 运行“DNXnetworking” – networking服务器现在应该开始罚款

Kestrel服务器使用的默认configuration文件是hosting.json 。 该名称在不同的testing版本中被多次更改。 如果您现在使用project.json和下面的"command"部分

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

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

 dnx web 

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

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

将configuration服务器在每个IP4地址上监听5000。 configuration

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

将通知监听5000的IP4和IP6地址。

可以通过使用ASPNET_ENV环境variables或使用--config myconfig1.json (或config=myconfig1.json )来指定备用configuration文件。 比如你可以使用

 SET ASPNET_ENV=Development 

并创build具有特定configuration的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端口的本地安全性所必需的。 像下面的东西应该为每个人做本地注册和监听5000端口(IPv4和IPv6):

 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 

为了更安全,您可以调整上述configuration以授予最小权限。

更新:谢谢@BlaneBunderson。 可以使用*代替IP地址(如http://*:5000 )从任何接口监听任何 IP4和IP6地址。 一个应该小心,不要使用http://*:5000;http://::5000http://::5000;http://*:5000http://*:5000;http://0.0.0.0:5000http://*:5000;http://0.0.0.0:5000因为它需要注册IP6地址::或IP4地址0.0.0.0 两次

对应于公告

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

我认为这种行为在将来可能会改变。 因此,我build议只使用*:5000 0.0.0.0:5000 *: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 之后 .UseUrls 。 因此,从hosting.json或命令行加载的configuration将覆盖默认选项。 如果删除.SetBasePath(Directory.GetCurrentDirectory())行,那么.SetBasePath(Directory.GetCurrentDirectory())将从应用程序dll将被编译的目录(例如bin\Debug\netcoreapp1.0bin\Debug\netcoreapp1.0

可以使用像执行

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

如果存在,则覆盖来自UseUrls的默认设置(来自UseUrls )和来自"server.urls"属性的设置。

用同样的方法可以通过设置环境variables来覆盖ULR设置

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

那么使用dotnet.exe run应用程序的默认启动将使用http://localhost:12541/进行绑定。

你可以在这里find一个使用HTTPS绑定的例子。

在RC2中,project.json的命令部分不再使用。 我还没有得到Kestrel拿起hosting.json,但你可以编程设置新的WebHostBuilder创build和configuration的应用程序的主要端口。 只需添加.UseUrls()方法,如下面的示例

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

如果您正在尝试将一个ASP.NET Core应用程序放入Docker容器(这是我需要侦听非本地主机地址的用例),请注意,此用例已由Microsoft组合在一起。 您可以通过https://hub.docker.com/r/microsoft/aspnetcore/查看完整的荣耀;

在当前版本(v1.0.1)中,解决这个问题的关键技巧是源Dockerfile包含一个url环境variables设置,应用程序不会试图覆盖这个。 (事实上​​,一个集装箱化的应用程序应该尽可能less地说明它将运行的环境。)

 ENV ASPNETCORE_URLS http://+:80 

注意加号而不是星号。 其实我build议访问上面的dockerhub链接只要阅读我的答案链接是好的。 版本1.1即将到来,事情可能在未来再次发生变化。

运行容器时,请确保根据环境variables设置显示访客端口80。 例如:

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