我如何让红帽网页服务器收听非本地主机的请求?
我已经将我的c#,asp.net 5,mvc 6应用程序部署到了Windows 2008服务器。 我已经启动了dnx web ,它正在监听端口5000,从本地计算机访问时工作正常。 
我如何获得它听非本地主机的请求?
PS这个问题不是这个的重复…它指的是asp.net pre RC1当hosting.ini实际上有一个.ini格式。 现在,这是JSON,我不能find任何文件实际上应该在其中。
PPS真正的解决scheme是对被链接的问题的不被接受的答案 ,这是一个巨大的警告。 脚步:
- 改变你的project.json每个链接的答案。
- 将您的项目发布到您的服务器。
- 在服务器上,转到… \ approot \ src \ YourProject文件夹并在那里打开一个命令窗口。
-  运行dnx web– 它会失败
-  运行dnu restore
- 运行“dnu build”
- 运行“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://::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 两次 。 
对应于公告
从技术上讲,任何不是“本地主机”或有效的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.0 ) bin\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