我可以配置 Windows hosts 文件以使用 IP 地址加端口吗?

我可以配置 Windows hosts 文件以使用 IP 地址加端口吗?

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

例如:

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

因为我让 Apache 监听端口 8080,让 IIS 监听端口 80(默认)。

因此,我认为最好的方法是修改文件hosts。这不会影响任何东西。我既没有收到任何错误,也没有收到任何消息。

答案1

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

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

答案2

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

###典型问题场景###

  1. 应用程序通常将其服务器设置为相同的默认 IP 地址,127.0.0.1localhost (在 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”中添加hosts 文件作为新行
    • 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 上类似的问题/答案。

答案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 的规则菜单)

// 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。

答案4

您是否仅将服务器用于本地开发?如果是这样,您可以让 Apache 监听 127.0.0.2:80,并使用 hosts 文件将其重定向到您喜欢的域名。

相关内容