httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier>
Subject Re: [users@httpd] Re: cgi-bin stopped working in apache ?! please help SOLVED
Date Thu, 11 Sep 2008 09:19:34 GMT
Zach Uram wrote:
> On Tue, Sep 9, 2008 at 3:54 PM, André Warnier <> wrote:
>> Just a guess :
>> 1) the new entry you have added to /etc/apache2/sites-available (and
>> sites-enabled) is called e.g. "darcs", which for some reason precedes
>> "default" in the directory.
>> 2) in the apache.conf, there is something like
>> Include /etc/apache2/sites-enabled/*
>> 3) so now, when Apache starts, it "includes" the configuration of your new
>> Virtual Host *before* it includes the "default" Virtual Host.
>> 4) as a result, the default virtual host is no longer "default", but
>> "darcs", and nothing works anymore like before.
>> (It is the new default because it is now the first defined virtual host in
>> your setup)
>> Check :
>> rename /etc/apache2/sites-available/darcs to
>> /etc/apache2/sites-available/xxx (and the same for sites-enabled), and
>> restart Apache.  Does it work again ?
>> Am I close ?
>> André
> Hi André,
> I figured it out before I read your message but yes that seems to be
> what happened. I have removed the other terms from
> /etc/apache2/sites-available/darcs in ServerAlias so it now has:
> <VirtualHost *:80>
>        ServerName
>        ServerAlias
>        DocumentRoot /var/www/darcs
> </VirtualHost>
> I restarted apache and it works. Someone had recommended I add those
> terms to ServerAlias and that is what screwed me up. This was the
> first time I setup a virtual host so I must be careful what *advice* I
> apply :-) BTW by ServerName it is the subdomain (ie.
> and then what is the difference exactly
> between that and ServerAlias?
In your above configuration, the ServerAlias is totally unnecessary, 
since it is the same as the ServerName.
You would only need ServerAlias if that same virtual server could/should 
be accessed using different (valid DNS) hostnames, like
(all of these names in DNS pointing to the same IP address of your server).

Apart from the related tip from Kris about the various virtual server 
config files in /etc/apache2/sites-available and 
/etc/apache2/sites-enabled, here is what I do to insure that virtual 
servers are "included" in the correct order :

# Include the "Generic" site definitions
Include /etc/apache2/sites-enabled/.Generic

NameVirtualHost *:80

# Include the "default server" site definitions
Include /etc/apache2/sites-enabled/.default

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]*

The first 2 includes each include a specific file, which I name with a 
starting dot (.)
(To make sure of the order in which those files are included)

The final include then includes all the other files (through links in 
/etc/apache2/sites-enabled/), whose names do not start with a dot 
(because usually, apart from the default server, it does not matter in 
which order the virtual hosts are defined).

Since you are new to Virtual Hosts, let me give you some more 
information/tips :

1) Everything you put in the Apache configuration file prior to the 
"NameVirtualHost" line, are parameters that act as default values for 
*all* your Virtual Hosts (including the default Virtual Host).
So whenever a Virtual Host "needs" a parameter value, and it is not 
explicitly defined in his own <VirtualHost> section, it will use the 
default parameter value as defined before the "NameVirtualHost" line.

After the "NameVirtualHost" line, what you define is individual 
"personalities" of your webserver, one personality per <VirtualHost> 
section.  Any configuration parameter defined there, overrides the 
default specified in the main section above.

2) A VirtualHost is not a separate webserver.  All Apache "children" are 
identical, and are able to "take the personality" of any of the Virtual 
Hosts, depending on the request that comes in.
When a request comes in, it is always first given to the "main" Apache 
process.  That one looks which "Apache child" is currently available, 
and passes the request to that one for processing.
The "main" Apache process does not handle requests.  It just gets all 
the requests, and passes them to children for processing.  It also is 
the one who decides how many children run, when to start or kill one, etc..

The selected Apache child then looks at the "Host:" header line of the 
request to see to which VirtualHost the request "wants to talk", and it 
then "takes the personality" of that specific VirtualHost to process the 
request.  If the child does not find a "Host:" line, or if the name 
given in the "Host:" line does not match any of the ServerName or 
ServerAlias directives in any of the <VirtualHost> sections, then the 
child takes the personality of the default VirtualHost to answer the 
request.  The default VirtualHost has nothing special, it just happens 
to be the first <VirtualHost> section that Apache encounters when it 
loads its configuration file.

I just felt like telling you the above because I have the impression 
that a misunderstanding of the above is the source of 90% of the 
problems encountered by people unfamiliar with Virtual Hosting in 
general.  I hope it helps you.


The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:> for more info.
To unsubscribe, e-mail:
   "   from the digest:
For additional commands, e-mail:

View raw message