尝试使基于名称的虚拟主机在 apache2 上运行,但自托管 DNS 不起作用

尝试使基于名称的虚拟主机在 apache2 上运行,但自托管 DNS 不起作用

我正在阅读一本有关 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.commyotherwebsite.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 的默认文件。

现在显示了新的页面,但是当我键入mywebsitemywebsite.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{}机制可用于欺骗各个域的回复,而无需为每个域创建单独的区域。)

相关内容