项目

概况

个人资料

操作

基于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 权限执行。

并且每次更改内容时都必须重启您的网络服务器。

gstrauss近5年前 更新 · 22 个修订版本