Docs ModMySQLVhost » History » Revision 20
Revision 19 (Shtirlic, 2009-03-10 16:19) → Revision 20/22 (Shtirlic, 2012-08-11 10:42)
h1. MySQL-based vhosting *Module: mod_mysql_vhost* {{>toc}} h2. 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. h2. Options h3. Example: <pre> 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-vhost.hostname = "localhost" mysql-vhost.port = 3306 </pre> If specified, @mysql-vhost.hostname@ overrides @mysql-vhost.sock@. h3. MySQL setup: <pre> GRANT SELECT ON lighttpd.* TO lighttpd@localhost IDENTIFIED BY 'secret'; CREATE DATABASE lighttpd; 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/'); </pre> h2. Wildcard subdomains with same docroot Insert domain names like '%.example.com' into the sql table, and use the following query: mysql-vhost.sql = "SELECT docroot FROM domains WHERE '?' like domain;" h2. Per-vhost configuration (not using the module) You can obviously create a lighttpd config from a database (load it via the @include_shell@ command in the lighttpd config); but there is no point in using the same table again with mod_mysql_vhost - just use server.document-root. Your script should output something like that for every vhost: <pre> $HTTP["host"] == "<DOMAIN_FROM_DATABASE>" { server.document-root = "<DOCROOT_FROM_DATABASE>" <CONFIG_FROM_DATABASE> } </pre> Please note that you should not allow your users to modify the config which gets inserted here, or they just may use include_shell with "rm -rf /" - which gets probably executed with root. And you have to restart your webserver every time you change something.