Munin in a subdomain using Apache Virtual Host

apache-2.2muninsubdomainvirtualhost

I'm trying to install Munin in my server and configure the web interface to work in a subdomain. I've configured the subdomain stats.mysite.com and created the file /etc/apache2/sites-available/stats.mysite.com:

NameVirtualHost *:80

<VirtualHost *:80>
   ServerAdmin admin@mysite.com
   ServerName stats.mysite.com
   ServerAlias www.stats.mysite.com
   DocumentRoot /var/cache/munin/www
   <Directory />
       Options FollowSymLinks
       AllowOverride None
   </Directory>
   LogLevel notice
   CustomLog /var/log/apache2/access.log combined
   ErrorLog /var/log/apache2/error.log
   ServerSignature On
</VirtualHost>

Then, I used the following command to enable my site:

a2ensite stats.mysite.com

and restarted apache:

sudo /etc/init.d/apache2 restart

But it's not working. When I acess stats.mysite.comon my browser, it shows me the content of mysite.com. Am I doing something wrong? I'd be very grateful if someone could help me.

Files

/etc/apache2/httpd.conf

ServerName localhost

/etc/munin/munin.conf

# Example configuration file for Munin, generated by 'make build'

# The next three variables specifies where the location of the RRD
# databases, the HTML output, logs and the lock/pid files.  They all
# must be writable by the user running munin-cron.  They are all
# defaulted to the values you see here.
#
# dbdir /var/lib/munin
# htmldir /var/cache/munin/www
# logdir /var/log/munin
# rundir  /var/run/munin
#
# Where to look for the HTML templates
# tmpldir       /etc/munin/templates

# (Exactly one) directory to include all files from.
#
includedir /etc/munin/munin-conf.d

# Make graphs show values per minute instead of per second
#graph_period minute

# Graphics files are normaly generated by munin-graph, no matter if
# the graphs are used or not.  You can change this to
# on-demand-graphing by following the instructions in
# http://munin.projects.linpro.no/wiki/CgiHowto
#
#graph_strategy cgi

# munin-cgi-graph is invoked by the web server up to very many times at the
# same time.  This is not optimal since it results in high CPU and memory
# consumption to the degree that the system can thrash.  Again the default is
# 6.  Most likely the optimal number for max_cgi_graph_jobs is the same as
# max_graph_jobs.
#
#munin_cgi_graph_jobs 6

# If the automatic CGI url is wrong for your system override it here:
#
#cgiurl_graph /cgi-bin/munin-cgi-graph

# munin-graph runs in parallel, the number of concurrent processes is
# 6.  If you want munin-graph to not be parallel set to 0.  If set too
# high it will slow down munin-graph.  Some experiments are needed to
# determine how many are optimal on your system.  On a multi-core
# system with good SCSI disks the number can probably be quite high.
#
#max_graph_jobs 6

# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime
# something changes (OK -> WARNING, CRITICAL -> OK, etc)
#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
#
# For those with Nagios, the following might come in handy. In addition,
# the services must be defined in the Nagios server as well.
#contact.nagios.command /usr/bin/send_nsca nagios.host.comm -c /etc/nsca.conf

# a simple host tree
#[localhost.localdomain]
#    address 127.0.0.1
#    use_node_name yes

[stats.mysite.com]
        address 127.0.0.1

# A more complex example of a host tree
#
## First our "normal" host.
# [fii.foo.com]
#       address foo
#
## Then our other host...
# [fay.foo.com]
#       address fay
#
## Then we want totals...
# [foo.com;Totals] #Force it into the "foo.com"-domain...
#       update no   # Turn off data-fetching for this "host".
#
#   # The graph "load1". We want to see the loads of both machines...
#   # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
#       load1.graph_title Loads side by side
#       load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
#
#   # The graph "load2". Now we want them stacked on top of each other.
#       load2.graph_title Loads on top of each other
#       load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
#       load2.dummy_field.draw AREA # We want area instead the default LINE2.
#       load2.dummy_field.label dummy # This is needed. Silly, really.
#
#   # The graph "load3". Now we want them summarised into one field
#       load3.graph_title Loads summarised
#       load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
#       load3.combined_loads.label Combined loads # Must be set, as this is
#                                                 # not a dummy field!
#
## ...and on a side note, I want them listen in another order (default is
## alphabetically)
#
# # Since [foo.com] would be interpreted as a host in the domain "com", we
# # specify that this is a domain by adding a semicolon.
# [foo.com;]
#       node_order Totals fii.foo.com fay.foo.com
#

/etc/munin-node.conf

#
# Example config-file for munin-node
#

log_level 4
log_file /var/log/munin/munin-node.log
pid_file /var/run/munin/munin-node.pid

background 1
setsid 1

user root
group root

# Regexps for files to ignore

ignore_file ~$
#ignore_file [#~]$  # FIX doesn't work. '#' starts a comment
ignore_file DEADJOE$
ignore_file \.bak$
ignore_file %$
ignore_file \.dpkg-(tmp|new|old|dist)$
ignore_file \.rpm(save|new)$

ignore_file \.pod$

# Set this if the client doesn't report the correct hostname when
# telnetting to localhost, port 4949
#
#host_name localhost.localdomain

# A list of addresses that are allowed to connect.  This must be a
# regular expression, since Net::Server does not understand CIDR-style
# network notation unless the perl module Net::CIDR is installed.  You
# may repeat the allow line as many times as you'd like

allow ^127\.0\.0\.1$

allow ^123\.45\.67\.89$  #the external ip of my server

# If you have installed the Net::CIDR perl module, you can use one or more
# cidr_allow and cidr_deny address/mask patterns.  A connecting client must
# match any cidr_allow, and not match any cidr_deny.  Note that a netmask
# *must* be provided, even if it's /32
#
# Example:
#
# cidr_allow 127.0.0.1/32
# cidr_allow 192.0.2.0/24
# cidr_deny  192.0.2.42/32

# Which address to bind to;
#host *
 host 127.0.0.1

# And which port
port 4949

/etc/hosts

127.0.0.1       localhost
127.0.1.1       ubuntu
123.45.67.89  nemo.mysite.com  nemo
123.45.67.89  nemo.stats.mysite.com

Edits

Output sudo apache2ctl -S

[Fri May 03 11:46:39 2013] [warn] NameVirtualHost *:80 has no VirtualHosts
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server stats.mysite.com (/etc/apache2/sites-enabled/stats.mysite.com:3)
         port 80 namevhost stats.mysite.com (/etc/apache2/sites-enabled/stats.mysite.com:3)
         port 80 namevhost www.mysite.com (/etc/apache2/sites-enabled/mysite.com:4)

After removing NameVirtualHost *:80 from stats.mysite.com conf file:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server stats.mysite.com (/etc/apache2/sites-enabled/stats.mysite.com:1)
         port 80 namevhost stats.mysite.com (/etc/apache2/sites-enabled/stats.mysite.com:1)
         port 80 namevhost www.mysite.com (/etc/apache2/sites-enabled/mysite.com:4)
Syntax OK

Best Answer

Looking at the [WARN] in the output of apache2ctl -S and looking at your configuration file for stats.mysite.com, I'm guessing that you have NameVirtualHost *:80 more than once, which is most likely causing the problem.

Remove NameVirtualHost *:80 from your stats.mysite.com conf file and any other site specific file and place it only once near the end of your main apache2.conf file in /etc/apache2.