在Lighttpd(Debian Etch)上创建基于MySQL的高级虚拟主机

在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
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏