web/apache2/ VirtualHosts


This stackoverflow question contains something important that isn't obvious and would take a lot of doc-diving to find. The TL;DR is that apache2 uses the ServerName to distinguish virtual hosts, not the FQDN at the top.

If you have some virtual hosts whose config looks like:

<VirtualHost *:80>
...
  ServerName myserver1

but you have at least one config that looks like:

<VirtualHost server2:80>
...
  ServerName server2

then the non-wildcard config takes precedence over all the wildcard hosts. So for every virtual host, apache2 stops with the first <VirtualHost server2:80> that matches the incoming server address. So e.g. if in your hosts you have

127.0.0.1 myserver1 server2

then the <VirtualHost server2:80> will match for anything local. Thus you must make sure that the top line of every config is of the form

<VirtualHost *:80>

as even a single config that is not *:80 will screw things up.