You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地虚拟主机(dnsmasq、Apache)无法访问问题求助

本地.dev域名Web环境无法访问排查求助

几个月前我搭建了本地Web开发环境,之前一切正常,但昨天突然出现异常:我可以ping通所有*.dev地址,比如:

➜ ping -c 1 home.dev
PING home.dev (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.049 ms
--- home.dev ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.049/0.049/0.049/0.000 ms

但在浏览器中输入地址时,仅显示错误提示:This site can’t be reached home.dev refused to connect。我已多次重启电脑、dnsmasq和Apache,重复了搭建指南的所有步骤,还尝试了其他配置方案,但均无效果,恳请大家提供排查思路。


我的配置信息

1. http-vhosts.conf 文件内容

<Directory "/www">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Virtualhost *:80>
VirtualDocumentRoot "/www/home/wwwroot"
ServerName home.dev
UseCanonicalName Off
</Virtualhost>
<Virtualhost *:80>
VirtualDocumentRoot "/www/sites/%1/wwwroot"
ServerName sites.dev
ServerAlias *.dev
UseCanonicalName Off
</Virtualhost>
<Virtualhost *:80>
VirtualDocumentRoot "/www/sites/%-7+/wwwroot"
ServerName xip
ServerAlias *.xip.io
UseCanonicalName Off
</Virtualhost>

2. 本地目录结构

/www
  home
    wwwroot
      index.html (...)
  sites
    sites
      test
        wwwroot
          index.html (...)

3. httpd -S 命令输出

➜ httpd -S
[Mon Jan 15 16:53:36.655895 2018] [so:warn] [pid 31755] AH01574: module php7_module is already loaded, skipping
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using olivetum.local. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:80 is a NameVirtualHost
	default server home.dev (/private/etc/apache2/extra/httpd-vhosts.conf:7)
	port 80 namevhost home.dev (/private/etc/apache2/extra/httpd-vhosts.conf:7)
	port 80 namevhost sites.dev (/private/etc/apache2/extra/httpd-vhosts.conf:13)
		wild alias *.dev
	port 80 namevhost xip (/private/etc/apache2/extra/httpd-vhosts.conf:20)
		wild alias *.xip.io
ServerRoot: "/usr"
Main DocumentRoot: "/Library/WebServer/Documents"
Main ErrorLog: "/private/var/log/apache2/error_log"
Mutex default: dir="/private/var/run/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/private/var/run/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="_www" id=70 not_used
Group: name="_www" id=70 not_used

4. dig home.dev @127.0.0.1 命令输出

➜ dig home.dev @127.0.0.1
;; QUESTION SECTION:
;home.dev.		IN	A
;; ANSWER SECTION:
home.dev.	0	IN	A	127.0.0.1

排查思路建议

结合你的情况,我整理了几个优先级较高的排查方向,你可以逐一尝试:

  • 先确认Apache是否真的在监听80端口:执行 lsof -i :80 或者 netstat -an | grep LISTEN | grep :80,看看有没有httpd进程在监听。如果没有,说明Apache启动失败,直接去查看错误日志 /private/var/log/apache2/error_log,里面会有具体的失败原因(比如端口被其他服务占用、配置语法错误)。
  • 检查虚拟主机配置语法:执行 apachectl configtest,这个命令会帮你检测Apache配置文件的语法问题,哪怕是小错误比如括号不匹配、路径写错都会被揪出来。另外你之前httpd -S里有个php7模块重复加载的警告,建议去httpd.conf里检查下是不是重复写了LoadModule php7_module,把警告修复掉避免潜在问题。
  • 验证网站目录权限:从httpd -S输出看到Apache运行用户是_www,你需要确保/www及其子目录、文件的权限允许_www读取。可以执行 chown -R _www:_www /www 或者 chmod -R 755 /www,权限不足经常会导致Apache无法正常解析文件。
  • 直接访问IP测试基础服务:在浏览器输入http://127.0.0.1,如果能看到Apache默认页面或者你的home.dev内容,说明Apache本身没问题,问题出在域名匹配或浏览器层面;如果不能访问,那重点排查Apache的基础运行问题。
  • 排查浏览器的HTTPS强制跳转:这里有个很容易忽略的点——.dev现在是正式的顶级域名,主流浏览器会自动把.dev域名强制跳转到HTTPS,但你只配置了80端口的HTTP虚拟主机,没有配置443端口的SSL服务,所以浏览器会提示连接被拒绝。你可以试试在浏览器里明确输入http://home.dev(加上http://前缀),或者临时把域名后缀改成.test来测试,看看能不能正常访问。
  • 清空DNS缓存:虽然ping和dig都正常,但浏览器或系统的DNS缓存可能有残留,试试清空浏览器DNS缓存(比如Chrome里输入chrome://net-internals/#dns点击清空),或者执行系统级缓存清空命令:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。

内容的提问来源于stack exchange,提问作者olivetum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:16:49