在Lighttpd(Debian Etch)上创建基于MySQL的高级虚拟主机
版本1.0
作者:Falko Timme
本指南介绍如何在存储在MySQL数据库中的Debian Etch上的lighttpd Web服务器上创建高级虚拟主机。 这里描述的方法不使用lighttpd mod_mysql_vhost模块,而不像mod_mysql_vhost(它允许您仅将主机名和文件根目录存储在数据库中),该方法允许为MySQL数据库中的每个虚拟机存储单个配置指令。
本教程基于http://trac.lighttpd.net/trac/wiki/Docs%3AModMySQLVhost中的“Per-vhost配置”一章。
我不会保证这将为您工作!
1安装MySQL 5.0
首先我们像这样安装MySQL 5.0:
apt-get install mysql-server mysql-client
为MySQL用户root
创建密码(将yourrootsql
密码替换为您要使用的密码):
mysqladmin -u root password yourrootsqlpassword
然后检查
netstat -tap | grep mysql
MySQL正在监听哪个地址。 如果输出如下所示:
tcp 0 0 localhost.localdo:mysql *:* LISTEN 2713/mysqld
这意味着MySQL只监听localhost.localdomain
,那么你以前设置的密码是安全的。 但如果输出如下所示:
tcp 0 0 *:mysql *:* LISTEN 2713/mysqld
您应该为您的主机名(我的主机名为server1.example.com
)设置一个MySQL密码,因为否则任何人都可以访问您的数据库并修改数据:
mysqladmin -h server1.example.com -u root password yourrootsqlpassword
2安装Lighttpd,Python和python-mysqldb
我们将使用Python脚本从MySQL数据库中读取vhost配置,因此除了lighttpd之外,我们还必须安装Python和python-mysqldb。
您可以按以下方式安装这些软件包:
apt-get install lighttpd python python-mysqldb
3准备MySQL数据库
现在我们登录到MySQL ...
mysql -u root -p
...并创建数据库lighttpd
:
CREATE DATABASE lighttpd;
接下来,我们使用lighttpd
数据库的SELECT
权限创建一个数据库用户(我们名为lighttpd
):
GRANT SELECT ON lighttpd.* TO lighttpd@localhost IDENTIFIED BY 'secret';
GRANT SELECT ON lighttpd.* TO lighttpd@localhost.localdomain IDENTIFIED BY 'secret';
FLUSH PRIVILEGES;
(用您选择的密码替换密码。)
然后我们在lighttpd
数据库中创建域
表,并离开MySQL:
USE lighttpd;
CREATE TABLE IF NOT EXISTS domains (
domain varchar(64) NOT NULL PRIMARY KEY,
docroot varchar(128) NOT NULL,
config text
);
quit;
4创建Python脚本从数据库读取Vhost配置
现在我们创建Python脚本/usr/share/lighttpd/mysql_vhost.py
,它将连接到lighttpd
数据库,并从中读取vhost配置:
vi /usr/share/lighttpd/mysql_vhost.py
#!/usr/bin/env python import sys import MySQLdb # load configuration data from the database db=MySQLdb.connect(host='localhost', db=sys.argv[1], user=sys.argv[2], passwd=sys.argv[3]) cur = db.cursor() cur.execute("SELECT * FROM domains") rs=cur.fetchall() db.close() for domain in rs: print "$HTTP[\"host\"] == \"%s\" {\nserver.document-root = \"%s\"\n%s\n}" % (domain[0], domain[1], domain[2]) |
使脚本可执行:
chmod 755 /usr/share/lighttpd/mysql_vhost.py
现在我们必须告诉lighttpd使用该脚本。 因此,我们打开/etc/lighttpd/lighttpd.conf
并在其末尾添加以下行:
vi /etc/lighttpd/lighttpd.conf
[...] include_shell "/usr/share/lighttpd/mysql_vhost.py lighttpd lighttpd secret" |
(第一个lighttpd
是指MySQL数据库的名称,第二个lighttpd
到数据库用户,并且密码
为MySQL密码。)
以后重启lighttpd:
/etc/init.d/lighttpd restart