Apache:通过 URL 输入其中一个虚拟主机

Apache:通过 URL 输入其中一个虚拟主机

通过输入我的公共 IP,浏览器将显示来自此目录的页面:/var/www/html。

我在 /var/www/host1 和 /var/www/host2 中有 2 个虚拟主机。通过在浏览器的地址栏中本地输入“host1.server1”或“host2.server1”,它将打开其中一个页面。

我的问题是:如何从我的公共 IP 输入这些内容?“12.34.56.78~/host1.server1”?

答案1

通过浏览 IP,从站点启用文件夹中按字母顺序选择第一个。

答案2

您可以使用 IP 地址作为服务器名称并指向“/var/www”文件夹来创建新的附加虚拟主机。然后访问您的文件夹应该很简单,例如 12.34.56.78/host1 和 12.34.56.78/host2 例如,在我的 apache2 httpd-vhosts.conf 中,我有以下内容:

<VirtualHost *>
    DocumentRoot /var/www/
    ServerName 12.34.56.78
    ErrorLog logs/mydomain-error_log
    CustomLog logs/mydomain-access_log common
<Directory /var/www/>
        AllowOverride All
        Order allow,deny
        Options -Indexes FollowSymLinks ExecCGI
        Allow from all
</Directory>
</VirtualHost>

或者,您可能想要使用基于名称的托管(假设您有一个域)将 host1.domain 和 host2.domain 指向同一个 IP 地址,并在 apache 配置中将这些主机名添加为服务器别名。

答案3

听起来您正在使用基于名称的虚拟主机(即 Apache 查看来自浏览器的请求中的主机名并使用它来确定哪个虚拟主机应该为该特定请求提供服务)。

在这种情况下,您可以使用 hosts 文件将相关主机名指向您的公共 IP(这实际上取代了 DNS,当您不想进行 DNS 更改或不想等待 DNS 更改生效时,它对于测试站点非常方便)。在 Windows 中,hosts 文件位于 c:\windows\system32\drivers\etc\hosts,在 linux 中位于 /etc/hosts。文件的格式很简单(只需查看文件中的示例即可理解)。

您可以在将主机名添加到 hosts 文件后 ping 主机名,并确认 ping 显示的 IP 地址就是您在 hosts 文件中输入的 IP 地址,以此来验证主机条目是否正常工作。

请记住,使用 hosts 文件仅对您编辑了 hosts 文件的特定计算机有效,所以就像我说的那样,如果您需要测试某些东西,它很有用,但对其他计算机它根本不会做任何事情。

或者,您可以在 Apache 配置中为每个虚拟主机添加不同的套接字绑定。例如,您可以让所有 NameVirtualHosts 监听 *:80,但您也可以为每个虚拟主机添加第二个端口,例如 *:81、*:82 等。这样,您可以通过 http://:81 访问这些网站。

因为您说过要通过公共 IP 访问网站,所以我假设服务器本身有一个私有 IP(即 RFC 1918 网络),并且您正在使用路由器/防火墙上的端口转发将公共 IP 上的端口 80 转发到私有 IP 上的端口 80。在这种情况下,您可能无法从另一个内部主机浏览到公共 IP,而必须通过其私有 IP 寻址服务器,这取决于您的路由器/防火墙。在这种情况下,您可能需要研究水平分割 DNS,因为它将为内部主机返回服务器的私有 IP,为外部主机返回服务器的公共 IP。您可以在 Google 上了解水平分割 DNS。

相关内容