skip to Main Content

I have a fresh VPS on Ubuntu 18. Have installed only PHP and 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

000-default.conf is default:

<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:

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.

2

Answers


  1. Apache selects the virtual host as described in the documentation.

    Considering the vhost selection process your options are:

    1. Disable the default vHost, you don’t need it.
    2. Really. Why would you want to keep it?
    3. Change the default vHost declaration to <VirtualHost *>. Therefore making the other vHost the default for requests targeted at port 80.
    4. Add your servers ip address to your vhost declaration. (<VirtualHost 1.2.3.4:80>) It will then take precedence over the default vhost *:80 for requests targeted at that IP-address. Note that requests to other to other IPs of your server will still be served by the *:80-vHost.
    5. Set DocumentRoot /var/www/app inside your default vHost. This will require you to make configuration changes in multiple vHost each time and thus increases the chance of making mistakes.
    Login or Signup to reply.
  2. 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. Thus Apache considers the first virtual host matches.

    A ServerName should be specified inside each <VirtualHost> block. If it is absent, the ServerName from the “main” server configuration will be inherited.

    Since you want to use that name elsewhere a possible solution is to set a explicit value that doesn’t interfere, e.g.:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www/html
    </VirtualHost>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search