简体   繁体   English

Apache 指向错误的 vhost conf 文件

[英]Apache points to wrong vhost conf file

I have a fresh VPS on Ubuntu 18. Have installed only PHP and Apache.我在 Ubuntu 18 上有一个新的 VPS。只安装了 PHP 和 Apache。 Created only a one vhost config:只创建了一个虚拟主机配置:

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

After apache realod, the domain is pointing to default folder /var/www/html instead of my /var/www/app在 apache realod 之后,域指向默认文件夹/var/www/html而不是我的/var/www/app

000-default.conf is default: 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 outputs: 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

When pointing a new domain to this server - works perfect.将新域指向此服务器时 - 完美无缺。 But this "default domain" is always pointing to default folder.但是这个“默认域”总是指向默认文件夹。 Disabling 000-default.conf helps but I don't want do that.禁用 000-default.conf 有帮助,但我不想这样做。

Apache selects the virtual host as described in the documentation . Apache 按照文档中的描述选择虚拟主机。

Considering the vhost selection process your options are:考虑到 vhost 选择过程,您的选择是:

  1. Disable the default vHost, you don't need it.禁用默认的 vHost,你不需要它。
  2. Really.真的。 Why would you want to keep it?为什么要保留它?
  3. Change the default vHost declaration to <VirtualHost *> .将默认的 vHost 声明更改为<VirtualHost *> Therefore making the other vHost the default for requests targeted at port 80.因此,将另一个 vHost 设为针对端口 80 的请求的默认值。
  4. Add your servers ip address to your vhost declaration.将您的服务器 IP 地址添加到您的 vhost 声明中。 ( <VirtualHost 1.2.3.4:80> ) It will then take precedence over the default vhost *:80 for requests targeted at that IP-address. ( <VirtualHost 1.2.3.4:80> ) 然后,对于针对该 IP 地址的请求,它将优先于默认的 vhost *:80 Note that requests to other to other IPs of your server will still be served by the *:80 -vHost.请注意,对您服务器的其他 IP 的其他请求仍将由*:80 -vHost 提供服务。
  5. Set DocumentRoot /var/www/app inside your default vHost.在默认虚拟主机中设置DocumentRoot /var/www/app This will require you to make configuration changes in multiple vHost each time and thus increases the chance of making mistakes.这将要求您每次在多个 vHost 中进行配置更改,从而增加出错的机会。

The virtual host defined at 000-default.conf doesn't have a ServerName directive so it inherits the value from its parent container (in this case the main server settings) and I presume such directive also has vp123.ovh.net as value.000-default.conf中定义的虚拟主机没有ServerName指令,因此它从其父容器(在本例中为主服务器设置)继承值,我认为此类指令也将vp123.ovh.net作为值。 Thus Apache considers the first virtual host matches.因此 Apache 认为第一个虚拟主机匹配。

A ServerName should be specified inside each <VirtualHost> block.应该在每个<VirtualHost>块内指定一个ServerName If it is absent, the ServerName from the "main" server configuration will be inherited.如果不存在,则将继承“主”服务器配置中的ServerName

Since you want to use that name elsewhere a possible solution is to set a explicit value that doesn't interfere, eg:由于您想在其他地方使用该名称,因此可能的解决方案是设置一个不会干扰的显式值,例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM