众所周知,HomeStead可以实现多站点的功能,但是每次都需要修改本机的hosts文件,实在是太不方便了,借助DnsAgent的域名解析功能,轻松实现多站点管理。
首先,先熟悉下HomeStead的配置文件。
HomeStead配置
在执行了init.sh之后,得到了名为Homestead.yaml的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/code
to: /home/vagrant/code
sites:
- map: homestead.test
to: /home/vagrant/code/public
databases:
- homestead
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
# zray:
# If you've already freely registered Z-Ray, you can place the token here.
# - email: foo@bar.com
# token: foo
# Don't forget to ensure that you have 'zray: "true"' for your site.
ip是虚拟机的ip地址,默认是192.168.10.10。memory是虚拟机的内存,默认是2048 (KB)。cpus是虚拟机的cpu核数,默认是单核。provider是虚拟机用什么来提供,默认是virtualbox,所以安装Homestead前要把virtualbox装好。authorize是公钥,keys是私钥,在Windows平台,可以使用git bash来生成。这里的私钥在虚拟机成功启动后,会复制虚拟机的~/.ssh/id_rsa目录下。
folders是主机与虚拟机之间的目录映射。map是主机的目录,这个短波浪线~在Windows平台是C:\Users\john,john是目前Windows登录账户的用户名。
sites是虚拟机nginx站点配置文件,每一个map-to对应一个/etc/nginx/sites-enabled/目录配置文件。map就是配置文件名,也是配置文件里的server_name项,to对应配置文件里的root项。
databases是虚拟机启动后自动生成的数据库,可以在下面添加多个数据库。
配置修改之后,执行
1
homestead provision
使配置生效。
DnsAgent
下载releases页面的压缩包,解压后有这些文件
ARSoft.Tools.Net.dll* ‘Install as Service.bat’ ‘Uninstall Service.bat’ rules.cfg DNSAgent.exe* Newtonsoft.Json.dll* options.cfg
主要是rules.cfg和options.cfg两个配置文件,接下来简单介绍下。
rules.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[
{
"Pattern": "^(.*\\.mydomain\\.com)|((.*\\.)?(yourdomain|hisdomain)\\.com)$",
"Address": "112.223.221.26"
},
{
"Pattern": "^www\\.google\\.com\\.hk$",
"Address": "www.google.com",
"NameServer": "8.8.4.4",
"CompressionMutation": true
},
{
"Pattern": "^(.*)\\.mysuffix\\.com$",
"Address": "{1}"
},
{
"Pattern": "^www\\.google\\.com\\.tw$",
"Address": "www.google.com",
"NameServer": "127.0.0.1"
},
{
"Pattern": "^www\\.google\\.co\\.jp$",
"Address": "www.google.com"
},
{
"Pattern": "^www\\.google\\.cn$",
"NameServer": "114.114.114.114"
},
{
"Pattern": "^.*\\.cn$",
"NameServer": "119.29.29.29",
"UseHttpQuery": true,
"QueryTimeout": 1000
}
]
Pattern是匹配的网址,支持使用正则表达式。
Address是解析到的ip地址或其他网址。
NameServer是DNS服务器。
options.cfg
1
2
3
4
5
6
7
8
9
10
11
{
"HideOnStart": false,
"ListenOn": "127.0.0.1:53, [::1]",
"DefaultNameServer": "119.29.29.29",
"UseHttpQuery": false,
"QueryTimeout": 4000,
"CompressionMutation": false,
"CacheResponse": true,
"CacheAge": 86400,
"NetworkWhitelist": null
}
HideOnStart是true时,软件启动之后的命令行窗口会隐藏。
ListenOn是监听的端口。
DefaultNameServer是默认DNS服务器地址。
CacheResponse是true时,会从缓存中读取解析记录
更多配置解释见官方文档。
在使用Homestead默认使用的域名是http://homestead.test,如果要是域名解析成功,需要修改电脑的hosts文件,增加一个站点就需要修改一次,很麻烦。为此,可以在rules.cfg配置文件中增加一条
1
2
3
4
{
"Pattern": "^.*\\.test$",
"Address": "192.168.10.10"
}
这条配置可以使test结尾的顶级域名都解析到192.168.10.10上,避免了多个站点配置的麻烦。另外,双击Install as Service.bat还可以将DnsAgent加入系统服务,不用每次都启动DnsAgent,修改配置后,将服务重启下就可以了。