我正在阅读一本有关 Ubuntu Server 的书,在连接好所有网络、DHCP、DNS、NTP 等之后,我们就需要创建一个 apache2 网络服务器了。
我遵循了所有的指示,但当我们到达多虚拟主机部分,我似乎无法让它工作。
由于只有一个网络接口,我选择了基于命名的虚拟主机我将列出我所有的 DHCP、DNS 和 Apache2 配置,以便每个人都能轻松找出问题所在。
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
网站
对于网站配置,我创建了一个名为的文件000-virtual-hosts.conf
,其中包含我想要工作的虚拟主机的配置。
/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
你可以说我菜鸟,但我不知道它不起作用的原因是否因为我不拥有mywebsite.com
和myotherwebsite.com
域名,但我认为它会遵循书中的示例,并且将通过端口 80 专门请求域名,并在这篇文章中进一步添加对我的服务器 IP 的解析,无论我是否拥有域名,它都是本地的。我认为可能是因为它们指向同一个/var/www/html
文件,这可能是问题所在。我在尝试使其工作之前启用了它们,sudo a2ensite 000-virtual-hosts.conf
&& sudo systemctl reload apache2
。
书中曾写道:“如果您使用带有虚拟主机的域名,那么这只有在您设置网络使得文件中引用的域名解析为您服务器的 IP 地址时才会起作用。 [...] 如果您正在运行自己的 DNS 服务器,则可以在那里添加 A 记录。“因此我添加了此行/etc/bind/net.local.lan
并更新了serial
数字,否则 DNS 将不会接受新主机。
mywebsite.com IN A 192.168.1.247
但我认为问题是我真的不知道自己在做什么/做错了什么。
这是捕获的日志/var/log/apache2/error.log
,我不知道这些日志是否包含连接失败,mywebsite.com
因为它们应该是默认.conf
文件的,但我愿意与你分享它们,以防你需要它们。
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.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,因为书中写道:“任何进入服务器请求“mywebsite”的流量都将提供给 /var/www/mywebsite,第二个示例查找来自“myotherwebsite”的流量并将点击定向到 /var/www/myotherwebsite“。
/etc/apache2/sites-enabled
并禁用了获取服务器 IP 的默认文件。
现在显示了新的页面,但是当我键入mywebsite
或mywebsite.local.lan
找不到它但可以IP:80
工作时,它并没有什么区别。
我仍然不知道如何打字mywebsite
并访问本地页面。
dig 命令的结果
我的网站.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
我从网络上的另一台计算机获得了几乎相同的输出,只是udp
数字发生了变化。
答案1
根据您发布的配置,您的 DNS 服务器没有任何指向 Apache 网络服务器的记录mywebsite.com.
-myotherwebsite.com.
它甚至没有为这些名称配置匹配的区域 - 因此它所做的就是将查询转发到“上游”服务器(8.8.8.8,等等)。
目前 DNS 服务器仅设置为托管一个域 – 您有zone "local.lan" {..}
,因此一切指定区域文件中的记录假定位于“ local.lan
”域下。该文件中的任何“区域外”记录都将被拒绝。
区域文件条目mywebsite.com IN A ...
不会创建域“mywebsite.com”——由于缺少结尾,.
它会自动附加 $ORIGIN,因此就像“lenovo”条目变成“lenovo.local.lan.”一样,“mywebsite.com”条目变成“mywebsite.com.local.lan”。(这就是为什么它没有被 BIND 直接拒绝为区域外名称的原因)。
(由于您的 DHCP 服务器广播option domain-name "local.lan"
,一些当用户输入“http://mywebsite.com/”时,客户端设备将尝试查找“mywebsite.com.local.lan”,但大多数客户端设备不会这样做 - 如果用户输入已经至少有一个点,则不会附加 DHCP 提供的域后缀。这意味着,您的“local.lan”区域中的条目永远不会被查询。)
为了使 BIND 回答域名“mywebsite.com”,您实际上需要一个与zone{}
该域名匹配的条目,例如zone "com"
或zone "mywebsite.com"
,并具有自己的区域文件。
(或者,BIND 的 RPZresponse-policy{}
机制可用于欺骗各个域的回复,而无需为每个域创建单独的区域。)