11月30

安装环境:
操作系统centos-5.2
mysql 5.0.67 源代码安装在/usr/local/mysql目录

1、proftpd-1.3.1源代码编译安装

./configure --prefix=/usr/local/proftpd \
--with-modules=mod_sql:mod_sql_mysql \ #支持mysql数据库
--with-modules=mod_quotatab:mod_quotatab_sql \ #支持磁盘配额
--with-modules=mod_tls \ #支持SSL/TLS安全传输
--with-includes=/usr/local/mysql/include \
--with-libraries=/usr/local/mysql/lib
make
make install

cp sample-configurations/mod_sql.conf /usr/local/proftpd/etc/proftpd.conf

2、proftpd.conf文件配置基本格式:

#全局设置
设置项目1 参数1
设置项目2 参数2
……
……
#某个目录的设置
<Directory "路径名">
……
……
</Directory>
#关于匿名用户的设置
<Anonymous "匿名登录的目录">
……
……
<Limit 限制动作>
……
……
</Limit>
</Anonymous>

3、proftpd.conf配置文件中的一些基本配置:

ServerName 服务器名称
ServerType 服务器工作类型(standalone/inted)
DefaultServer 是否启用虚拟FTP (on/off)
Port 运行端口
Umask 默认文件权限(022)
User 运行proftpd服务器的用户
Group 运行proftpd服务器的用户组
AllowOverwrite 是否允许客户端覆盖文件(安全上一般设置为off)
RequireValidShell 用户shell不在/etc/shells文件中,默认不允许登陆(on/off)
MaxInstances 20 最多有20个proftpd的PID
MaxClients 10 最多允许10个用户在线
MaxClientsPerHost 1 一个IP只允许一个帐号连接
MaxClientsPerUser 2 每个帐号在每个客户端最多同时登陆2次,可防止多线程下载软件
DisplayLogin welcome.msg ftp登陆欢迎信息文件
<Directory /*> 登入时想进入的目录位置(/* 为通配符)
<Anonymous ~ftp> 匿名用户设置
<Global> 所有虚拟ftp的共同设置项

3.1 虚拟FTP设置
<VirtualHost 192.168.0.1>
ServerName "……"
……
……
</VitualHost>

3.2 开启ftp上传/下载的续传功能
AllowStoreRestart on #上传
AllowRetrieveRestart on #下载

3.3 限速设置

格式为: TransferRate STOR|RETR 速度(kbytes/s) user 使用者
STOR 为上传速度
RETR 为下载速度
后面不跟user的时候,针对全部用户进行限速

3.4 让proftpd支持FXP传输
AllowForeignAddress on
PassivePorts 40000 40999

3.5 加快连接速度,关闭DNS反解
UseReverseDNS off
IdentLookups off

3.6 只允许部分网段访问FTP
<Limit LOGIN>
Order allow,deny
Allow from 10.10.
Deny from all
</Limit>

4、<Limit>参数说明

4.1 限制的动作
CWD: Change Working Directory 改变目录
MKD: Make Directory 创建目录
RNFR: ReName FRom 更改目录名
DELE: DELEte 删除文件
RMD: ReMove Directory 删除目录
RETR: RETRieve 下载
STOR: STORe 上传
READ: 可读文件的权限,但不包括列目录
WRITE: 写文件或目录的权限,包括MKD和RMD
DIRS: 列目录的权限
LOGIN: 登陆的权限
ALL: 所有权限

4.2 <Limit>所应用的对象

AllowUser/DenyUser AllowGroup/DenyGroup AllowALL/DenyAll ……

5、部分安全策略配置

5.1 隐藏proftpd服务器的版本信息
ServerIdent off

5.2 伪装Proftpd服务器
伪装成windows下的ftp服务器Serv-U
ServerIdent on "Serv-U FTP Server v6.4 for Winsock ready ……"

5.3 使用非root权限运行proftpd服务:
User nobody
Group nobody

禁止root登陆:
RootLogin off

对ftp用户使用chroot限制:
DefaultRoot ~

控制ftp命令缓冲区大小:
CommandBufferSize 512

修改proftpd服务器使用的端口:
Port 2121

5.4 监控Proftpd服务器运行情况

5.4.1 记录ftp连接数
watch -n 360 /usr/local/proftpd/bin/ftpcount
每隔360秒显示一次连接用户数量的信息

5.4.2 查找谁与FTP服务器连接
/usr/local/proftpd/bin/ftpwho

5.5 服务器配置文件的修改(proftpd.conf)

5.5.1 通过IP地址限制FTP访问
#只允许10.10.0.0/16网段用户访问
<Limit LOGIN>
Order allow,deny
Allow from 10.10.
Deny from all
</Limit>

5.5.2 使用pam作为proftpd授权用户的鉴别方法
AuthPAM on
AuthPAMConfig ftp

修改/etc/pam.d/ftp相应文件

5.5.3 限制FTP命令特权

*禁止一些用户创建和删除目录的特权
<Directory /*>
<Limit MKD RMD>
Order deny,allow
DenyGroup badusers
AllowAll
</Limit>
</Directory>

*建立只能上载的FTP服务器
<Directory /*>
<Limit RETE>
DenyAll
</Limit>
</Directory>

*限制对单个目录的访问
<Directory /*>
<Limit CWD>
DenyAll
</Limit>
</Directory>

*限制目录浏览特权
<Directory /my/mp3s>
<Limit DIRS>
DenyGroup newfriends
</Limit>
</Directory>

5.5.4 使不同用户之间相互隔离
一些用户通常访问ISP的FTP服务器时,会看到一些不应当的系统信息,因此隐藏这些信息是必要的,下面是一个配置:
DefaultRoot “/www”
<Directory /www>
HideNoAccess on
<Limit ALL>
IgnoreHidden on
</Limit>
</Directory>
HideNoAccess指令将用户隐藏/www 目录下的所有条目,IgnoreHidden指令指示ProFTPD 服务器忽略用户所有指令。

6、加密FTP服务器与客户端的连接
需要在编译安装的时候配置支持相应模块
./configure --with-modules=mod_tls

6.1 制作凭证
# mkdir /etc/ssl/certs
# mkdir /etc/ssl/private
# chmod og-rwx /etc/ssl/private
# mkdir /etc/ssl/crl
# mkdir /etc/ssl/newcerts
修改 /etc/ssl/openssl.cnf
把 dir = ./demoCA 改成 dir = /etc/ssl

6.2 制作最高层认证中心 (Root CA)
Private Key ( Public Key )
# openssl genrsa -des3 -out /etc/ssl/private/myrootca.key 2048
# chmod og-rwx /etc/ssl/private/myrootca.key
填写凭证申请书 (然后按照问题回答即可)
#openssl req -new -key /etc/ssl/private/myrootca.key -out /tmp/myrootca.req
签发凭证
# openssl x509 -req -days 7305 -sha1 -extfile /etc/ssl/openssl.cnf -extensions v3_ca -signkey /etc/ssl/private/myrootca.key
-in /tmp/myrootca.req -out /etc/ssl/certs/myrootca.crt
# rm -f /tmp/myrootca.req

6.3 用最高层认证中心签发凭证
制作服务器用的凭证
# openssl genrsa -out /etc/ssl/private/myhost.key 2048
# chmod og-rwx /etc/ssl/private/myhost.key
填写凭证申请书
# openssl req -new -key /etc/ssl/private/myhost.key -out /tmp/myhost.req
# openssl x509 -req -days 3650 -sha1 -extfile /etc/ssl/openssl.cnf -extensions v3_req -CA /etc/ssl/certs/myrootca.crt
-CAkey /etc/ssl/private/myrootca.key -CAserial /etc/ssl/myrootca.srl
-CAcreateserial -in /tmp/myhost.req -out /etc/ssl/certs/myhost.crt
# rm -f /tmp/myhost.req

6.4 接下来设定proftpd.conf,主要是在最后加上以下有关TLS的设置:

< IfModule mod_tls.c >
TLSEngine on
TLSLog /var/log/tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRequired On
TLSRSACertificateFile /etc/ssl/certs/myhost.crt
TLSRSACertificateKeyFile /etc/ssl/private/myhost.key
TLSCACertificateFile /etc/ssl/certs/myrootca.crt
TLSVerifyClient On
< /IfModule >

7、有关MySQL+Quota的设置
需要在编译安装的时候配置支持相应模块
./configure --with-modules=mod_sql:mod_sql_mysql
--with-modules=mod_quotatab:mod_quotatab_sql
--with-includes=/usr/local/mysql/include \
--with-libraries=/usr/local/mysql/lib
7.1 数据库的导入

mysql mysql -uroot -ppassword
create database ftpdb
grant select, update on ftpdb.* to proftpd@localhost identified by 'password'

use ftpdb


CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT='ProFTP group table';

INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');

CREATE TABLE `ftpquotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`per_session` enum('false','true') NOT NULL default 'false',
`limit_type` enum('soft','hard') NOT NULL default 'soft',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default '',
`passwd` varchar(32) NOT NULL default '',
`uid` smallint(6) NOT NULL default '5500',
`gid` smallint(6) NOT NULL default '5500',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/sbin/nologin',
`count` int(11) NOT NULL default '0',
`accessed` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='ProFTP user table' ;



7.2 在proftpd.conf文件中加入sql相关配置:

SQLAuthTypes Backend Plaintext
#Backend表示用户认证方式为MySQL数据库的认证方式
#Plaintext表示明文认证方式,排在最前面的为最先使用的方式
SQLAuthenticate users* groups*

# databasename@host database_user user_password
SQLConnectInfo ftpdb@localhost proftpd password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLHomedirOnDemand on
#如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

7.3 加入Quota磁盘配额相关设置

QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
QuotaLog "/var/log/quota"
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 ftpquotalimits 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 ftpquotatallies 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}'" ftpquotatallies

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

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


7.4 ftpquotalimits表设置说明

name: - 用户帐号
quota type: - user, group, class, all (we use user)
per_session: - true or false (we use true)
limit_type: - 硬限制 or 软限制 (我们一般用硬限制)
bytes_in_avail: - 允许上传的字节数
bytes_out_avail: - 允许下载的字节数
bytes_xfer_avail: - 允许传输的字节数(包括上传/下载)
files_in_avail: - 允许上传的文件数
files_out_avail: - 允许下载的文件数
files_xfer_avail: - 允许传输的文件数(包括上传/下载)

8、其他
8.1 使用命令ftpshut
基本格式:
ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]
参数说明:
-l min: 在ftp关闭服务之前的几分钟内,尝试建立新的ftp连接均不被接受
-d min: 在ftp关闭服务之前的几分钟内,已经建立的ftp连接将被中止
time: 在多少时间后,服务器将关闭ftp服务,格式有两种
+number 经过number分钟后关闭
MMHH 在今天MM:HH服务器将关闭

8.2 welcome.msg 欢迎文件可用参数

%T 目前的时间
%F 所在硬盘剩下的容量
%C 目前所在的目录
%R Client 端的主机名称
%L Server 端的主机名称
%U 使用者帐户名称
%M 最大允许连接人数
%N 目前的服务器连接人数
%E FTP服务器管理员的 email
%i 本次上传的文件数量
%o 本次下载的文件数量
%t 本次上传+下载的文件数量



应用举例:

欢迎您%U, 这是Frank的测试FTP服务器;
目前时间是:%T;
本服务器最多允许%M个用户连接数;
目前服务器上已有%N个用户连接数;
目前你所在的目录是%C;
目录所在的硬盘还剩下%F字节。

8.3 proftpd的web管理软件:Myftpadmin-0.61
下载地址:http://www.sfr-fresh.com/unix/privat/myftpadmin_061.tar

11月30
  一、出门“打的”,乘电梯上七楼的健身房,然后在跑步机上挥汗如雨。
  
  二、半夜上网,去歌厅、舞厅,困了不睡觉。之后失眠,再吃安眠药。
  
  三、管儿子叫“小兔崽子”,管宠物狗叫“儿子”。
  
  四、挑最有特色的饭店吃饭,吃最可口的美食,在酒桌上大谈肥胖之害。
  
  五、把路边上植树的地方用来盖楼,在家里栽盆景。
  
  六、乡下的爹娘哪不舒服不知道,家里的小狗打了个喷嚏赶紧去宠物医院。
  
  七、漂亮的MM们,鞋上有一个小泥点子,一定要用高级的餐巾纸小心地揩掉;口红淡了一定要补妆,很淑女;可是路边烧烤摊上从俺农村老家贩来的死鸡崽子,都卖给了她们。
  
  八、手机里存了二、三百个电话号码,没有一个是邻居的。
  
  九、酒局多时作无可奈何状,吃完“酒神”、“力克”等解酒药,慷慨赴宴如赴死。没酒喝时打电话:“哎,哥们儿,过来啊,整点儿,我请客……”
  
  十、饭店越来越多,厕所越来越少。厕所的标志是“此地禁止便溺”。
  
  十一、学生们穿得越来越时尚,上学像放学,放学像上学。上学时猛谈恋爱,工作了找不到对象。
  
  十二、爱情在自己的电脑里,老婆在别人的电脑里。
  
  十三、家里安了防盗门、防盗窗,却总是丢钥匙,然后请开锁高手撬自己家里的门。
  
  十四、建广场时,把大树砍掉,再立12根水泥柱子,建一片水泥的“小木屋”和“树墩子”。
  
  十五、追求越来越高:谋高级职位、穿高级服装、住高级住宅、坐高级轿车、吃高级饭店,患高血脂 、高血压。
  
  十六、用排骨喂狗,吃乡下喂鸡的野菜。
11月30
[root@CentOS~ ]w        //*查看当前登陆的所有用户*//
 05:57:16 up 10 min,  4 users,  load average: 0.00, 0.23, 0.23
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty4     -                05:56   21.00s  0.11s  0.11s -bash
root     tty5     -                05:56   26.00s  0.07s  0.07s -bash
root     tty6     -                05:55   32.00s  0.17s  0.17s -bash
root     pts/0    192.168.80.196   05:57    0.00s  0.12s  0.02s w

为了T出其他的两个用户tty5和tty6,则执行:skill -kill tty5skill -kill tty6
[root@CentOS~ ]skill -kill tty5
[root@CentOS~ ]skill -kill tty6
[root@CentOS~ ]w
 05:58:08 up 11 min,  2 users,  load average: 0.00, 0.19, 0.21
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty4     -                05:56    1:13   0.11s  0.11s -bash
root     pts/0    192.168.80.196   05:57    0.00s  0.16s  0.02s w


11月26

(一):目录结构
tomcat的目录结构如下:

                                                                                                                                                                                                                                                                                                
目录名简介
bin存放启动和关闭tomcat脚本
conf包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
work存放jsp编译后产生的class文件
webapp存放应用程序示例,以后你要部署的应用程序也要放到此目录
logs存放日志文件
lib/japser/common这三个目录主要存放tomcat所需的jar文件

(二):server.xml配置简介
下面我们将讲述这个文件中的基本配置信息,更具体的配置信息见tomcat的文档

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
元素名属性解释
serverport指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown指定向端口发送的命令字符串
servicename指定service的名字
Connector
            (表示客户端和service之间的连接)
port指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors服务器启动时创建的处理请求的线程数
maxProcessors最大可以创建的处理请求的线程数
enableLookups如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout指定超时的时间数(以毫秒为单位)
Engine
            (表示指定service中的请求处理机,接收和处理来自Connector的请求)
defaultHost指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context
            (表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)
docBase应用程序的路径或者是WAR文件存放的路径
path表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
            

host
            (表示一个虚拟主机)

            
name指定主机名
appBase应用程序基本目录,即存放应用程序的目录
unpackWARs如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
            

Logger
            (表示日志,调试和错误信息)

            
className指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix指定log文件的前缀
suffix指定log文件的后缀
timestamp如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
            

Realm
            (表示存放用户名,密码及role的数据库)

            
className指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
            

Valve
            (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)

            
className            

指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息

            
directory指定log文件存放的位置
pattern有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多

注意:1:经过我测试,我设置Context 的path="",reloadable=true,然后放一个WAR文件到webapps目录,结果tomcat不能检测出此文件(重起tomcat可以),而把此文件解压,则tomcat会自动检测出这个新的应用程序。如果不能自动检测WAR文件,我们可以利用下面管理中讲的方法来部署应用程序。

2:默认的server.xml中,Realm元素只设置了一个className属性,但此文件中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了),通过Realm元素我们可以实现容器安全管理(Container Managed Security)。

3:还有一些元素我们没有介绍,如Parameter,loader,你可以通过tomcat的文档获取这些元素的信息。

(三):管理

1:配置
在进行具体的管理之前,我们先给tomcat添加一个用户,使这个用户有权限来进行管理。

打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:

                                    
            
<user name="zf" password="zf" roles="standard,manager"/>
            

注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,如果没有/符号的话,tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。

然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户名和密码即可。

2:应用程序列表
在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:

                                    
            
OK - Listed applications for virtual host localhost/ex:running:1/examples:running:1/webdav:running:0/tomcat-docs:running:0/manager:running:0/:running:0
            

上面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。

3:重新装载应用程序
在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:

                                    
            
OK - Reloaded application at context path /examples
            

表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。

4:显示session信息
在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下:

                                    
            
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes
            

5:启动和关闭应用程序
在浏览器中输入http://localhost:8080/manager/start?path=/exampleshttp://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。

6:部署及撤销部署
WAR有两种组织方式,一种是按一定的目录结构组织文件,一种是一个后缀为WAR的压缩包,因此它的部署方式也有两种:
(1):在浏览器中输入:http://localhost:8080/manager/install?path=/examples&war=file:/c:\examples
就会将按目录结构组织的WAR部署

(2):如果输入:http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:\examples.war!/
就会将按压缩包组织的WAR部署,注意此url后半部分一定要有!/号。

部署后就可以用 http://localhost:8080/examples访问了。

在浏览器中输入:http://localhost:8080/manager/remove?path=/examples
就会撤销刚才部署的应用程序。

(四):与apache集成
虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把apache和tomcat集成起来。

我们以linux系统为例介绍。

从apache网站下载apache1.3.22源代码版本,然后使用如下命令配置安装apache:

                                    
            
mkdir /usr/local/apachetar zxvf apache.1.32.tar.gzcd apache.1.32./configure --prefix=/usr/local/apache --enable-module=so makemake install
            

注意configure命令指定目标安装目录,并且加入DSO(Dynamic Shared Object)支持,注意一定不要忘了这一个选项。

然后下载webapp模块,将解压后mod_webapp.so文件放入apache的libexec目录,编辑apache的conf目录下的httpd.conf,在这个文件的最后加入下面三行:

                                    
            
LoadModule webapp_module libexec/mod_webapp.soWebAppConnection warpConnection warplocalhost:8008WebAppDeploy exampleswarpConnection /examples/ 
            

第一行是加入webapp模块,如果编译apache时不增加DSO支持,则无法使用LoadModule指令,第二行指定tomcat与apache的连接,第三行指定部署那个应用,这两个指令使用格式如下:

                                    
            
WebAppConnection [connection name] [provider] [host:port]WebAppDeploy [application name] [connection name] [url path]
            

其中connection name指定连接名,provider只能是warp,port端口与你的tomcat的配置文件server.xml最后几行指定的要保持一致。文件如下:

                                    
            
<Service name="Tomcat-Apache"> <Connector className="org.apache.catalina.connector.warp.WarpConnector"port="8008" minProcessors="5" maxProcessors="75"enableLookups="true"acceptCount="10" debug="0"/>******</Service>
            

application name与你在tomcat中部署的应用名一致,url path指定访问这个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用。

(五):中文问题
一般jsp的乱码问题可以通过在jsp中加入<%@ page contentType="text/html;charset=GB2312" %>来解决,至于servlet的乱码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。

11月25

前  言

  根据前面介绍的HTTP服务器的设置方法,我们已经拥有发布网页以及运行一些网站交互式程序的条件。但是,我们的服务器做为一台独立的主机,对于外界 来说,只拥有一个Global IP地址。也就是说,从某种意义上,在当前的状态下,它作为一台服务器,仅能供一个用户用于发布Web--因为不管让多少个域名指向我们的主机,都等于指 向了仅有的一个IP地址(访问的是同一个网站)。比如在CentOS下,默认的Web目录是/var/www/html/,如果我们将网页放置在这个目录 下,当服务器的IP地址或者指向服务器IP的域名被访问时,所能浏览到的只是/var/www/html/目录下放置的网页的内容。

  虽然通过开放用户目录Web发布权限的方法也能够实现多用户使用同一台服务器,但对于拥有域名(类似于“yourname.yeah.net”的指向 一个地址的免费域名除外)的一般用户,他们无法将它们的域名指向它们的用户Web目录--因为域名指向的是IP地址,而服务器又只拥有一个Global IP地址。

  在这里,我们通过构建虚拟主机,来实现一台服务器可以放置多个独立网站的功能。简单地说,虚拟主机就是将一台服务器虚拟为多台服务器,使得虽然服务器 只有一个Global IP地址,但当不同的域名指向服务器仅有的一个Global IP地址时,通过定义好的虚拟主机的规则,来识别哪些域名该指向服务器中哪个Web目录,从而达到服务器中有多个Web目录(包括一般用户的Web目录) (多个网站),也可以通过多个域名指向同一个Global IP地址来实现不同的多个网站在同一台服务器上的同时运作。


关于域名

  在这里所说的域名,指的是顶级域名或本站前面介绍过的动态域名。这些域名都是指向一个IP地址的。为了测试虚拟主机,请准备好至少两个以上的域名。可根据 动态域名的申请(no-ip.com) 中介绍的方法来添加两个以上的域名。

  在这里为了具体,以将本站主域名test1.whidc.net指向/var/www/html/、test2.whidc.net指向/home/whidc/public_html/为例加以说明。


虚拟主机的配置
 

  在Apache的主配置文件“httpd.conf”中,提供了虚拟主机的配置选项,我们只需修改其中虚拟主机的部分语句,就可以达到构建虚拟主机的 目的。但是鉴于虚拟主机可能是更新、修改比较频繁的项目之一(域名的增删、变化等等),我们在/etc/httpd/conf.d/目录下新建一个虚拟主 机的配置文件。如下:

[root@sample ~]# vi /etc/httpd/conf/httpd.conf  ← 编辑Apache配置文件
#NameVirtualHost *:80  ← 找到这一行,去掉行首的#
 ↓
NameVirtualHost *:80  ← 变为此状态
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost> ← 找到这一行,在其下添加如下部分:

<VirtualHost *:80>
ServerAdmin yourname@yourserver.com
DocumentRoot /var/www/html              ← test1.whidc.net所定义的规则
ServerName test1.whidc.net
ErrorLog logs/error_log
CustomLog logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerAdmin yourname@yourserver.com
DocumentRoot /home/whidc/public_html            ← test2.whidc.net所定义的规则
ServerName test2.whidc.net
ErrorLog logs/whidc_error_log
CustomLog logs/whidc_access_log common
</VirtualHost>

  然后重新启动HTTP服务,使虚拟主机的设置生效。

[root@sample ~]# service httpd restart
Stopping httpd:            [ OK ]
Starting httpd:             [ OK ]


测试虚拟主机

  通过虚拟主机配置文件中定义好的不同的域名访问,看是否能够按照定义好的规则指向相应的目录(网站)。

[root@sample ~]# echo "My site is test1.whidc.net " >> /var/www/html/index.html  ← 建立test1.whidc.net指向/var/www/html/下的测试页
[root@sample ~]# echo "My site is test2.whidc.net" >> /home/whidc/public_html/index.html  ← 建立test2.whidc.net指向/home/whidc/public_html/下的测试页

  然后分别在浏览器输入两个域名,如果每次都能够显示出相应域名的页面,说明虚拟主机已正常工作。

[root@sample ~]# rm -f /var/www/html/index.html  ← 删除测试用的遗留文件
[root@sample ~]# rm -f /home/whidc/public_html/index.html  ← 删除测试用的遗留文件

  如果以后需要增加或改动虚拟主机等,可以通过修改虚拟主机配置文件(/etc/httpd/conf.d/virtualhost.conf),添加新的虚拟主机规则来实现。

分页: 94/128 第一页 上页 89 90 91 92 93 94 95 96 97 98 下页 最后页 [ 显示模式: 摘要 | 列表 ]