# SOLVED: lighttpd simple vhost - not.

## afabco

SOLVED:

the variable "simple-vhost.server-root" is the actual webserver root directory, not the virtual server root.  So in this case

the line should read:

```
simple-vhost.server-root   = "/var/www/"
```

not:

```
simple-vhost.server-root   = "/var/www/michelle/"
```

for a website 'michelle' in directory /var/ww/michelle

==================================================

dabbling a bit with lighttpd.  

Trying to get simple vhosts to work on a local (to the machine) host 'michelle'.

Here's the lighttpd.conf:

```

michelle lighttpd # cat /etc/lighttpd/lighttpd.conf

###############################################################################

# Default lighttpd.conf for Gentoo.

# $Header: /var/cvsroot/gentoo-x86/www-servers/lighttpd/files/conf/lighttpd.conf,v 1.3 2005/09/01 14:22:35 ka0ttic Exp $

###############################################################################

# {{{ variables

var.basedir  = "/var/www/localhost"

var.logdir   = "/var/log/lighttpd"

var.statedir = "/var/lib/lighttpd"

# }}}

# {{{ modules

# At the very least, mod_access and mod_accesslog should be enabled.

# All other modules should only be loaded if necessary.

# NOTE: the order of modules is important.

server.modules = (

#    "mod_rewrite",

#    "mod_redirect",

#    "mod_alias",

    "mod_access",

#    "mod_cml",

#    "mod_trigger_b4_dl",

#    "mod_auth",

#    "mod_status",

#    "mod_setenv",

#    "mod_proxy",

    "mod_simple_vhost",

#    "mod_evhost",

#    "mod_userdir",

#    "mod_compress",

#    "mod_ssi",

#    "mod_usertrack",

#    "mod_expire",

#    "mod_secdownload",

#    "mod_rrdtool",

#    "mod_webdav",

    "mod_accesslog"

)

# }}}

# {{{ includes

include "mime-types.conf"

# uncomment for cgi support

#   include "mod_cgi.conf"

# uncomment for php/fastcgi support

include "mod_fastcgi.conf"

# }}}

# {{{ server settings

server.username      = "lighttpd"

server.groupname     = "lighttpd"

server.document-root = var.basedir + "/htdocs"

server.pid-file      = "/var/run/lighttpd.pid"

server.errorlog      = var.logdir  + "/error.log"

# log errors to syslog instead

#   server.errorlog-use-syslog = "enable"

server.indexfiles    = ("index.php", "index.html",

                                                "index.htm", "default.htm")

# server.tag           = "lighttpd"

server.follow-symlink = "enable"

# event handler (defaults to "poll")

# see performance.txt

#

# for >= linux-2.4

#   server.event-handler = "linux-rtsig"

# for >= linux-2.6

#   server.event-handler = "linux-sysepoll"

# for FreeBSD

#   server.event-handler = "freebsd-kqueue"

# chroot to directory (defaults to no chroot)

# server.chroot      = "/"

# bind to port (defaults to 80)

# server.port          = 81

# bind to name (defaults to all interfaces)

# server.bind          = "grisu.home.kneschke.de"

# error-handler for status 404

# server.error-handler-404 = "/error-handler.html"

# server.error-handler-404 = "/error-handler.php"

# Format: <errorfile-prefix><status-code>.html

# -> ..../status-404.html for 'File not found'

# server.errorfile-prefix    = var.basedir + "/error/status-"

# FAM support for caching stat() calls

# requires that lighttpd be built with USE=fam

   server.stat-cache-engine = "fam"

# }}}

# {{{ mod_staticfile

# which extensions should not be handled via static-file transfer

# (extensions that are usually handled by mod_cgi, mod_fastcgi, etc).

static-file.exclude-extensions = (".php", ".pl", ".cgi", ".fcgi")

# }}}

# {{{ mod_accesslog

accesslog.filename   = var.logdir + "/access.log"

# }}}

# {{{ mod_dirlisting

# enable directory listings

#   dir-listing.activate      = "enable"

#

# don't list hidden files/directories

#   dir-listing.hide-dotfiles = "enable"

#

# use a different css for directory listings

#   dir-listing.external-css  = "/path/to/dir-listing.css"

#

# list of regular expressions.  files that match any of the

# specified regular expressions will be excluded from directory

# listings.

#   dir-listing.exclude = ("^\.", "~$")

# }}}

# {{{ mod_access

# see access.txt

url.access-deny = ("~", ".inc")

# }}}

# {{{ mod_userdir

# see userdir.txt

#

# userdir.path = "public_html"

# userdir.exclude-user = ("root")

# }}}

# {{{ mod_ssi

# see ssi.txt

#

# ssi.extension = (".shtml")

# }}}

# {{{ mod_ssl

# see ssl.txt

#

# ssl.engine    = "enable"

# ssl.pemfile   = "server.pem"

# }}}

# {{{ mod_status

# see status.txt

#

# status.status-url  = "/server-status"

# status.config-url  = "/server-config"

# }}}

# {{{ mod_simple_vhost

# see simple-vhost.txt

#

#  If you want name-based virtual hosting add the next three settings and load

#  mod_simple_vhost

#

# document-root =

#   virtual-server-root + virtual-server-default-host + virtual-server-docroot

# or

#   virtual-server-root + http-host + virtual-server-docroot

#

# simple-vhost.server-root   = "/home/weigon/wwwroot/servers/"

# simple-vhost.default-host  = "grisu.home.kneschke.de"

# simple-vhost.document-root = "/pages/"

simple-vhost.server-root   = "/var/www/michelle/"

simple-vhost.default-host  = "michelle"

simple-vhost.document-root = "/htdocs/"

# }}}

# {{{ mod_compress

# see compress.txt

#

# compress.cache-dir   = var.statedir + "/cache/compress"

# compress.filetype    = ("text/plain", "text/html")

# }}}

# {{{ mod_proxy

# see proxy.txt

#

# proxy.server               = ( ".php" =>

#                               ( "localhost" =>

#                                 (

#                                   "host" => "192.168.0.101",

#                                   "port" => 80

#                                 )

#                               )

#                             )

# }}}

# {{{ mod_auth

# see authentication.txt

#

# auth.backend               = "plain"

# auth.backend.plain.userfile = "lighttpd.user"

# auth.backend.plain.groupfile = "lighttpd.group"

# auth.backend.ldap.hostname = "localhost"

# auth.backend.ldap.base-dn  = "dc=my-domain,dc=com"

# auth.backend.ldap.filter   = "(uid=$)"

# auth.require               = ( "/server-status" =>

#                               (

#                                 "method"  => "digest",

#                                 "realm"   => "download archiv",

#                                 "require" => "user=jan"

#                               ),

#                               "/server-info" =>

#                               (

#                                 "method"  => "digest",

#                                 "realm"   => "download archiv",

#                                 "require" => "valid-user"

#                               )

#                             )

# }}}

# {{{ mod_rewrite

# see rewrite.txt

#

# url.rewrite = (

#       "^/$"           =>              "/server-status"

# )

# }}}

# {{{ mod_redirect

# see redirect.txt

#

# url.redirect = (

#       "^/wishlist/(.+)"               =>              "http://www.123.org/$1"

# )

# }}}

# {{{ mod_evhost

# define a pattern for the host url finding

# %% => % sign

# %0 => domain name + tld

# %1 => tld

# %2 => domain name without tld

# %3 => subdomain 1 name

# %4 => subdomain 2 name

#

# evhost.path-pattern        = "/home/storage/dev/www/%3/htdocs/"

# }}}

# {{{ mod_expire

# expire.url = (

#       "/buggy/"               =>              "access 2 hours",

#       "/asdhas/"              =>              "access plus 1 seconds 2 minutes"

# )

# }}}

# {{{ mod_rrdtool

# see rrdtool.txt

#

# rrdtool.binary  = "/usr/bin/rrdtool"

# rrdtool.db-name = var.statedir + "/lighttpd.rrd"

# }}}

# {{{ mod_setenv

# see setenv.txt

#

# setenv.add-request-header  = ( "TRAV_ENV" => "mysql://user@host/db" )

# setenv.add-response-header = ( "X-Secret-Message" => "42" )

# }}}

# {{{ mod_trigger_b4_dl

# see trigger_b4_dl.txt

#

# trigger-before-download.gdbm-filename = "/home/weigon/testbase/trigger.db"

# trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )

# trigger-before-download.trigger-url = "^/trigger/"

# trigger-before-download.download-url = "^/download/"

# trigger-before-download.deny-url = "http://127.0.0.1/index.html"

# trigger-before-download.trigger-timeout = 10

# }}}

# {{{ mod_cml

# see cml.txt

#

# don't forget to add index.cml to server.indexfiles

# cml.extension               = ".cml"

# cml.memcache-hosts          = ( "127.0.0.1:11211" )

# }}}

# {{{ mod_webdav

# see webdav.txt

#

# $HTTP["url"] =~ "^/dav($|/)" {

#     webdav.activate = "enable"

#     webdav.is-readonly = "enable"

# }

# }}}

# {{{ extra rules

#

# set Content-Encoding and reset Content-Type for browsers that

# support decompressing on-thy-fly (requires mod_setenv)

# $HTTP["url"] =~ "\.gz$" {

#     setenv.add-response-header = ("Content-Encoding" => "x-gzip")

#     mimetype.assign = (".gz" => "text/plain")

# }

# $HTTP["url"] =~ "\.bz2$" {

#     setenv.add-response-header = ("Content-Encoding" => "x-bzip2")

#     mimetype.assign = (".bz2" => "text/plain")

# }

#

# }}}

# {{{ debug

# debug.log-request-header   = "enable"

# debug.log-response-header  = "enable"

# debug.log-request-handling = "enable"

# debug.log-file-not-found   = "enable"

# }}}

# vim: set ft=conf foldmethod=marker et :

```

Near as I can tell, relevant parts are:

```
# {{{ variables

var.basedir  = "/var/www/localhost"

var.logdir   = "/var/log/lighttpd"

var.statedir = "/var/lib/lighttpd"

# }}}

```

```
server.modules = (

#    "mod_rewrite",

#    "mod_redirect",

#    "mod_alias",

    "mod_access",

#    "mod_cml",

#    "mod_trigger_b4_dl",

#    "mod_auth",

#    "mod_status",

#    "mod_setenv",

#    "mod_proxy",

    "mod_simple_vhost",

#    "mod_evhost",

#    "mod_userdir",

#    "mod_compress",

#    "mod_ssi",

#    "mod_usertrack",

#    "mod_expire",

#    "mod_secdownload",

#    "mod_rrdtool",

#    "mod_webdav",

    "mod_accesslog"

)

# }}}

```

and 

```
# {{{ mod_simple_vhost

# see simple-vhost.txt

#

#  If you want name-based virtual hosting add the next three settings and load

#  mod_simple_vhost

#

# document-root =

#   virtual-server-root + virtual-server-default-host + virtual-server-docroot

# or

#   virtual-server-root + http-host + virtual-server-docroot

#

# simple-vhost.server-root   = "/home/weigon/wwwroot/servers/"

# simple-vhost.default-host  = "grisu.home.kneschke.de"

# simple-vhost.document-root = "/pages/"

simple-vhost.server-root   = "/var/www/michelle/"

simple-vhost.default-host  = "michelle"

simple-vhost.document-root = "/htdocs/"

# }}}
```

also:

```
michelle lighttpd # ls -la /var/www

total 16

drwxr-xr-x  4 root     root     4096 Aug 20 15:18 .

drwxr-xr-x 18 root     root     4096 Sep 15 19:48 ..

drwxr-xr-x  6 lighttpd lighttpd 4096 Jul 29 22:01 localhost

drwxr-xr-x  6 lighttpd lighttpd 4096 Sep 19 21:23 michelle

michelle lighttpd # ls -la /var/www/michelle

total 28

drwxr-xr-x 6 lighttpd lighttpd 4096 Sep 19 21:23 .

drwxr-xr-x 4 root     root     4096 Aug 20 15:18 ..

drwxr-xr-x 2 lighttpd lighttpd 4096 Sep 19 21:23 cgi-bin

drwxr-xr-x 2 lighttpd lighttpd 4096 Sep 19 21:23 error

drwxr-xr-x 4 lighttpd lighttpd 4096 Sep 19 21:23 htdocs

drwxr-xr-x 2 lighttpd lighttpd 4096 Sep 19 21:23 icons

michelle lighttpd # ls -la /var/www/michelle/htdocs

total 20

drwxr-xr-x 4 lighttpd lighttpd 4096 Sep 19 21:23 .

drwxr-xr-x 6 lighttpd lighttpd 4096 Sep 19 21:23 ..

-rw-r--r-- 1 lighttpd lighttpd   46 Sep 19 21:26 index.html

```

```
michelle lighttpd # cat /var/www/michelle/htdocs/index.html

<B>

you are in /var/www/michelle/htdocs/index.html

</B>
```

However, whenever I http://michelle, I get the index.html in /var/www/localhost/htdocs.

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

                "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

        <head>

                <title>Test Page for Apache Installation</title>

        </head>

        <body>

                <p>If you can see this, it means that the installation of the <a

                href="http://www.apache.org/foundation/preFAQ.html">Apache web server</a>

                software on this system was successful. You may now add content to this

                directory and replace this page.</p>

                <hr style="width: 100%; height: 3px;" />

                <h2 style="text-align: center">Seeing this instead of the website you expected?</h2>

                <p>This page is here because the site administrator has changed the

                configuration of this web server. Please <strong>contact the person

                responsible for maintaining this server with questions.</strong>

                The Apache Software Foundation, which wrote the web server software

                this site administrator is using, has nothing to do with

                maintaining this site and cannot help resolve configuration

                issues.</p>

                <hr style="width: 100%; height: 3px;" />

                <p>The Apache documentation is available

                <a href="http://httpd.apache.org/docs-2.0/">online</a> or has been installed

                <a href="/manual/">locally</a>.</p>

                <p>You are free to use the image below on an Apache-powered web

                server. Thanks for using Apache!</p>

                <div style="text-align: center"><img src="apache_pb.gif" alt="" /></div>

        </body>

</html>

```

Not even close to what I'm expecting.  So looks like lighttpd is skipping over michelle and going straight to the default 'localhost' as set up at the top of lighttpd.conf.  So, question comes up, does the machine see host 'michelle' at all.

```
michelle lighttpd # ping michelle

PING michelle (192.168.2.10) 56(84) bytes of data.

64 bytes from michelle (192.168.2.10): icmp_seq=1 ttl=64 time=0.015 ms

64 bytes from michelle (192.168.2.10): icmp_seq=2 ttl=64 time=0.017 ms
```

So, any idea what I'm doing wrong here?

Thanks in advance!

----------

