项目

通用

个人资料

操作

基于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 服务器。

更新者:gstrauss 近 5 年前 · 22 次修订