开发Web项目的时候,程序员通常喜欢通过修改本地的/etc/hosts
来把项目的域名指向本机的服务器。比如 next-big-project.dev 指向 127.0.0.1 。随着项目的增加,本机的hosts文件里很快就会加入很多的项目记录。有意思的是还有人专门注册了顶级域名并把它们指向了 127.0.0.1 。比如localhost.com
!真是活雷锋啊,专门利人。
当然更好的办法是能有个属于自己的DNS服务器,那就更方便了。DNSMasq正是满足了开发人员的这个需求。大致了流程如下:
- 安装DNSMasq,并配置要解析的顶级域
- 配置Mac OS的DNS解析,对指定的域名使用上一步安装的本地DNSMasq服务进行解析
安装DNSMasq
通过brew来安装DNSMasq服务当然是最方便的:
# Update your homebrew installation
brew up
# Install dnsmasq
brew install dnsmasq
配置一个你想要进行本地解析的顶级域名TLD,这里以dev
为例。
我要修改的文件是/usr/local/etc/dnsmasq.conf
, 如果你是用valet可能这个配置文件位于~/.config/valet/dnsmasq.conf
。文件内容如下:
address=/.dev/127.0.0.1
listen-address=127.0.0.1
如果有多个顶级域名TLD要加入,可以添加多条address=…记录。
修改好dnsmasq.conf文件后,重启一下brew管理的dnsmasq服务。命令是sudo brew services restart dnsmasq
。
配置Mac OS使用DNSMasq进行DNS解析
在目录/etc/resolver
下,重建一个与顶级域名相同的文件。本例子里就是 /etc/resolver/dev
。
打开这个文件输入这个域名的解析DNS服务器。内容如下:
nameserver 127.0.0.1
这是运行scutil --dns
命令,应该已经能看到对应的域的解析服务器是127.0.0.1了。
OK, 现在进行验证一下结果
首先我们清除一下Mac的DNS缓存:sudo killall -HUP mDNSResponder
然后使用dig命令,看看DNSMasq对这个域名的解析记录。比如: dig next-big-project.dev @127.0.0.1
最后还可以用ping来看一下,网络请求是不是已经从本地返回了。ping next-big-project.dev
不知道有没有更方便的类似工具能做同样的事情,欢迎推荐。