![我可以配置 Windows hosts 文件以使用 IP 地址加端口吗?](https://linux22.com/image/506470/%E6%88%91%E5%8F%AF%E4%BB%A5%E9%85%8D%E7%BD%AE%20Windows%20hosts%20%E6%96%87%E4%BB%B6%E4%BB%A5%E4%BD%BF%E7%94%A8%20IP%20%E5%9C%B0%E5%9D%80%E5%8A%A0%E7%AB%AF%E5%8F%A3%E5%90%97%EF%BC%9F.png)
我想要配置 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
###典型问题场景###
- 应用程序通常将其服务器设置为相同的默认 IP 地址,
127.0.0.1
即localhost
(在 hosts 文件中定义)。 - 为了避免与其他现有/正在运行的服务器发生冲突,应用程序通常允许您更改端口,但不允许更改 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 文件将其重定向到您喜欢的域名。