Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。Apache成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。 + V- M2 g% T. y5 w
: z6 _1 z1 x ?2 }) r
几乎所有的Linux发布都安装Apache作为默认配置。SuSE7.1甚至预安装有包括各种高级模块选项的Apache,如PHP3,mod_perl和LDAP等等。用户会惊奇地发现系统安装成功就会有一个功能强大的Web服务器可供选择。虽然安装Apache并不是非常简单,但是如果有具有新的特性或安全补丁的Apache发布,则下载源代码包并编译新的Apache是值得的。 8 S1 E3 M1 C3 Z& c. P ) |* T, B4 P" v: z, k \
Apache不但具有庞大的用户群基础,并且有丰富的配置使用文档。Apache提供服务器端对脚本技术的支持,比如Perl、PHP等,Apache结合使用Apache JServ可以实现对java servlets及JSP的支持。Apache的很多模块实现安全方面的防护:如mod_auth提供对对服务器上数据进行适当的保护,而SSL模块则用来保护服务器和客户端之间的通信安全。 + V% N7 c; T% y. K- m t
/ S" S3 G) d+ c) S% b4 p2 c& x {8 @1 Z
下面我们再介绍一下Tomcat服务器软件,Tomcat是Sun和Apache合作做出来的JSPServer,支持Servlet2.2及JSP1.1等版本。笔者建议大家使用Tomcat,而且Tomcat未来将会取代JServ,成为Apache主要的Servlet&JSPEngine。Tomcat在设计上是以独立的Server执行,而不像Jserv是附在Apache中,这样就更可以发挥在servlet中,非HttpServlet的能力。Tomcat是Java程序,所以只要有JDK就可以使用,不需要考虑操作系统平台。 2 M$ {* o7 E6 [* u' ?, k " H3 e1 g& T( B" G 作为WEB服务器扩展的Tomcat服务器有一些问题需要说明: p! f+ z: Z Z- U: Q5 E+ Y
9 v9 b$ ^. t9 i* C' z5 r
当处理静态页面时,Tomcat不如Apache迅速。 / n* t6 @5 V) o2 d3 A5 K
Tomcat不象Apache一样可配置。 0 v2 Q7 G4 f' U- D: N6 d Tomcat不象Apache一样强壮。 8 f9 [* T, B5 i& L0 p2 J
/ @9 z3 C- C" {
基于以上原因,一个现实的网站使用一个Apache作为Web服务器,为网站的静态页面请求提供服务;并使用Tomcat服务器作为一个Servlet/JSP插件,显示网站的动态页面。 , t( Y, D, O) S3 p/ q* r
( e& z- J/ q- a, |" v 采用apache->tomcat这样的结构才具有更特出的优点,主要体现在具有更好的可扩展性和安全性。这种类型的站点的主要特点是每一个页面都可能是动态生成的,但这些数据中主要部分还是静态的(比如,各类图像GIF、JPG、PNG,流式媒体等),这种结构的优点是兼有可扩展性和安全性。 ' {0 h; k( O r! ~ s' V
* T) X2 f" w; g+ j5 C# i& N) h 一、应用环境 : ~9 m8 O) s% C
操作系统为Solaris8,应用环境为Java1.3(假定安装在/usr/java1.3目录下)、perl5.6(假定安装在/usr/local/bin目录下)和gzip(假定安装在/usr/local/bin目录下)。 " x" _" W3 q# i, R 8 j% }6 v( W( T p: ]
二、软件包的下载、编译与安装 8 h' Z- N9 V4 C& W' o# b 1、下载地址 ' \# `/ O# E Q \) K " L B# {. k1 j9 K1 ? 在http://www.apache.org可下载Apache源代码软件包apache_1.3.27.tar.gz。 ' F5 G5 b$ D. d2 ~+ T$ H
在http://jakarta.apache.org/builds/tomcat/release/v4.1.12/src/可下载Tomcat源代码软件包jakarta-tomcat-4.1.12-src.tar.gz。 1 N0 L& G& I+ F 在http://jakarta.apache.org/builds ... elease/v4.1.12/bin/可下载已编译的Tomcat应用软件包jakarta-tomcat-4.1.12.tar.gz。 # W6 B$ n- ]% [& e/ Q / {* c7 B' x6 K. \: \' } 2、编译与安装 0 M7 n6 P. T* R4 _$ H 6 g! @6 Z9 f* k- [5 e, a, y 假设各软件包已下载到当前的某个工作目录(如:/home/tmp)下,Apache和Tomcat将安装在/home目录下。在当前目录我们可以进行如下操作。 , u6 f" T6 d1 B1 D 9 u( {. o8 \& H
1)编译和安装Apache应用服务 0 R+ `! Z( V5 K' Z0 |
5 `0 L. x, r+ ]$ L; O ①解包 k' A/ ]8 Y; x) B! Q
+ c% a& X; u7 i) ^4 D g$ l $/usr/local/bin/gzip-dc./apache_1.3.27.tar.gz|tarxf- 4 O3 U. v: B# L! Z 2 N( D& S0 w5 |7 O% D- [; _
②编译 : m3 F2 \" ^5 `- U& X . U, B3 S/ n- r/ L+ Y9 Y $cd apache_1.3.27 * H; h- ?6 \. W* X! M
$./configure--prefix=/home/apache-1.3.27 2 ^; q+ w# T& R) S- \ --with-perl=/usr/local/bin/perl--enable-module=so 1 G# |" ^. k. y/ ?1 d
& c! F' J/ O% @) | 假设perl的解释命令安装在/usr/local/bin目录下,Apache服务安装在/home/apache-1.3.27目录下。 : b3 M& ?6 ~2 o. c
0 c% F+ D+ C" w0 Y/ N $make 6 g" y. @* F. M3 Q; v
- l3 g! n9 Z0 @ P. `, j! j ③安装 - N7 S, h! O. ?/ m$ g
2 p, B; n Z5 G x. w0 y1 y $su # N# _; P, T9 |5 X( J$ c #make install # Q' W! Z, G+ w : P8 g2 }5 z% k6 ]) ? 2)编译与安装mod_jk插件 9 y1 a9 S4 z3 K2 ?- b' z
}0 G0 d. G% P ①解包 " P- [" i' e0 m; m0 u7 |, a8 t ; h) Z) f9 U% |8 U
$/usr/local/bin/gzip-dcjakarta-tomcat-4.1.12-src.tar.gz|tarxf- : c7 @4 m! D$ o' a4 C
$ W- T5 _7 m8 a( A6 R, Q ②编译 - Y1 u% S4 w+ y! g
+ M. a, L" k) z- g& i, P $cd jakarta-tomcat-4.1.12-src/src/native/apache1.3 0 E7 m' x {4 C5 h V8 j+ m' q" | $/home/apache-1.3.27/bin/apxs-omod_jk.so-D SOLARIS-I../jk-I/ " P$ \. n' |* e5 I; W usr/java1.3/include-I/usr/java1.3/include/solaris-lposix4-c*.c../jk/*.c % L2 [9 g1 i9 y3 R: q
/ ?% o3 u0 }2 E# [% Z. i
假定Java安装在/usr/java1.3目录下。 0 W7 G4 k" d5 [* O9 H
7 |$ E( E9 O3 f1 ~4 a6 }
③安装 . i, K2 r1 R0 J5 { 7 D! T: n1 d' j" X& @ $su ' t3 l0 b6 @4 K0 H y d3 c #/home/apache-1.3.27/bin/apxs-i-a-njk mod_jk.so * V9 n1 l, D0 m% f1 N5 u- |4 a' M! l
cp mod_jk.so/home/apache-1.3.27/libexec/mod_jk.so . @; ^: G, c* O& u) w chmod 755 /home/apache-1.3.27/libexec/mod_jk.so - r5 g6 W: c2 ~8 Y x4 S0 | [activating module`jkin/home/apache-1.3.27/conf/httpd.conf] ! h4 ?* I8 s9 r2 Y2 ]9 k
3 f/ T: z2 c0 m4 N6 V! a1 V `/ v
3)安装Tomcat服务 0 {) d% l/ ?6 U; Y) J! H$ w 2 }. U/ l. E) x$ h; P( ~4 u
用超级用户身份把已编译的Tomcat4.1.12解包到/home目录下即可。 4 C7 x( H- X# d+ P# U
2 S. |1 U9 g6 l# F6 o% [
$su 5 T3 Z5 B/ ^6 h4 ]% J" a: Y
#/usr/local/bin/gzip-dcjakarta-tomcat-4.1.12.tar.gz|(cd/home;tarxf-) D: [( z9 n2 B y6 i5 x" @6 ]
6 v, H, F" G6 C$ M/ T# }. x
3、参数配置 7 r! p5 D5 E& Q$ A4 ?3 C
5 U8 @$ u" h8 i* `6 g. I- ~
(1)配置Apache服务 6 v1 K' k4 N) v$ t$ F" w$ O
6 l- n4 u+ n; o$ a
用vi命令打开Apache的配置文件httpd.conf。 3 _% |% B5 M( c5 [" U, p& ?, T + d {4 P: ^& k d2 U$ Y) P #cd /home/apache-1.3.27/conf * G% r' a4 H' d: | #vi httpd.conf 6 P7 [3 H6 Z9 Y1 g$ M" }
. L- H' z3 f* r) | 在末尾添加以下内容。 : g6 n. p5 }4 g1 Z, U0 I# ]4 X - x1 @' f) c! {5 [5 o
JkWorkersFile/home/jakarta-tomcat-4.1.12/conf/workers.properties 0 V. P: {3 }) x: r- e6 F
JkLogFile/home/apache-1.3.27/logs/mod_jk.log 9 _7 J* [0 v- O , `9 ?2 [/ y) ~) @/ x0 i6 C/ b 注意:日志文件可根据具体情况调整。 & s! G4 s4 {. j8 I $ `) r- ?, ^/ a( R: s, g JkLogLevelwarn . {: l: c0 y3 A, T JkMount/*.jspajp13 6 J3 k0 Y2 O, u3 [+ I" H- W6 e JkMount/servlet/*.jspajp13 E- k T8 j+ R3 {; O( n. x$ }
/ m" \6 k0 _3 g+ j0 o( j4 ?* M (2)配置Tomcat服务 # ^9 W3 m j4 j% S7 V5 u , z1 b* h6 w( ^
首先,修改server.xml文件。 6 R4 P {: A6 K
1 N e" P$ S r) W 这里假定存放Apache的Web网页的根目录为/home/htdocs。 . j5 ^% x- H- k4 t; N4 [
: b. s2 z% Y; d# i9 Y, w #cd /home/jakarta-tomcat-4.1.12/conf . B6 k |/ k) w1 g #vi server.xml - I1 A Z- F; @- }& c
# w$ P2 n1 M- ]+ x) z 然后,在Connectors部分嵌入如下内容。 / R9 J' p! }- J$ P/ ]' t2 a - K* M5 L S! e <ConnectorclassName="org.apache.tomcat.service. - I% h! m7 T8 Y$ e; F+ O
PoolTcpConnector"><Parametername="handler" / ^+ s, i; h7 f( n+ |2 e; c
value="org.apache.tomcat.service.connector.Ajp # G# \( V' h+ ?. {1 q% {, ~; l) Z 13ConnectionHandler"/> % Z3 k% ^2 R" H) v& T
<Parametername="port"value="8007"/> 2 q8 f2 @8 e6 B# [! Z </Connector> ' ^8 o$ M8 {7 b( M. C+ Z5 K8 Q; q
/ [# z2 U. C( H2 \: Z3 R- t 接着,在SpecialWebapps部分嵌入如下内容。 ( ^- @& k8 A6 p, y' y; u
: E3 d$ C0 a6 T8 z% f4 U+ Y$ S
<Contextpath="" 6 A# Q9 c+ E6 ?4 c- V
docBase="/home/htdocs" ; c( g4 `! ]% o
debug="0"> " k4 J8 T) X3 c1 q, p. E </Context> 8 f9 r- ?1 g9 n& _! k l7 m 6 q8 Z7 z8 w" d9 y$ E+ L
修改workers.properties文件。 8 o& _$ j$ M6 D% `5 F+ g
5 y* Z9 M- f# l4 ~' v
#vi workers.properties 2 A; K: d7 Q" [; ]( u
... * S9 Q' o3 S1 _4 X0 U) c workers.tomcat_home=/home/jakarta-tomcat-4.1.12 . g' q0 z$ p% G1 A0 f ... ( D8 M5 u. I6 }, [
workers.java_home=/usr/java1.3 3 e& B' n& W* p# t" d# ] ... Y) |. @; L7 c: ?% _7 Q4 p: k* D r ps=/ " T( Z$ W, j7 ]- n- ]0 W/ }# ?" h ... * _9 c" R" h1 r ?. ?: p: A
# X. t7 ^8 {* j/ `" Z* m9 |) X, N
随后,修改Tomcat启动和关闭命令文件。 - {9 r+ U# k2 f4 \0 Q
$ R2 t% F9 m$ v' B: O #cd ../bin ' T5 L) ~. P- @3 n #vi startup.sh 5 P. [* Y4 z$ L5 R* u8 F7 x
4 ]! u; o3 U* P$ Q3 c( M 再在"BASEDIR=`dirname$0`"语句前嵌入如下内容。 $ b/ _- m5 B- B$ t 7 m/ _( q$ z! p
PATH=/usr/java1.3/binPATH:. - \5 |5 l( l) K% d0 M0 F6 k JAVA_HOME=/usr/java1.3 & F" y0 d: E* M9 d+ R
TOMCAT_HOME=/home/jakarta-tomcat-4.1.12 $ R$ _. w/ J5 Y" y3 [/ @" Q
Export PATH JAVA_HOMETOMCAT_HOME $ S1 Q* N6 f7 y$ `4 [! `
#vi shutdown.sh 1 b+ V+ c/ c$ l a3 j7 `: G9 { B, L - }5 \) ~' s( o/ C- i Q2 L x
最后,在"BASEDIR=`dirname$0`"语句前嵌入如下内容。 * I( U0 \5 B2 w, C f, T. G4 H
6 M1 G3 R q5 _7 V PATH=/usr/java1.3/binPATH:. ; C2 P1 Q' r. s e
JAVA_HOME=/usr/java1.3 * J& h3 I# M& t
TOMCAT_HOME=/home/jakarta-tomcat-4.1.12 ! r7 K* F& R. [0 L, J
Export PATH JAVA_HOMETOMCAT_HOME / G. b7 o; g+ s
( V. v4 J+ X, z7 z6 x0 ]( J ^ 至此,Apache和Tomcat服务器软件安装成功,上面是在UNIX(Solaris)平台下构建JSP网站的基本配置。Apache与Tomcat结合支持JSP动态网页开始是通过一个名为"mod_jserv"的插件来实现的,采用这种Apache/Jserv方式配置参数十分复杂,运行效率很低,而且对SSL(一种加密传输方式)的支持也不理想,因此Jakarta工作组新近开发了"mod_jk"插件,它很好地弥补了mod_jserv的缺点,而且能支持Apache以外的多种Web服务。关于这种Apache/Jk方式的实现原理,请参考有关资料。 5 A, F! T: v& [/ G* N * q5 V7 l7 Q. _5 T 三、UNIX或LIUNX环境下Web服务器的安全管理与维护 ( v+ G2 }4 k- U: r) Y9 [. ^ 1、Apache和Tomcat的启动和关闭 5 F: g, w. F7 k( {
#/home/apache-1.3.27/bin/apachectl start 启动 4 X) H$ s2 ^! x
#/home/apache-1.3.27/bin/apachectl stop 关闭 5 V- J1 Y: I- x4 m
#/home/jakarta-tomcat-4.1.12/bin/startup sh 启动 ! A) d) g& T( Y, \# w #/home/jakarta-tomcat-4.1.12/bin/shutdown sh 关闭 ( W. y0 H# d" B6 q
* [% I4 M3 x+ Y9 F; O; \ 2、Apache和Tomcat的web服务器的安全管理 3 K* w# ~7 Z/ f* u7 v* K
. t# K, n5 M5 T+ R/ ^. a+ C$ D) O
1)Apache和Tomcat都具有支持安全Socket层(SSL)的功能 ; Q9 d; Q+ A7 c. R - \! ^5 K; f- i Q! G
在Tomcat中声明安全性,WEB应用程序的安全性主要在相应的Web.xml中设置,Tomcat支持的鉴权机制为HTTP基本鉴权机制BASIC和基于表单的鉴权机制FROM(JSP网站)。 & M, F1 m% n2 ~7 W8 c2 `. |+ t
, C4 C. r9 G0 K8 n7 l 过滤是Tomcat 4的新功能,能够用过滤器来实现以前使用不便的或难以实现的功能,这些功能包括: , H h, V! e% t: O' T
3 M3 p- o; a9 T3 c- U: P$ r 资源访问(Web页、JSP页、servlet)的定制身份认证; ; C! ?% u0 P4 ~$ G. E 应用程序级的访问资源的审核和记录; & O6 x' n+ d ~3 x3 {0 u$ e' l1 @ 应用程序范围内对资源的加密访问,它建立在定制的加密方案基础上& U5 X1 ]$ B" N) e4 K4 P