操作
基于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> }
请注意,您不应该允许您的用户修改在此处插入的配置,否则他们可能会使用 include_shell 执行 "rm -rf /" - 这很可能以 root 权限执行。
而且您每次更改内容时都必须重新启动您的 Web 服务器。