只有一个 Apache 虚拟主机配置生效

只有一个 Apache 虚拟主机配置生效

我在 Ubuntu 14.04 的安装上使用 Apache 2.4,并且正在配置 Apache“虚拟主机”,以便能够为不同的主机名提供不同的内容。

我正在尝试配置 Apache,以便当有人尝试使用主机名访问服务器时(www.)example1.com,将提供来自的内容/var/www/example1;但是,如果有人尝试使用其 IP 地址或除之外的任何其他主机名访问服务器(www.)example1.com(例如,通过 IP 直接访问它,或通过指向该 IP 的任何其他主机名访问它),/var/www/html则将提供来自的内容。

我在以下位置有以下配置文件/etc/apache2/sites-available

/etc/apache2/sites-available/example1.conf

<VirtualHost example1.com:80>
    DocumentRoot /var/www/example1
    ServerAlias www.example1.com
    ErrorLog ${APACHE_LOG_DIR}/ex1_error.log
    CustomLog ${APACHE_LOG_DIR}/ex1_access.log combined
</VirtualHost>

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

但是,当我尝试通过直接访问或通过指向此 IP 的其他主机名访问该网站时,我获得来自/var/www/example1而不是来自提供的内容/var/www/html

这可能是什么问题?我该如何解决?

答案1

在 2.4 版中使用_default_

<VirtualHost _default_:*>
     DocumentRoot /var/www/html
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

答案2

您可以用它alias *来捕获任何其他请求,但它必须是最后一个虚拟主机。

针对你的情况,你可以这样做:

重命名并编辑 /etc/apache2/sites-available/000-example1.conf:

<VirtualHost *:80>
    DocumentRoot /var/www/example1
    ServerName www.example1.com
    ErrorLog ${APACHE_LOG_DIR}/ex1_error.log
    CustomLog ${APACHE_LOG_DIR}/ex1_access.log combined
</VirtualHost>

重命名并编辑 /etc/apache2/sites-available/001-default.conf:

# /!\ THIS HAS TO BE ON THE LAST POSITION /!\
<VirtualHost *:80 *:443>
ServerName localhost
ServerAlias *
DocumentRoot /var/www/html/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

您甚至可以重命名001-default.conf100-default.conf,这样下次您将有一个新的虚拟主机,如002-newhost1.conf, 003-newhost2.conf, etc默认将停留在最后一个位置,并且永远不会接受“任何其他”请求。

相关内容