What is the difference between *:80 and _default_:80 in Apache2?

I'm trying to understand the difference between the following two terms:

*:80
_default_:80

in the Apache configuration file. The documentation here is unclear to me, and the only mailing list conversation that I could find here does not shed any (comprehensible, to me) light on the matter either.

I have a bunch of name-based virtual hosts declared like this:

<VirtualHost *:80>
    ServerName example.com
    ...

and I'd like to have an entry that fires when none of those match, i.e. when a request comes in without a virtual host name, or with a virtual host name that has not been declared. Should I use *:80 or _default_:80?


Solution 1:

I think that _default_ is used to define a default vhost in an IP based virtual host configuration. You are using name based virtual hosting so this statement in the documentation

A default vhost never serves a request that was sent to an address/port that is used for name-based vhosts.

becomes relevant.

In a name based virtual host configuration the first vhost defined is the default vhost and it will be served if no other match is found so you could do something simple like

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/default
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName sub.example.com
    DocumentRoot /var/www/sub.example.com
</VirtualHost>

Would do what you want and serve everything except example.com and sub.example.com from the default.