如何通过USB连接的iPhone访问Mac上的Apache虚拟主机
我之前也碰到过一模一样的场景,用USB共享网络在手机上测本地虚拟主机确实有点绕,核心问题出在DNS解析——你的iPhone不知道把*.dev指向Mac的USB共享IP,所以才会返回404。下面是两种靠谱的解决方法,按复杂度从低到高排序:
方法一:给单个虚拟主机加IP别名(快速临时方案)
如果你的项目不多,这个方法最快上手:
先找到Mac在USB共享网络下的IP:
打开「系统设置」→「网络」,左侧列表找到「iPhone USB」,右侧就能看到你的Mac在这个专属网络里的IP(比如172.20.10.3,这个地址可能每次连接USB都会变,注意每次都要更新)。修改Apache虚拟主机配置:
打开你的虚拟主机配置文件(通常是/etc/apache2/extra/httpd-vhosts.conf),给目标<VirtualHost>块添加ServerAlias,把Mac的USB共享IP填进去,比如:<VirtualHost *:80> ServerName example.dev ServerAlias 172.20.10.3 # 替换成你的Mac USB共享IP DocumentRoot "/Users/yourname/Sites/example" # 其他权限配置(比如Directory规则)... </VirtualHost>(如果要测多个项目,得给每个主机分配不同端口,比如
8080、8081,然后访问http://172.20.10.3:8080,但这样就没法用*.dev域名了,所以这个方法适合临时测单个项目)重启Apache生效:
终端执行:sudo apachectl restart
现在你在iPhone的Safari里直接访问http://172.20.10.3,就能打开对应的虚拟主机了。
方法二:用dnsmasq实现*.dev自动解析(长期完美方案)
这个方法能让所有*.dev域名自动指向你的Mac,不用每次改配置,适合多项目长期测试:
安装dnsmasq(用Homebrew,没装Homebrew的话先装一下):
终端执行:brew install dnsmasq配置dnsmasq的解析规则:
- M系列Mac:编辑配置文件
open /opt/homebrew/etc/dnsmasq.conf - Intel Mac:编辑配置文件
open /usr/local/etc/dnsmasq.conf
在文件末尾添加一行,把172.20.10.3换成你之前找到的Mac USB共享IP:
address=/.dev/172.20.10.3这行的意思是:所有
.dev后缀的域名,都强制解析到你的Mac IP。- M系列Mac:编辑配置文件
重启dnsmasq服务:
终端执行:brew services restart dnsmasq让iPhone使用Mac作为DNS服务器:
在iPhone上打开「设置」,找到「USB以太网」(就是USB共享网络对应的入口),点击「配置DNS」→「手动」,添加一个DNS服务器地址——就是你的Mac USB共享IP(比如172.20.10.3),删掉其他默认的DNS地址。验证效果:
现在在iPhone的Safari里输入example.dev、example2.dev,都能直接访问对应的虚拟主机了!
额外注意事项
- 确保Mac防火墙允许HTTP请求:打开「系统设置」→「隐私与安全性」→「防火墙」→「防火墙选项」,添加
httpd(Apache进程)并允许它接收外部连接。 - 如果USB共享IP经常变化,可以给Mac的「iPhone USB」接口设置静态IP:在「系统设置」→「网络」→「iPhone USB」→「详细信息」→「TCP/IP」,选择「手动」,设置固定IP比如
172.20.10.10,子网掩码255.255.255.240,这样就不用每次改dnsmasq配置了。 - 你提到的
.dev后缀问题确实要注意,后续换成.test或者.local会更稳妥,避免和公共DNS的真实.dev域名冲突。
内容的提问来源于stack exchange,提问作者wlo

