Here you'll find an example of how to do name-based virtual hosting using mod_perl and mysql.
This works for my needs but most likely you will have to change parts to get what you want. Everything covered here is fairly advanced and I'll assume you know your way around Apache, MySQL and Perl.
I tried to make it as portable as possible. It should work with a minimum changes on any Linux system, and with more on Windows as well.
Note: If you experience problems you can try to contact me on #httpd (ask for sjorge)
Configuration Layout
path |
description |
/srv/httpd |
|
/srv/httpd/conf/httpd.conf |
Main configuration file |
/srv/httpd/conf/hosts.conf |
Host configuration file |
/srv/httpd/conf/template/http.tmpl |
Virtual host template |
/srv/httpd/conf/template/webdav.tmpl |
WebDAV virtual host template |
/srv/httpd/conf/template/ftp.tmpl |
FTP virtual host template |
/srv/hosts |
hosts base path |
Virtual Host Layout (relative to /srv/hosts)
path |
description |
$name |
Virtual host base dir |
$name/_sys |
Holds varies other files |
$name/_sys/logs |
Logs for host |
$name/_sys/tmp |
temp directory for php |
$name/_sys/sessions |
sessions directory for php |
$name/cgi-bin |
cgi-bin for host (only works when CGI is set in database) |
$name/httpdocs |
document root |
First we need a database to hold our host configuration.
Use the MySQL client, or phpMyAdmin, or some other means, to create the database. You can get the database template here
You also need to create a user with access to that database. I chose to call mine apache
Note: Replace /srv/httpd with your own ServerRoot!!
Download all .conf and .tmpl files provided in the General Setup section and save them in the correct locations.
Edit httpd.conf and change:
Edit hosts.conf and change:
Edit http.tmpl and webdav.tmpl and change:
You should be good to go. Feel free to make more changes to the templates and configuration files
Use the MySQL client or phpMyAdmin, or another means, to access the database.
INSERT INTO hosts VALUES(null, 'localhost', 1, 0, 0, 0, 0, 0); |
value |
description |
null |
auto-increment host ID |
'localhost' |
host name |
1 |
enable (0 to disable the host) |
0 |
disable WebDAV (1 to enable) |
0 |
disable FTP (1 to enable) |
0 |
disable CGI (1 to enable) |
0 |
disable Server Side Includes (1 to enable) |
0 |
disable PHP (1 to enable) |
(Re)start httpd and the new vhosts will be available (you need to provide the -DDAV flag to enable WebDAV on the server)
Note: The directories for this vhost will be created automatically when apache is (re)started! (There may be a spike in memory usage at startup.)
Note: Removal isn't automatic; if you remove a host + aliases + users + configuration the files will remain)
Note: I recommend adding localhost as your first vhost. All request with and unknown host header will go to this host.
Only required when you enable WebDAV for a host.
INSERT INTO users VALUES(null, 1, 'user', 'apache-encrypted-password', 'dav'); |
value |
description |
null |
auto increment user id |
1 |
host id user belongs too (check hosts table to get it) |
'user' |
user name |
'apache-encrypted-password' |
password for user. check httpd doc for encryption (here) |
'dav' |
group(s) for user. dav = enables WebDAV access |
You can create aliases for hosts as well if you wish (multiple aliases possible per host; each alias must be unique).
INSERT INTO aliases VALUES(1, 'cygnus'); |
value |
description |
1 |
host ID alias belongs too (check hosts table to get it) |
'cygnus' |
alias for host |
Setting up a host as reverse proxy? not a problem (note reverse proxy config not shown).
INSERT INTO configuration VALUES(1, '#proxy config'); |
*value_ |
|
1 |
host id configuration belongs too (check hosts table to get it) |
'#proxy config' |
configuration for host |
There is a google code project that has a java based manager for this configuration. Use at own risk. This isn't professional code and isn't tied to the ASF.
http://code.google.com/p/vhm-mysql/
Point your WebDAV client to http://www.example.com:81/httpdocs/ and long in with the user/pass combination. It works in IE, DreamWeaver, cadaver, and Mac OS X's WebDAV client.
This is a bit more tricky.
host: www.example.com user: user@www.example.com pass: pass |
The vhost is selected based on the username. A username without a suffix will go to the first vhost with FTP enabled.
This configuration works on both Windows and Linux (presumably Macs as well).
To get it to work on Windows you need to edit http.tmpl and update the path separate from : to ; for the php_admin_values.
Other database systems can be used by modifying the configuration files. PostrgesSQL should work fine, for example.