I finally got an apache2 server working on my laptop, after hours of (almost pointless) editing of configuration files, server restarts, reading Ubuntu forums and googling. It was lack of all three, information, insight and luck that made this what-should-have-been simple process drawn out and painful.
1) Install apache2
sudo apt-get install apache2 apache<version>-common apache2-mpm-worker
The version I’m using is 2.2. To not bother about version numbers and dependencies, install apache2 using Synaptic Package Manager
2) Open your browser and type
It should display the page index.html located in /var/www/, with a message “It works!” Proceed only this step is successful.
3) Create a new user, say, myserver
sudo adduser myserver
This step is necessary because you have to give apache2 access to folders /home/, /home/user/ and a folder called /home/user/public_html/. It is prudent to use a dummy user like myserver instead of yourself.
4) Create a folder called public_html/ in /home/myserver/
sudo mkdir /home/myserver/public_html/
Create your web page and put it in this folder under the name index.html (apache2 searches for an .html file with this name). If you want to host a directory, simply put the directory here.
5) Give apache access permissions to this folder hierarchy
sudo chmod -R 775 /home/myserver/
To make editing of the .html files easier (so that you don’t need to use sudo everytime) change the myuser/ hierarchy in your group, before running the above sudo chmod command. (I’m not sure how safe this is, though)
sudo chgrp -R your_group_name /home/myserver/
sudo chmod -R 775 /home/myserver/
6) Enable user directory module in apache
sudo a2enmod userdir
Now the files userdir.conf and userdir.load will be created in /etc/apache2/mods-enabled/ folder. Some websites suggest creating a link in the mods-enabled/ folder to the same files kept in /etc/apache2/mods-available/ folder (instead of using a2enmod) but I read that this method could be less safe.
7) Open the file /etc/apache2/httpd.conf and add the following line to it
Later on, ‘localhost’ can be replaced with the actual name of your site.
8) Restart the server
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 force-reload
(I don’t know if this is a bug, but sometimes, just restarting or force-reloading doesn’t cause the changes made to be registered)
9) Open your browser and test the server with:
It displays either the /home/myserver/public_html/index.html file, if it exists, or displays the public_html/ folder hierarchy.
10) Next steps include port forwarding in your router, changing listening port (if required), registering in a DNS site like dyndns.com, fiddling around with a few more settings and you have a web site! This, for later, in this post.
 This was done on Ubuntu 8.04 LTS Hardy Heron
 In case its still not working, go to the folder /etc/apache2/sites-available/, make a backup of the file default. Open this file with a text editor with root permissions.
sudo cp default default.OLD
sudo gedit default &
The default directory where apache searches for your web page is in /var/www/. We change this default directory to /home/myserver/public_html/ at two places, as highlighted below:
Options Indexes FollowSymLinks MultiViews
allow from all
Now restart the server as in step 8), open your browser and test the server with: