【问题标题】:Apache points to wrong vhost conf fileApache 指向错误的 vhost conf 文件
【发布时间】:2020-05-05 03:03:19
【问题描述】:

我在 Ubuntu 18 上有一个全新的 VPS。只安装了 PHP 和 Apache。只创建了一个虚拟主机配置:

<VirtualHost *:80>
  ServerName vp123.ovh.net
  DocumentRoot /var/www/app
</VirtualHost>

在 apache realod 之后,域指向默认文件夹 /var/www/html 而不是我的 /var/www/app

000-default.conf 是默认的:

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

apache2ctl -S 输出:

VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server vp123.ovh.net (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost vp123.ovh.net (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost vp123.ovh.net (/etc/apache2/sites-enabled/vp123.ovh.net.conf:1)

ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

将新域指向此服务器时 - 完美运行。但是这个“默认域”总是指向默认文件夹。禁用 000-default.conf 会有所帮助,但我不想这样做。

【问题讨论】:

    标签: linux apache ubuntu


    【解决方案1】:

    000-default.conf 定义的虚拟主机没有ServerName 指令,所以它是inherits the value from its parent container(在这种情况下是主服务器设置),我认为这样的指令也有vp123.ovh.net 作为值。因此 Apache 认为第一个虚拟主机匹配。

    应在每个 &lt;VirtualHost&gt; 块内指定 ServerName。如果不存在,将继承“主”服务器配置中的ServerName

    由于您想在其他地方使用该名称,一个可能的解决方案是设置一个不干扰的显式值,例如:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www/html
    </VirtualHost>
    

    【讨论】:

      【解决方案2】:

      Apache 选择documentation 中描述的虚拟主机。

      考虑到虚拟主机选择过程,您的选择是:

      1. 禁用默认 vHost,您不需要它。
      2. 真的。为什么要保留它?
      3. 将默认 vHost 声明更改为 &lt;VirtualHost *&gt;。因此,将另一个 vHost 设为针对端口 80 的请求的默认设置。
      4. 将您的服务器 IP 地址添加到您的虚拟主机声明中。 (&lt;VirtualHost 1.2.3.4:80&gt;) 对于针对该 IP 地址的请求,它将优先于默认 vhost *:80。请注意,对您服务器的其他 IP 的其他请求仍将由 *:80-vHost 提供服务。
      5. 在您的默认虚拟主机中设置DocumentRoot /var/www/app。这将需要您每次在多个 vHost 中进行配置更改,从而增加出错的机会。

      【讨论】:

      • 感谢您的回答,#1,2 - 我想保留它以防我有许多域指向我的服务器并在虚拟主机时显示默认的“维护中...”页面域尚未创建。 #3 - 默认虚拟主机对我来说没问题。 #4 - 这是有效的。但是在文档中。有:如果 IP 和端口相同“Apache 将进一步比较 ServerName” - 所以应该选择 vps123.ovh.net.conf 因为它已经声明了 ServerName(而 000-default 没有)。那么为什么选择 000-default 呢? #5 - 我只想为这个虚拟主机使用 /www/app 文件夹,而不是每个虚拟主机。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2021-06-16
      • 2016-03-24
      • 2015-01-25
      • 2018-08-22
      • 2013-05-14
      • 2016-07-15
      相关资源
      最近更新 更多