Welcome to the Linux Foundation Forum!

7.11 ServerName _default_

It says on 7.11 that ServerName _default_ can be used. However, the HTTPD documentation says that _default_ is for use in <VirtualHost>, not ServerName. Is the HTTPD documentation wrong or the course?


  • lee42x
    lee42x Posts: 380

    Thank you for your input.

    The Apache documentation is not incorrect but the default can indeed show up in either "ServerName" or in "".
    In the case of , "default" and "*" are referring to the address or DNS hostname that we are listening to. The httpd will sort through the list of addresses looking for the best match and use the configuration in that stanza, using the "_default_ " as the last choice. We can see this case in: https://httpd.apache.org/docs/2.4/vhosts/examples.html

    Now in the case where you may have many aliases on a single ip address, you can discriminate by "ServerName" in the stanza to select the correct configuration. When doing this type of selection, by host name in the URL, sometimes the order the name virtual hosts are processed can select the incorrect default/base configuration so one can set the stanza to be used if no name match occurs with the "ServerName default". This is covered in the the Apache Documentation here: https://httpd.apache.org/docs/2.4/vhosts/details.html

    I hope this helps.

  • seidler
    seidler Posts: 6

    Well, the links you quote never refer to _default_ being used as a parameter to ServerName. Also, It seems that these haven't been brought up to date with the actual code, because in 2.4, the _default_ special meaning was revoked, the docs state:

    The string default, which is an alias for *

    And I just tested this, and the token _default_ doesn't seem to have any effect in either VirtualHost or ServerName. Apache 2.4 on Ubuntu 18.04 always uses the first <VirtualHost> if none of the ServerName matches, it's not using the one with ServerName _default_ or <VirtualHost _default_:80>.

    Please test for yourself and see if you come to a different conclusion.

  • lee42x
    lee42x Posts: 380

    I was looking at the section: "Any vhost that includes the magic default wildcard is given the same ServerName as the main server."
    As you mentioned if no default is listed the server will return data from the "first" configuration it finds. By setting the default we always know what data it going to be returned. If you alter the configuration of the virtual servers you may change the "first" server. In the example below we set the default server and add a second virtualhost.

    Consider the attached configuration.

    Please let me know if you have any questions.


  • seidler
    seidler Posts: 6

    The attached configuration isn't representative of the problem. Apache will always use the first VirtualHost definition, which is where you put _default_. Just swap the two <VirtualHost> definitions in your config and tell me what you observe: is it using the first one or the one with _default_?

  • Notwithstanding the contradictory documentation (for which I have filed a bug with the ASF bug tracker), I still do not find any reference to _default_ being used in the ServerName statement, apart from blog entries and StackOverflow questions, both of which I do not see as official documentation.

    And in fact, there is only a single relevant occurrence of it in the httpd code, which is here: https://github.com/apache/httpd/blob/ba356520d82d3c226fc427c57ba821507fc5aa9a/server/vhost.c#L190 and it says the same: it can be used in <VirtualHost>, but it is equivalent to *.

    I'm sorry that I'm going on about this so much, but as a Sysadmin with >15 years of experience I fear that if I will be graded in the exam as I'm being taught in the course, it'll be a bit of a problem in such a case.

  • lee42x
    lee42x Posts: 380

    I took your advice and switched the order of the virtual hosts. You are correct. The default virtual host has to be the first definition. This will be corrected and clarified in the course material.

  • Thanks.


Upcoming Training