怎样实现在线申请虚拟主机?

由 无相 在 07-06-2004 21:40 发表:

怎样实现在线申请虚拟主机?

基于apache+php+mysql,用php做申请页面,数据库和FTP很容易实现在线申请,不必多说,但如何实现apache和二级域名的在线申请,请兄弟门说说其原理,不要求详细步骤,多谢!

ps.如果能将apache和bind的配置信息放在数据库中就好办了!


ThinkPad A21M

CPU:P3 700

RAM:256M

HD:20G

OS:FreeBSD 4.7+gnome 2.4+Xface 4.0

RedHat 9


由 landxqc 在 07-06-2004 22:36 发表:


兄弟去看看这个页面吧:

http://www.linuxaid.com.cn/articles/4/7/475409474.shtml

Apache1.3.28 + PHP4.3.3 + MySQL4.0.16 + proftpd1.2.8 + proftpd-mod-quotatab-1.2.7 + Zend Optimizer + mod_security

最主要的就是mod_security 和 proftpd-mod-quotatab 这两个模块啦!!

挺有参考价值的一个方法!!


我在梦里遇见你,似眼前似天际,仿佛一切像雾又像迷。

想在梦里抓住你,似拥有似空虚,总是一场空欢喜。

我在梦里属于你,也有情也有意,无奈醒来就要各东西。

苍天注定的游戏,也想玩也想拒,甘愿一生无悔只为你


由 Snoopy 在 07-07-2004 00:11 发表:


好文章,,,贴出来看吧

用Linux搭建全自动的虚拟主机(上)

摘要

本文以高校实际应用为例子介绍配置以Linux为基础支持PHP、JSP等动态网页的自动虚拟主机服务的过程。(2004-03-04 20:49:22)

--------------------------------------------------------------------------------

By 光辉

用Linux搭建全自动的虚拟主机 王光辉

作为一所高校,必须为各院系、各部门,以及老师、学生提供虚拟主机服务。一般要求有一个二级域名,能由用户自主管理,能支持PHP、JSP等动态网页技术,并且需要给用户一个空间限制,要求他们不能任意上传大量文件。

对于一些熟悉Web的系统管理员实现以上要求并不是太困难。二级域名可以通过在域名系统做一个CNAME记录,并在Apache的配置文件里为其做一个基于名称的虚拟主机即可实现;可以通过给每个用户一个FTP账号来实现自主管理;支持PHP和JSP则可以通过安装相应模块来实现。但是问题随之而来。每次做一个账号都必须手忙脚乱地忙碌好一阵子;每次修改完Apache的配置文件后都要重新启动Apache;在域名系统里添加记录后还要做一个ndc reload,更加让人头疼的是,随着用户的增加,系统的httpd.conf文件会变大,/etc/passwd文件里的用户会变多,这样一个大的系统对于管理、安全来说都是灾难性的。

怎么去有效、安全、方便地管理这样一个系统呢?笔者作为一名高校的网络管理员,在经过仔细地研究和实践后,成功地利用自由软件在Linux服务器上实现了该系统的自动管理,一切工作都可以由用户在一个Web页面上自助完成,目前该系统运行良好。当然,系统会要求一个身份验证,管理员通过Web页面核对该用户资料是否属实,确认后通过简单地选择“通过”按钮,就可方便地为用户开通服务。

准备工作

1.软件的选择

按照需求提供服务是最基本的原则。这里需要提供服务的实际环境为一台DNS服务器(HP E50)和一台Web服务器(IBM x232),如果条件不允许,也可以在一台服务器上实现。当然,对于固定IP的要求一般单位应该都能满足。

这里选择了Apache来提供虚拟Web服务。Apache由Apache软件基金会组织(Apache Software Foundation)负责开发,是一个可自由使用的、功能完备的Web服务器,因此被广泛地使用。许多商业Web服务软件都采用了Apache作为前端服务软件。Apache有各种各样的模块供用户选择,基本上能满足用户要求,这里会使用2个重要的非默认模块。

考虑到现在普及的方式和系统成本,采用FTP来管理文件实现用户的自我管理。FTP服务软件种类很多,选择的原则是:不能使用系统账号,安全性高,易用好强。经典的wu-ftpd在许多Unix平台是默认的FTP服务软件,但是其使用了系统账号,安全性较差;与Red Hat搭配的vsftpd安全性高,稳定性也很好,但是其易用性没有达到本系统的要求。所以最后确定选择了proftpd。这是一个非常流行的FTP服务软件,配置方便,并有MySQL模块和Quota模块可以选择,可以利用它们的完美结合实现非系统账号的管理,用户磁盘的限制。

用户域名服务选择Bind,几乎所有的Unix/Linux系统都在使用它,并且几乎所有大的DNS服务提供者都采用了它。可在Red Hat系统安装时选择Bind。

实现PHP动态网页服务当然少不了PHP。JSP则采用了Resin。没有采用常用的Tomcat,主要是考虑Apache和Resin的结合会更好。当然,也可以选择任何您认为好的服务软件。

最后还必须安装MySQL软件,可以在Red Hat系统安装时安装它,也可以选择安装完系统后再手工安装。这里选择了手工编译安装,尽管RPM包安装要方便很多,但手工编译带来的是更方便的选择。

除以上软件外,该系统还安装了Zend Optimizer,该软件不仅能提供加密代码的执行,更关键的是能够提高PHP代码的执行效率。Mod_security是一个为了防范某些SQL注入攻击行为的模块。更多信息请参考相关资料。

2.软件的下载

可将所有软件都下载到/root/vhosts/下。

(1)Apache1.3.28

#wget ftp://ftp.linuxaid.com.cn/pub/mirro...e_1.3.28.tar.gz

(2)PHP4.3.3

#wget http://php.linuxaid.com.cn/get/php-....php.net/mirror

(3)MySQL3.23.52

#wget http://mysql.linuxaid.com.cn/Downlo...-3.23.52.tar.gz

(4)proftpd1.2.8

#wget ftp://ftp.proftpd.org/distrib/sourc...pd-1.2.8.tar.gz

(5)proftpd-mod-quotatab-1.2.7

#wget http://www.castaglia.org/proftpd/mo...ab-1.2.7.tar.gz

(6)Resin2.1

#wget http://www.caucho.com/download/resin-2.1.11.tar.gz

(7)Zend Optimizer

#wget http://www.zend.com/store/getfreefi...13&zbid=548

这里要有一个accept的用户授权协议,然后才能下载。

(8)mod_security

#wget http://www.modsecurity.org/download...rity-1.6.tar.gz

下面就一起进入具体的实现步骤。具体实现前,请注意安装系统时要求选择开发包,即把GCC及关联软件包选择上。

系统安装和配置

1.DNS服务器的安装

安装Red Hat 9.0时选择服务器安装方式,除选择域名服务外,其它的所有软件均可不装。安装需要的安装系统是安全的一个基本原则。

2.域名服务器的配置

首先将申请域名的解析权利交给该台DNS服务器,具体办法是申请的时候要求把DNS解析权指向该服务器,然后就可在其上配置域了。

/etc/named.conf文件配置示例如下:

options {

directory "/var/named";

};

zone "." in {

type hint;

file "named.root";

};

zone "0.0.127.in-addr.arpa" in {

type master;

file "localhost.rev";

};

zone "yourdomain.com" in {

type master;

file "yourdomain.hosts";

};

zone "176.118.202.in-addr.arpa" in {

type master;

file "176.rev";

};

域名里面的yourdomain是配置的关键,将采用泛域名形式。

/var/named/yourdomain.hosts文件内容如下:

$TTL 3600

@ IN SOA hrbeu.hrbeu.edu.cn. root.mail.hrbeu.edu.cn. (

2003080812 ; serial

360000 ; refresh every 100 hours

3600 ; retry after 1 hour

4w ; expire after 1000 hours

3600 ; default ttl is 100 hours

) ; Define the nameservers and mail servers

IN NS hrbeu.hrbeu.edu.cn.

IN NS lion.hrbeu.edu.cn.

IN MX 10 mail.yourdomain.com.

; Define localhost

localhost IN A 127.0.0.1

; Define hosts in this zone

*.yourdomain.com. IN A 218.7.43.21

其中主要用的就是这个*.yourdomain.com. IN A 218.7.43.21。

以后任何像abc.yourdomain.com、hello.yourdomain.com的域名都将解析到218.7.43.21,这样就不用每开一个虚拟主机,都必须在域名系统上做一个CNAME记录,并reload域名配置文件了。特别要注意的是*.yourdomain.com.后面有一个“.”。

3.MySQL的安装和配置

(1)添加mysql用户和mysql组:

#cd /root/vhosts/

#groupadd mysql

#useradd -g mysql mysql

(2)编译安装,会耗时较长:

#tar -zxvf mysql-3.23.52.tar.gz

#cd mysql-3.23.52

#./configure --prefix=/usr/loca/mysql

#make

#make install

(3)配置MySQL服务

#scripts/mysql_install_db

#chown -R root /usr/local/mysql

#chown -R mysql /usr/local/mysql/var

#chgrp -R mysql /usr/local/mysql

#cp support-files/my-medium.cnf /etc/my.cnf

#/usr/local/mysql/bin/safe_mysqld --user=mysql &

(4)安装自启动脚本

#cp support-files/mysql.server /etc/init.d/

#ln -s /etc/init.d/mysql.server /etc/rc3.d/S99mysqld

注意,修改mysql.server和S99mysqld为可执行。

为了方便以后进入MySQL,最好把MySQL的客户端程序路径加入/etc/profile中。在该文件末尾加入:export PATH=/usr/local/mysql/bin:$PATH。

现在MySQL的安装已经完成,可以使用MySQL命令进入。注意要先退出后再进入,因为已经修改/etc/profile,重新进入后才能自动搜索MySQL路径。进入后,请注意修改MySQL的root密码。命令如下:

#mysqladmin -u root password newpassword

这样,密码就修改为newpassword。

4.proftpd的安装

(1)将proftpd的源码包解压缩到目录下:

#tar -zxvf proftpd-1.2.8.tar.gz

解压缩mod_quotatab-1.2.7:

#tar -zxvf proftpd-mod-quotatab-1.2.7.tar.gz

进入mod_quotatab目录,把mod_quotatab中的文件拷贝到proftpd的modules目录中:

#cd mod_quotatab

#cp -Rpf * ../proftpd-1.2.8/modules

(2)在开始运行configure之前,先修改mod_sql_mysql.c文件

#cd ../proftpd-1.2.8/contrib

#vi mod_sql_mysql.c

把#include 改为实际路径,如MySQL安装在/usr/local/mysql下,将其修改为:

#include

(3)开始配置

#cd ..

#./configure--prefix=DIR

--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql

--with-includes=DIR

--with-libraries=DIR

需要修改的三个地方是:

--prefix=DIR,DIR为要安装到的目录名,如在本例中DIR为/usr/local/proftpd。

--with-includes=DIR,DIR为MySQL的includes目录,如在本例中DIR为/usr/local/mysql/include/mysql。

--with-libraries=DIR,DIR为MySQL的lib目录,如在本例中DIR为/usr/local/mysql/lib/mysql。

最后安装完成:

#make

#make install

5.配置proftpd.conf

配置是一个复杂的问题,应该小心谨慎,避免出错。由于利用了MySQL,所以要在MySQL中建一个库,并赋予一个用户权限。

mysql> create database ftp;

mysql> grant all privileges on ftp.* to ftpuser@localhost identified by 'test#@' with grant option;

接下来,进入安装好的proftpd目录,修改etc/proftpd.conf文件进行配置。基本配置讲解示例:proftpd.conf。

ServerName "HRBEU's ftp server"

ServerType standalone

DefaultServer on

Port 21

Umask 022

DefaultRoot ~

SystemLog /usr/local/proftpd/logs/ftp.log

TransferLog /usr/local/proftpd/logs/ftp.transferlog

MaxLoginAttempts 30

AllowRetrieveRestart on

#for quota configure

QuotaDirectoryTally on

QuotaDisplayUnits Kb

QuotaEngine on

QuotaLog /usr/local/proftpd/logs/Quota.log

QuotaShowQuotas on

#for sql configure

SQLConnectInfo ftp@localhost:3306 ftpuser test#@

SQLAuthTypes Backend Plaintext

SQLUserInfo FTPUSERS userid passwd uid gid home shell

SQLGroupInfo FTPGRPS groupname gid members

RequireValidShell off

SQLAuthenticate users

SQLHomedirOnDemand on

#...SQL...............

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session,

limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail,

files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits

WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,

bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,

files_xfer_used FROM quotatallies WHERE name = '%{0}' AND

quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used =

bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1},

bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used =

files_in_used + %{3}, files_out_used = files_out_used + %{4},

files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND

quota_type = '%{7}'" quotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},

%{5}, %{6}, %{7}" quotatallies

QuotaLimitTable sql:/get-quota-limit

QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

MaxInstances 30

User ftp

Group ftp

AllowOverwrite on

6.MySQL部分配置讲解

数据库联接的信息:

SQLConnectInfo DatabaseName@HostName:Port UserName Password

其中DatabaseName是数据库名,HostName是主机名,Port是端口号,UserName是连接数据库的用户名,Password是密码。

数据库认证的类型:

SQLAuthTypes Backend Plaintext

指定用来做用户认证的表的有关信息。“FTPUSERS”和“FTPGRPS”是数据表名字,会在下面建立。

SQLUserInfo FTPUSERS userid passwd uid gid homedir shell

SQLGroupInfo FTPGRPS groupname gid members

设置如果Shell为空时允许用户登录:

RequireValidShell off

数据库的鉴别

SQLAuthenticate users groups usersetfast groupsetfast

如果HOME目录不存在,则系统会根据其HOME项新建一个目录:

SQLHomedirOnDemand on

7.数据表的建立

在该数据库中建立一个用户表FTPUSERS,该表是必须的:

use ftp;

create table FTPUSERS (

userid TEXT NOT NULL,

passwd TEXT NOT NULL,

uid INT NOT NULL,

gid INT NOT NULL,

home TEXT,

shell TEXT

);

此表格是用户认证所需要的,其中userid、passwd必不可少。userid是FTP服务的用户名,passwd是对应用户的密码,uid是系统用户的id,即所映射的系统用户,id是所

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus