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

14 iis apache-2.2

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

例如:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com
Run Code Online (Sandbox Code Playgroud)

因为我让 Apache 在端口 8080 和 IIS 上侦听端口 80(默认)。

所以,我认为最好的方法是修改hosts文件。它不会影响任何事情。我既没有收到任何错误,也没有收到任何消息。

小智 11

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

为了实现您想要做的事情,您需要在 IIS 或 Apache 下设置虚拟主机,并使用它(基于 HTTP Host: 标头)让服务决定显示哪个站点。但是,如果您想同时使用 IIS 和 Apache 执行此操作,这对您没有帮助。


小智 5

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

典型问题场景

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

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

可能的解决方案

您可以使用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
Run Code Online (Sandbox Code Playgroud)

行动

  • 启动您的服务器 localhost:8081
  • hosts 文件中添加“本地 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 portproxy 需要 ipv6 库,即使只使用 v4tov4,通常它们也会被默认包含,否则使用以下命令安装它们:netsh interface ipv6 install


你可以看到你用命令添加的条目

netsh interface portproxy show v4tov4

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

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


资源链接:

注意:这个答案是我在 stackoverflow 上的这个类似问题/答案中讨论的答案的重复