如何在Windows 11主机的hosts文件中映射域名到带端口的IP以访问虚拟机中的Apache服务?
如何在Windows 11主机的hosts文件中映射域名到带端口的IP以访问虚拟机中的Apache服务?
嘿,我来帮你搞定这个问题!首先得明确一个关键点:Windows的hosts文件只能把域名映射到IP地址,没办法直接指定端口——因为它只负责DNS解析这一层的工作,不处理端口转发的逻辑。所以我们得拆成两步来实现你的需求:先让域名解析到本地回环地址,再把对这个域名的请求转发到22222端口。下面给你两种常用的可行方案:
方案一:Hosts文件 + Nginx反向代理(简单易上手)
第一步:修改Hosts文件
- 右键点击「记事本」,选择「以管理员身份运行」
- 在记事本里打开路径:
C:\Windows\System32\drivers\etc\hosts - 在文件末尾添加一行:
127.0.0.1 www.somedomain.local - 保存并关闭记事本(如果提示权限不足,确认是用管理员身份打开的)
第二步:配置Nginx做反向代理
- 下载Windows版本的Nginx,解压到本地任意目录(比如
C:\nginx) - 打开
C:\nginx\conf\nginx.conf,在http代码块的末尾,添加一个新的server配置:server { listen 80; server_name www.somedomain.local; location / { proxy_pass http://127.0.0.1:22222; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - 打开管理员身份的命令提示符,进入Nginx目录,执行
start nginx启动服务 - 现在直接在浏览器输入
http://www.somedomain.local,就能访问到虚拟机里的Apache服务了
- 下载Windows版本的Nginx,解压到本地任意目录(比如
方案二:Hosts文件 + Windows自带IIS反向代理(无需额外装软件)
如果你不想用第三方工具,可以用Windows自带的IIS来实现:
第一步:同样先修改Hosts文件
和方案一的第一步完全一样,添加127.0.0.1 www.somedomain.local到hosts文件第二步:启用IIS及反向代理功能
- 打开「控制面板」→「程序和功能」→「启用或关闭Windows功能」
- 勾选「Internet Information Services」下的所有Web管理工具,同时勾选「万维网服务」→「应用程序开发功能」里的「URL重写」,以及「万维网服务」→「常见HTTP功能」里的「代理」
- 点击「确定」完成安装,等待配置生效
第三步:配置IIS反向代理规则
- 打开「IIS管理器」,点击左侧的服务器节点,在功能视图里找到「Application Request Routing Cache」,双击打开
- 点击右侧的「服务器代理设置」,勾选「启用代理」,然后点击「应用」
- 在IIS管理器里创建一个新网站:绑定域名
www.somedomain.local,端口选80,物理路径随便选一个空文件夹即可 - 进入这个新网站的「URL重写」模块,点击右侧的「添加规则」,选择「反向代理」
- 在「输入要转发的服务器地址」里填写
http://127.0.0.1:22222,点击「确定」保存规则 - 现在访问
http://www.somedomain.local就能直接跳转到虚拟机的Apache服务了
临时方案:PowerShell端口转发(重启后失效)
如果只是临时用一下,不想装任何软件,可以用PowerShell配置临时端口转发:
- 以管理员身份打开PowerShell,执行以下命令:
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=80 connectaddress=127.0.0.1 connectport=22222 - 同样先修改Hosts文件把
www.somedomain.local指向127.0.0.1 - 现在直接访问
http://www.somedomain.local就能访问到虚拟机的服务了 - 要是想取消这个转发,执行:
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=80
关于HTTPS的补充说明
你提到想用https://www.somedomain.local访问,这时候需要给代理工具配置SSL证书。你可以用自签名证书(比如用mkcert工具生成),然后在Nginx或IIS里绑定HTTPS端口(默认443),同时调整代理规则把HTTPS请求转发到http://127.0.0.1:22222即可。
备注:内容来源于stack exchange,提问作者Dan




