我可以将Windows主机文件配置为使用IP地址加端口吗?


13

我想配置Windows 主机文件以基于IP地址+端口发送主机请求。

例如:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com

因为我有Apache在端口8080上侦听,而IIS在端口80上侦听(默认)。

因此,我认为做到这一点的最佳方法是修改hosts文件。它没有任何影响。我没有收到任何错误或任何消息。



为什么不能仅在浏览器中启动site1.com(:80)sitetwo.com:8080
伊万2014年

Answers:


11

你不能 hosts文件就是主机。这等效于本地计算机中的“短路” DNS。DNS也无法将您发送到端口。

为了实现您要执行的操作,您需要在IIS或Apache下设置虚拟主机,并使用该主机(基于HTTP Host:标头)让服务确定要显示的站点。但是,如果您想同时使用IIS和Apache,这将无济于事。


能否请您清除,我不了解虚拟主机。我该如何进行虚拟主机托管?

4
  • hosts文件仅用于主机名解析
  • 浏览器,在没有直接指定端口的:即<hostname>:<port>默认端口80

典型问题场景

  1. 应用程序通常设置他们的服务器相同的默认IP地址127.0.0.1又名localhost (在hosts文件中定义)
  2. 为了避免可能在其他现有/正在运行的服务器之间发生冲突,该应用程序通常允许您更改端口,但不能更改IP地址。

    2a。如果可以在回送保留地址空间 中将服务器ip地址更改为另一个127.0.0.0/8,则可能不会尝试在hosts文件中设置端口。

可能的解决方案

您可以使用Windows附带的网络工具netsh作为端口代理来解决此问题。


总览

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

动作

  • 启动服务器 localhost:8081
  • 主机文件中添加“本地DNS” 作为新行
    • 127.65.43.21 example.app
      • 127.0.0.0/8可以使用网络中的任何空闲地址。
      • 注意:我假设127.65.43.21:80未被其他服务占用。
      • 您可以检查 netstat -a -n -p TCP | grep "LISTENING"
  • 使用netsh命令实用程序 添加以下网络配置
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • 通过访问服务器 http://example.app

注意:
-这些命令/文件修改需要以管理员权限执行

- netsh的端口代理需要IPv6库,甚至只使用v4tov4,通常他们也将被默认包括在内,否则使用下面的命令来安装:netsh interface ipv6 install


您可以看到使用以下命令添加的条目

netsh interface portproxy show v4tov4

您可以使用以下命令删除条目

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


链接到资源:

注意:此答案是我在关于stackoverflow的类似问题/答案中讨论的答案的重复


这是一个很好的答案...感谢资源链接!
Eric Hepperle-CodeSlayer2010

3

不,你不能。如果它不起作用,则说明出现了其他问题。

127.0.0.1 site.com
127.0.0.1 www.site.com

我认为这是用于开发箱?

只要您不执行代理DNS查询之类的操作,DNS就会将site.com和www.site.com解析为localhost。您可能应该在ServerFault上寻求Web服务器配置帮助,这是最有可能的问题。


谢谢您的帮助!!!但是没有办法???那我该如何在不同的端口上并行运行iis和apache

他们仍然要使用相同的地址,端口甚至不影响主机的工作。该端口仍然可以使用,您可以并行运行它们。
Xorlev

3

您可以使用Fiddler做到这一点。使用Fiddler脚本,您可以完成许多令人惊奇的事情。

如果您这样设置主机

127.0.0.1     www.site1.com    # Port 80
127.0.0.1     www.sitetwo.com  # Port 8080

将其添加到CustomRules.js中(要打开CustomRules.js,请在Fiddler的Rules菜单上选择Customize Rules)。

// this method is already exist
static function OnBeforeRequest(oSession: Session) {  
    if (oSession.host.toLowerCase() == "www.sitetwo.com") 
        oSession.host = "www.sitetwo.com:8080";
    ...
}

然后Fiddler转换主机,您将连接到端口8080。


您是否知道可以使用相同效果的任何开源替代品(james,owasp zap或其他)?
Marc.2377


0

与其他答案一样,主机文件没有端口信息,但您可以拥有一个页面,该页面重定向了偏向标头的文件,如apache或IIS对于基于名称的虚拟主机而言。检查标题并根据需要重定向。但是,当您重新发明轮子时,我并没有真正看到其中的价值。Apache支持基于端口的虚拟主机,我认为iis可以。

您的目标是在生产环境中同时运行我们的开发机器。



-1

这是您可以做的,仅对本地开发有用。

主机文件:

  • 127.0.0.1 local.site1.com
  • 127.0.0.1 local.site2.com

在IIS中,创建新网站,并为local.site1.com和local.site2.com创建网站

IIS安装程序

  • IP地址:全部未分配(它将使用本地主机或任​​何其他可用的IP)
  • 端口:除已使用的端口外(其他端口(81、82、83等。默认网站已使用80))
  • 主机名:留空

你已准备好出发。只需确保您已使用的端口未被其他进程使用,并且还可以从防火墙,防病毒软件等打开。

之后,您可以使用以下URL从本地计算机或LAN访问网站。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.