Docs ModMySQLVhost » History » Revision 12

« Previous | Revision 12/22 (diff) | Next »
Anonymous, 2008-01-01 19:03

TracNav(DocsToc) {{{
#!rst ====================
MySQL-based vhosting ====================

Module: mod_mysql_vhost

.. meta::
:keywords: lighttpd, mysql, vhost

.. contents:: Table of Contents

Description ===========

With MySQL-based vhosting you can store the path to a given host's
document root in a MySQL database.

.. note:: Keep in mind that only one vhost module should be active at a time.
Don't mix mod_simple_vhost with mod_mysql_vhost.

Options =======

Example: ::

mysql-vhost.db             = "lighttpd" 
mysql-vhost.user = "lighttpd"
mysql-vhost.pass = "secret"
mysql-vhost.sock = "/var/run/mysqld/mysqld.sock"
mysql-vhost.sql = "SELECT docroot FROM domains WHERE domain='?';"

MySQL setup: ::

GRANT SELECT ON lighttpd.* TO lighttpd@localhost IDENTIFIED BY 'secret';
USE lighttpd;
CREATE TABLE domains (
domain varchar(64) not null primary key,
docroot varchar(128) not null
INSERT INTO domains VALUES ('host.dom.ain','/http/host.dom.ain/');


Per-vhost configuration

I wanted to be able to add configuration directives per vhost. This is how I did it.

domain varchar(64) NOT NULL PRIMARY KEY,
docroot varchar(128) NOT NULL,
config text,

then I added this line to my mysql-vhost.conf (but you can use lighttpd.conf)

include_shell "/usr/share/lighttpd/ lighttpd lighttpd secret"

the parameters are just the info above. I didn't know how to pass the actual variables (maybe someone else does?) so I just repeated their values.

I then made a script called /usr/share/lighttpd/, which just prints the info. You could write this in perl, php, or bash, if you want.

it should output this format:


mine looks like this:

#!/usr/bin/env python
import sys
import MySQLdb

  1. load configuration data from the database
    db=MySQLdb.connect(host='localhost', db=sys.argv1, user=sys.argv2, passwd=sys.argv3)
    cur = db.cursor()
    cur.execute("SELECT * FROM domains")

for domain in rs:

print "$HTTP[\"host\"] == \"%s\" {\nserver.document-root = \"%s\"\n%s\n}" % (domain[0], domain[1], domain[2])

Now, you can put whatever directives you want in the config field.
Make sure to restart your server to enable the settings, if you change them in the database.

Updated by Anonymous over 16 years ago · 12 revisions