我在 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.55
。xx.de/sh/
例如,如果我使用的话,这是可行的。但sh.xx.de
不起作用。
答案1
DNS 仅将 IP 地址映射到主机名(反之亦然),而不将其映射到 URL
一个 URL 由 3 *部分组成,我们来看一下http://example.com/foo:
- 一个方案,例如http:
- 主机,例如 example.com
- 路径例如 /foo
因此,当您计算机上的浏览器请求时http://example.com/fooDNS 会将 example.com 转换为 IP 地址。然后,计算机将使用该 IP 地址通过默认方案端口(80 表示 http)连接到远程计算机。
连接后,它将发出 HTTP 请求(例如 GET /foo),并且作为请求的一部分,它将包含 HTTP主持人标头。该标头告诉 HTTP 服务器浏览器在 DNS 中查找哪个主机名。然后,这允许 HTTP 服务器将请求映射到正确的位置虚拟主机。
听起来您需要在 IP 地址为 192.168.0.55 的计算机上设置 3 个虚拟主机。
- 一个用于 a.xx.com
- b.xx.com 的一份
- 托管实际 /aaaa 和 /bbbb 目录的默认虚拟主机(覆盖原始 IP 地址 192.168.0.55)
前两个应该重定向到第三个托管的正确路径。
*可以有更多部分(例如用户/密码、端口和查询),但这对于本例来说已经足够了