自建DNS环境下Apache2基于名称的虚拟主机无法正常工作的求助
大家好,我正在读一本关于Ubuntu Server的书,已经把网络、DHCP、DNS、NTP这些组件都配置好了,现在卡在Apache2虚拟主机这一步——基于名称的虚拟主机怎么都跑不起来。我只有一块网卡,所以选的是基于名称的方案,下面把所有相关配置都贴出来,麻烦帮我看看哪里出问题了!
DHCP配置
我的DHCP配置文件是/etc/dhcp/dhcpd.conf,内容如下:
default-lease-time 43200; max-lease-time 86400; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option domain-name "local.lan"; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.240; option routers 192.168.1.1; option domain-name-servers 192.168.1.1; }
DNS配置
全局选项文件 /etc/bind/named.conf.options
options { forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-validation auto; listen-on-v6 { any; }; };
本地域配置 /etc/bind/named.conf.local
zone "local.lan" IN { type master; file "/etc/bind/net.local.lan"; };
域记录文件(初始版本)/etc/bind/net.local.lan
$TTL 1D @ IN SOA local.lan. exampleemail.local.lan. ( 202212152; serial 8H ; refresh 4H ; retry 4W ; expire 1D ) ; minimum IN A 192.168.1.1 ; @ IN NS lenovo.local.lan. lenovo IN A 192.168.1.1 #my server
Apache2虚拟主机配置
我创建了/etc/apache2/sites-available/000-virtual-hosts.conf来配置虚拟主机,内容如下:
<VirtualHost *:80> ServerName mywebsite.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/mywebsite_error.log CustomLog ${APACHE_LOG_DIR}/mywebsite_access.log combined </VirtualHost> <VirtualHost *:80> ServerName myotherwebsite.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/myotherwebsite_error.log CustomLog ${APACHE_LOG_DIR}/myotherwebsite_access.log combined </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我已经执行了启用命令:sudo a2ensite 000-virtual-hosts.conf && sudo systemctl reload apache2,而且也把默认的站点配置禁用了。
问题排查过程
一开始我怀疑是不是因为我没实际拥有mywebsite.com和myotherwebsite.com这两个域名,但按照书里的例子,我以为只要本地能解析到服务器IP就能正常工作。另外我也想过是不是两个虚拟主机都指向同一个/var/www/html目录导致的问题?
后来看到书里说:“如果虚拟主机用了域名,必须确保域名能解析到服务器IP……如果自己跑DNS服务,就要添加对应的A记录”,于是我在/etc/bind/net.local.lan里加了一条记录并更新了序列号:
mywebsite.com IN A 192.168.1.247
但还是不行,我感觉自己可能哪里理解错了,完全摸不着头脑。
Apache错误日志
/var/log/apache2/error.log里的日志:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message [Fri Dec 16 01:32:24.187718 2022] [mpm_event:notice] [pid 32022:tid 139897582640192] AH00489: Apache/2.4.41 (Ubuntu) configured -- resuming normal operations
后续修改尝试
我后来修改了/etc/bind/net.local.lan(之前笔误写成net.local.net),更新后的内容:
$TTL 1D @ IN SOA local.lan. exampleemail.local.lan. ( 202212154; serial 8H ; refresh 4H ; retry 4W ; expire 1D ) ; minimum IN A 192.168.1.1 ; @ IN NS lenovo.local.lan. lenovo IN A 192.168.1.1 mywebsite IN A 192.168.1.247 myotherwebsite IN A 192.168.1.247
现在用IP访问80端口能看到页面,但输入mywebsite或者mywebsite.local.lan都找不到站点,完全不知道怎么通过域名访问本地页面。
Dig命令查询结果
查询 mywebsite.local.lan
; <<>> DiG 9.16.1-Ubuntu <<>> mywebsite.local.lan ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 17696 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;mywebsite.local.lan. IN A ;; Query time: 4 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Wed Dec 21 12:02:17 PST 2022 ;; MSG SIZE rcvd: 48
查询 myotherwebsite.local.lan
; <<>> DiG 9.16.1-Ubuntu <<>> myotherwebsite.local.lan ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 59264 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;myotherwebsite.local.lan. IN A ;; Query time: 8 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Wed Dec 21 12:02:19 PST 2022 ;; MSG SIZE rcvd: 53
网络里另一台电脑执行dig命令的结果也差不多,只是udp数值不一样。
备注:内容来源于stack exchange,提问作者Jimmy

