如何使用 3 个站点设置 Apache:两个基于名称的虚拟主机,一个通过 IP 地址

How to set up Apache with 3 sites: Two name based virtual hosts and one via the IP address

我已经有 2 个站点链接到域。

为此,我将 2 个 conf 文件放入 /etc/apache2/sites-available/:

<domain1>.conf
<domain2>.conf

DocumentRoot /var/www/domain1DocumentRoot /var/www/domain2

此外,我需要设置第 3 个站点直接链接到服务器 IP。

为此我创建了 conf 文件: IP.conf(IP为服务器IP):

<VirtualHost *:80>
    ServerAdmin <email>
    ServerName <IP>
    ServerAlias <IP>
    DocumentRoot /var/www/html/wordpress
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

运行:

sudo a2ensite <IP>.conf

并且:

restart apache service.

但这并没有帮助。

请问如何配置路由?

问题是默认的 Apache 配置总是使用服务器的 IP 地址。这样 IP.conf 将永远不会被加载。

您需要编辑位于 sites-available 中的默认 Apache 配置以进行更改。

查看您的配置,您正在指示 ServerNameServerAlias 的原始 IP 地址,这将有效地破坏设置基于名称的虚拟主机的目的:

<VirtualHost *:80>
    ServerAdmin <email>
    ServerName <IP>
    ServerAlias <IP>
    DocumentRoot /var/www/html/wordpress
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

在这种情况下,配置将被忽略,因为默认的 Apache 设置将始终遵循您所在机器的 IP 地址。哎呀,如果您的服务器有多个 IP 地址,它甚至会使用所有网络接口。

要使基于名称的虚拟主机正常工作,您必须在您的配置中使用domain/host名称。 domain1 这样的事情:

<VirtualHost *:80>
    ServerAdmin <email>
    ServerName <domain1>
    ServerAlias <domain1>
    DocumentRoot /var/www/domain1
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这是 domain2

<VirtualHost *:80>
    ServerAdmin <email>
    ServerName <domain2>
    ServerAlias <domain2>
    DocumentRoot /var/www/domain2
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

现在对于 IP 地址主机配置,您应该进入 Apache 配置目录 — Debian/Ubuntu 上的 /etc/apache2/ 或 CentOS/RedHat 上的 /etc/httpd/ — 然后查看sites-available 目录。应该有一个名为 000-default.conf:

的文件
/etc/apache2/sites-available/000-default.conf

并在那里进行 IP.conf 中显示的更改。在最基本的层面上,只需将 DocumentRoot 更改为:

DocumentRoot /var/www/html/wordpress

然后重新启动 Apache,它应该会按预期工作。