本地 DNS - 将子域重定向到 apache2 中的不同虚拟主机

本地 DNS - 将子域重定向到 apache2 中的不同虚拟主机

我在 apache 2.4 中设置了三个虚拟主机,其中包含以下条目:

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ServerName www.xx.de
</VirtualHost>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/sh/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ServerName sh.xx.de
</VirtualHost>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/nc/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ServerName n.xx.de
</VirtualHost>

可以通过互联网和本地网络进行访问。但如果我在本地网络中,我想将查询重定向到本地 IP,而不是外部 IP。 DNS 与 apache 位于同一设备上。我已经尝试使用 dnsmasq 来解析xx.de本地 IP 192.168.0.55xx.de/sh/例如,如果我使用的话,这是可行的。但sh.xx.de不起作用。

答案1

DNS 仅将 IP 地址映射到主机名(反之亦然),而不将其映射到 URL

一个 URL 由 3 *部分组成,我们来看一下http://example.com/foo:

  1. 一个方案,例如http:
  2. 主机,例如 example.com
  3. 路径例如 /foo

因此,当您计算机上的浏览器请求时http://example.com/fooDNS 会将 example.com 转换为 IP 地址。然后,计算机将使用该 IP 地址通过默认方案端口(80 表示 http)连接到远程计算机。

连接后,它将发出 HTTP 请求(例如 GET /foo),并且作为请求的一部分,它将包含 HTTP主持人标头。该标头告诉 HTTP 服务器浏览器在 DNS 中查找哪个主机名。然后,这允许 HTTP 服务器将请求映射到正确的位置虚拟主机

听起来您需要在 IP 地址为 192.168.0.55 的计算机上设置 3 个虚拟主机。

  1. 一个用于 a.xx.com
  2. b.xx.com 的一份
  3. 托管实际 /aaaa 和 /bbbb 目录的默认虚拟主机(覆盖原始 IP 地址 192.168.0.55)

前两个应该重定向到第三个托管的正确路径。

*可以有更多部分(例如用户/密码、端口和查询),但这对于本例来说已经足够了

相关内容