我想在 Windowshosts
文件中指定具有两个不同端口的主机名。
有办法吗?还是 Windows 本身不允许?
过去 8 个小时里我一直在浪费时间寻找解决方案。
是否可以在主机文件中指定端口hosts
?例如:127.0.0.1:80
和127.0.0.1:9211
答案1
只需使用不带端口的 IP 地址即可。例如:
192.168.2.50 example.com
然后,从浏览器(或其他程序)访问 192.168.2.50:5555:
http://example.com:5555/
该hosts
文件可以在以下位置找到:
Linux /etc/hosts
视窗:C:\Windows\System32\drivers\etc\hosts
答案2
您无法将端口号与映射到 hosts 文件中 IP 的主机名关联起来。您可以使用以下方法实现此目的Fiddler尽管使用 FiddlerScript:
if (oSession.HostnameIs("somesite.com")){
oSession.bypassGateway = true;
oSession["x-overrideHost"] = "1.2.3.4:8080";
}
答案3
- 该
hosts
文件仅用于将主机名解析为 IP 地址 - 如果您没有在 URL 中指定端口(例如),
<protocol>://<hostname>[:<port>][/path]
您的浏览器将使用协议的默认端口:HTTP/80, HTTPS/443, FTP/21
示例问题场景
- 应用程序通常将其服务器设置为相同的默认 IP 地址
127.0.0.1
(localhost
又称定义在主办方文件)。 - 当多台服务器共享同一个 IP 时,为了允许将流量路由到正确的服务器,应用程序通常允许您根据需要修改其端口,但不允许修改其 IP 地址。
- “如果”您可以将服务器 IP 地址更改为另一个环回保留地址空间
127.0.0.0/8
,那么你可能不会尝试在主办方文件
- “如果”您可以将服务器 IP 地址更改为另一个环回保留地址空间
可能的解决方案
你可以使用 Windows 的内置网络工具来解决此问题netsh
作为端口代理。
概述
http://example.app
| <--browser defaults to HTTP port 80
+-> http://example.app:80
| <--Hostname resolved to IP by Hosts File
+-> http://127.65.43.21:80
| <--Link by netsh Utility
+-> http://127.0.0.1:8081
操作
- 在自定义端口上启动应用的 HTTP 服务器:
localhost:8081
- 在中添加一行主办方将免费 IP 地址映射到应用程序主机名的文件:
- 例子:
127.65.43.21 example.app
- 我建议,但可以使用
127.65.43.21
子网中的任何免费地址127.0.0.0/8
- 验证该 IP
127.65.43.21:80
未被其他服务使用。如果已被使用,请使用其他 IP。使用以下方式检查:netstat -a -n -p TCP | FINDSTR "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 上类似的问题/答案。