有没有办法在 Apache 虚拟主机的 URL 中传递主机:值标头?

有没有办法在 Apache 虚拟主机的 URL 中传递主机:值标头?

我的 Ubuntu 20.04 计算机上有两个虚拟主机网站,位于常规 Apache2 文档根目录之外。我可以在同一台计算机上的浏览器中正常访问它们。

我也试图用手机通过内联网访问这些虚拟主机网站,但是无法访问。

我目前没有办法安全地编辑我手机的主机文件,我认为这才是真正解决此问题的方法。

有没有办法在手机浏览器的 URL 中传递 host:value 标头?

我在想类似的事情:http://host:[电子邮件保护]

现在,当我输入以下命令时,我在手机浏览器上所能获得的只是 Apache 的文档根目录:http://192.168.0.10

以下是我在计算机上设置虚拟主机的方法,以防我的设置可以更改,从而允许我的手机通过我的内联网访问这些虚拟主机。

000-default.conf file:
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
    ServerName websiteA
    DocumentRoot "/home/user/websiteA"
    <Directory /home/user/websiteA>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName websiteB
    DocumentRoot "/home/user/websiteB"
    <Directory /home/user/websiteB>
        Require all granted
    </Directory>
</VirtualHost>

hosts file:
127.0.0.1 websiteA
127.0.0.1 websiteB

如果没有在 URL 中包含标头的方法,那么我想我可以在 Apache 文档根目录中放置一个索引页,该索引页可以对 192.168.0.10 进行 ajax 调用,其中包含 host:websiteA 标头或 host:websiteB 标头。我本来可以在写这个问题的时间里做到这一点,但如果能以某种方式方便地将标头插入 URL 中,那就太好了。

谢谢你!

答案1

我还没有找到在 URL 中传递标头(主机:值)的方法,但这里有一些替代解决方案,用于通过内联网从只能使用 IP 地址访问服务器的手机浏览器访问 apache 服务器上的 apache 虚拟主机:

  1. 使用基于端口的虚拟主机。手机浏览器可以在 URL 中指定端口: http://192.168.0.10:80http://192.168.0.10:81http://192.168.0.10:82访问3个不同的虚拟主机。
<VirtualHost *:80>...
<VirtualHost *:81>...
<VirtualHost *:82>...

在 ports.conf 文件中:

Listen 80
Listen 81
Listen 82
  1. 使用基于IP的虚拟主机,如果内网DHCP服务器不会为apache服务器分配多个IP地址,请在apache服务器上创建别名IP地址:

使用终端,其中 ifconfig 显示 apache 计算机为 enp8s0 192.168.0.110 执行以下命令(我只选择了接下来的 2 个 IP 地址,但首先确保它们未在内联网上使用):

sudo ifconfig enp8s0:0 192.168.0.111
sudo ifconfig enp8s0:1 192.168.0.112

然后在虚拟主机配置文件中通过 IP 地址定义每个虚拟主机。第一个是原始默认虚拟主机。

<VirtualHost *:80>...
<VirtualHost 192.168.0.111:80>...
<VirtualHost 192.168.0.112:80>...

这些 IP 地址不是持久的。它们可以持久化。下面是一篇关于临时和持久地为服务器创建额外 IP 地址的好文章。本文还讨论了比使用 ifconfig 进行网络管理更新的方法:

https://www.2daygeek.com/add-additional-ip-secondary-ip-ubuntu-debian/

确保使用新的虚拟主机 IP 地址设置您的 /etc/hosts 文件,以便您可以在 apache 服务器上的浏览器中按名称请求它们:

192.168.0.111   websiteA
192.168.0.112   websiteB
  1. 显然,有一种方法可以设置索引文件,将裸 IP 地址请求重定向到正确的虚拟主机。我没有探索这一点,因为上面的 1 和 2 解决方案对我来说都已经有效,但这是一种将 host:value 放入标头的间接方法。您可以在 apache 文档的“使用 ServerPath 指令”下阅读有关它的信息:

https://httpd.apache.org/docs/2.4/vhosts/examples.html

相关内容