How to debug an apache virtual host configuration?

152,115

Solution 1

Syntax check

To check configuration files for syntax errors:

# Red Hat-based (Fedora, CentOS), Arch-based and OSX
httpd -t

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

List virtual hosts

To list all virtual hosts, and their locations:

# Red Hat-based (Fedora, CentOS), Arch-based and OSX
httpd -S

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S

Solution 2

Here's a command I think could be of some help :

apachectl -t -D DUMP_VHOSTS

You'll get a list of all the vhosts, you'll know which one is the default one and you'll make sure that your syntax is correct (same as apachectl configtest suggested by yojimbo87).

You'll also know where each vhost is declared. It can be handy if your config files are a mess. ;)

Solution 3

If you are trying to debug your virtual host configuration, you may find the Apache -S command line switch useful. That is, type the following command:

httpd -S

This command will dump out a description of how Apache parsed the configuration file. Careful examination of the IP addresses and server names may help uncover configuration mistakes. (See the docs for the httpd program for other command line options).

Solution 4

I had a new VirtualHost configuration file that was not showing when using the apachectl -S command. After much head scratching I realised that my file did not have suffix ".conf". Once I renamed the file with that suffix my Vhost started showing and working!

Solution 5

First check out config files for syntax errors with apachectl configtest and then look into apache error logs.

Share:
152,115

Related videos on Youtube

GaetanZ
Author by

GaetanZ

Updated on December 14, 2021

Comments

  • GaetanZ
    GaetanZ almost 2 years

    Once again, I have a problem with my apache virtual host configuration. (The default configuration is used instead of my specific one).

    The problem is not really the misconfiguration but how to solve it.

    Does anyone has good advices to do resolve this kind of problem quickly?

    Some more informations.

    The default conf file is this one:

    NameVirtualHost *
    <VirtualHost *>
            ServerAdmin webmaster@localhost
    
            DocumentRoot /var/www/
            <Directory />
                    Options FollowSymLinks
                    AllowOverride None
            </Directory>
            <Directory /var/www/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
            </Directory>
    
            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
            <Directory "/usr/lib/cgi-bin">
                    AllowOverride None
                    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                    Order allow,deny
                    Allow from all
            </Directory>
    
            ErrorLog /var/log/apache2/error.log
    
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel warn
    
            CustomLog /var/log/apache2/access.log combined
            ServerSignature On
    
        Alias /doc/ "/usr/share/doc/"
        <Directory "/usr/share/doc/">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride None
            Order deny,allow
            Deny from all
            Allow from 127.0.0.0/255.0.0.0 ::1/128
        </Directory>
    
    </VirtualHost>
    

    And the virtual host config that doesn't apply is this one:

    <VirtualHost *:*>
    
    ProxyPreserveHost On
    ProxyPass / http://ip.ip.ip.ip:8088/
    ProxyPassReverse / http://ip.ip.ip.ip:8088/
    ServerName wiki.mydomain.com
    
    </VirtualHost>
    
  • GaetanZ
    GaetanZ over 12 years
    I have no syntax error because my server reboot and reload the configuration without any problem. I don't know in which log I could find details about my configuration.
  • yojimbo87
    yojimbo87 over 12 years
    Error logs are usually located in '/var/log/apache2/error.log' file.
  • Larry Silverman
    Larry Silverman almost 11 years
    You can also use "apache2ctl -t".
  • aron.duby
    aron.duby almost 9 years
    -S is a synonym for -t -D DUMP_VHOSTS so those two are the same
  • Jahmic
    Jahmic almost 8 years
    For Windows, (if you are using xampp), you have these same commands at: \xampp\apache\bin
  • Lg102
    Lg102 almost 8 years
    For Wamp: c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
  • Loenix
    Loenix almost 7 years
    That's very useful, thank you but it is not enough, I got some trouble with a vhost that it should be used and is not, i dont know why, I wish to get logs about how apache choose the vhost.
  • David Spector
    David Spector almost 6 years
    Is there any way to make Apache add a message to the error file or elsewhere when an actual access comes in for a virtual or main host giving dynamic information about which host was chosen? I have tried LoadModule log_debug_module modules/mod_log_debug.so ... LogMessage "Debug 1" hook=all
  • David McNeill
    David McNeill over 3 years
    Good answer, help me find similar issue. All syntax and -S vhosts correct, still wrong site served. Turned out to be :80 and :443 has the same access log file, which seemed to confuse things. Separate file for each port, and sites started working.
  • Rubén Ruíz
    Rubén Ruíz over 2 years
    windows found this (on git basch console): ./httpd.exe -S

Related