Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm trying to add a second virtual host to my apache configuration, but cannot seem to get the new virtual host to be used.

My httpd.conf just contains the following line:

ServerName radiofreebrighton.org.uk

I also have a ports.conf file, which contains the following:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

I have two files in sites-available which were symlinked to sites-enabled by a2ensite:

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

The contents of the first is:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

The contents of the latter is:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

But any time I request a page from trafalgararches.co.uk, I am given a page from radiofreebrighton.org.uk. Why might this be happening? How can I fix it?


Edit:

Virtual host configuration as understood by apache:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

(Gleaned via apache2ctl -S aka httpd -S.)

share|improve this question
1  
Not sure this is the cause, but you ought to remove the slashes from the ends of your ServerName and ServerAlias lines. Also, make sure you've restarted apache. –  EEAA Jul 8 '11 at 12:53
    
I'm almost positive that's the cause. It means the hostname in the request will never match the ServerName for that virtual host. –  larsks Jul 8 '11 at 12:57
    
@ErikA, @larsks - You guys got my hopes up! I removed the trailing slashes and restarted apache, but it didn't change anything. –  Tom Wright Jul 8 '11 at 13:12
    
Do you have NameVirtualHost *:80 somewhere in your configuration? –  larsks Jul 8 '11 at 13:15
1  
I am not sure if the sites mentioned above are production or development, but actually going to those URLs does give two different pages for me (correct pages by the looks of it). If the vhosts above are on a development server, ignore this comment. Otherwise, you might have fixed your problem somewhere along the way and still have a cached copy sitting around. –  cyberx86 Jul 8 '11 at 17:30

3 Answers 3

Well, this question is over a year old, but I've stumbled across similar "problem". This may be obvious, but don't forget to restart the apache service after enabling additional virtual host. See, after executing a2ensite for the second virtual host, the output of apache2ctl -S will show that both sites are available (and one of them is the default), even if you didn't reload apache.

Let's say you have two virtual hosts - site1 and site2. You run a2ensite site1 and then reload apache service. Now you can access http://site1 and it is the default. Now you run a2ensite site2, but forget to restart apache. The output of apache2ctl -S will be:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

But when you try to load http://site2, it will actually load the default site (site1), since the configuration isn't loaded.

share|improve this answer

I had a similar problem where my additional vhosts on port 443 (SSL/HTTPS) were all being directed to the directory of the first vhost listed. Apache was essentially ignoring the servername property and matching on the ip:port only.

Turns out that I was missing the command 'NameVirtualHost *:443' to enable Named virtual hosting for port 443.

'NameVirtualHost *:443' just needs to be called once, and must be defined above your vhosts for port 443. I put my definition in the ports.config file so it looks like:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

Don't forget to restart apache after any changes.

share|improve this answer

Tom, please look here http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost

Note

Note, that the "main server" and any default servers will never be served for a request to a NameVirtualHost IP address (unless for some reason you specify NameVirtualHost but then don't define any VirtualHosts for that address).

So it should be okay if you change the default to the ip-adress of your server.

share|improve this answer
    
I tried that, but it didn't change anything. I'd also like to avoid tying myself to a particular IP, so I'm going to change it back. Also, I should point out that the default vhost is the one that works. –  Tom Wright Jul 8 '11 at 13:52

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.