操作
基于MySQL的虚拟主机¶
模块: mod_mysql_vhost
描述¶
已弃用: mod_mysql_vhost 已被 mod_vhostdb 替换,mod_mysql_vhost 将从 lighttpd 的未来版本中移除
注意: 自 lighttpd 1.4.46 起,已并入 mod_vhostdb
借助基于MySQL的虚拟主机,您可以将给定主机的文档根目录路径存储在MySQL数据库中。
注意: 请记住,一次只能激活一个虚拟主机模块。请勿将 mod_simple_vhost 与 mod_mysql_vhost 混用。
选项¶
示例:¶
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
如果指定,mysql-vhost.hostname
将覆盖 mysql-vhost.sock
。
MySQL设置:¶
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/');
具有相同文档根目录的通配符子域名¶
将像 '%.example.com' 这样的域名插入到 SQL 表中,并使用以下查询
mysql-vhost.sql = "SELECT docroot FROM domains WHERE '?' like domain;"
每个虚拟主机的配置(不使用该模块)¶
您显然可以从数据库创建 lighttpd 配置(通过 lighttpd 配置中的 include_shell
命令加载);
但是没有必要再次将相同的表与 mod_mysql_vhost 一起使用——只需使用 server.document-root。
您的脚本应该为每个虚拟主机输出类似的内容
$HTTP["host"] == "<DOMAIN_FROM_DATABASE>" { server.document-root = "<DOCROOT_FROM_DATABASE>" <CONFIG_FROM_DATABASE> }
请注意,您不应允许用户修改此处插入的配置,否则他们可能会使用 "rm -rf /" 的 include_shell 命令——这可能会以 root 权限执行。
并且每次更改内容时都必须重启您的网络服务器。