一.Apache的基本配置及说明:
1 {0 S7 @; B! w1 l+ v" S- U" ]8 O8 x5 R% D& m
1.获得Apache:
) j8 a/ r' S; M7 B; D Q2 P
0 e) \; o' X$ z: U. C! \
获得apache
源代码最方便的方法是到http://www.apache.org,选择最新的版本。然后,
9 J" i( h" J q3 u! I, y7 o6 j( ztarxvzfapache_x.x.xx.tar.gz
# X* R, M* L, G9 ]5 F# ^( k0 [1 X, C E* _' w5 C. J/ Z. s
2.编译Apache
6 q4 B. o4 o+ l+ o# r! y0 @在src目录下
7 a/ y3 {9 L9 |
./configure可用./configure--help│less得到帮助,
! \+ h$ K7 L$ k" w7 W, X8 ^make,makeinstall,install
' g; N' T3 p ]; }: _& d+ _
k, q, c( o( [; i3 z5 c5 T3.apache的启动和关闭
8 ^2 z' D, e, H6 T) o. u9 p9 gsbin/apachectlstart
$ a0 ?8 @7 s+ j3 ?5 H5 m
sbin/apachectlstop
% `9 ?, ~* @" ^' P6 [- R
sbin/apachectlrestart(重起)
4 u2 o8 [4 u0 Q& Z* Y
0 B6 u! s& Y( S. K4.一些模块介绍:
$ N" M# y o* a
下列的组模块控制进入和验证
$ D7 m' [- V; A
Acess进入控制
1 O. o' w; b1 A6 L! b5 ^1 L) m
auth检查
Unix-style口令和组文件的基本的验证。
( y' \7 H$ x8 P; v# G
auth-anon使用匿名的
FTP-styleusernames和口令。
+ w" e- T/ y+ z* }1 Qauth-dbm使用Berkeleydb文件存储usernames,口令,和组
信息。如果你有很多usernames并关心
性能,这是很有用的。
0 m+ R/ y5 N! @+ ~digest使用HTTP文摘认证,这比基本认证更
安全。
G8 _# b2 M+ B% qexpire模块让你定制Expire过期
时间7 T0 N/ E6 E* b6 g; T+ {
5 l6 l# P$ W0 g8 t7 K# r- | S9 t& @
5.Apache1.3的缺省目录布局是:
! m; |" b8 j) v! J6 `; a# P./bin
# }: B; w" k: y- g服务器二进制,apachectl原本
. }# ^) ^9 C I3 M+ q8 d: q) o./conf
* {3 H2 C `) Q5 ^6 V8 {+ Q; l
Apache配置文件
# G! _9 _! G$ g
./include/apache
, B# x9 r1 Z; p IApache标题文件
9 Y* \: y7 S6 e& i: h2 t./libexec
, r K( a" f, u
共用的
对象文件
. H( b3 f% P! p( `9 h+ X5 J) o0 z./man
( s% [4 n+ s& w
man页
& X1 D3 ]! C3 u" W* ?./sbin
7 `9 `! T" A8 z8 ]7 e4 N
服务器二进制,apachectl原本,logrotator
* D: o; E: Q) C
./cgi-bin
. `+ G6 ^7 A+ G1 V缺省CGI原本/二进制的目录
T, j. D2 O, U) }. b) E./share/htdocs
) \" M6 l1 v* f. C( A缺省文件根
' p& U; V6 u, e) H1 ?
./htdocs/manual
) C8 _5 y1 ] B' e/ U8 @' O
Apache手册
: v* L7 O2 ]0 j; C- ?
./share/icon
& X+ b( X* d1 X' |包含各种图标GIFs的目录
? {: J4 E& J9 o
./var/apache/log
4 z6 K* C8 ]7 x& Z/ w3 wlog文件的目录
2 O3 F9 G9 E$ p) \' h I: V2 }- w./var/apache/proxy
j8 W6 m# ?! U, C3 B
proxy缓存目录
3 s3 I+ c& ^9 z- Q; Q, E./var/apache/run
7 P5 F$ [! r, q
httpd.pid(包含主要的httpd过程标识符的文件)在此目录
& `6 {/ o$ y1 Z/ Q, S' I! F. w, M1 t( K6 C, R
6.主要文件如下:
7 l" Q0 Q0 l; W- V: w7 Ohttpd.conf,在/usr/local/apache/conf或/etc/httpd/conf下
1 p) p6 X, F. M( O" Q% U& Rapachectl,在/usr/local/apache/bin或/etc/httpd/bin下
9 _8 \: U) }3 g8 J, v
access_log,纪录
用户访问信息,在../logs里
) Z7 c: T* F5 x+ V: t! o- Oerror_log,纪录用户访问错误信息,也在../logs里
5 R" d% A" k/ D% j
1 b8 G( }" h; o" R7.httpd.conf基本设置
2 x7 j/ F) ]$ o# M1 D$ L4 ?
Port,Apache在哪一个
TCP端口进行侦听,HTTP的默认端口为80。如果你使用其它端口,你不得不在
URLs中指定端口来连接你的服务器,
4 @) n5 o: H7 i7 Z6 ]+ t9 n) A) ]4 c% L4 B6 L6 Q4 C
User,Group由于安全上的原因,在
Linux上,可以通过把User和Group都设置成nobody
& l7 K5 Z( W, G x; {6 w# h
$ S0 D- n- T) c" Z: d* D
ServerRoot参数应该是Apache安装的基础。除非你移动了周围的资料,否则其值与你所给定的值一样。
9 s5 o/ K. L7 t& W9 W# R
+ c7 h/ D+ C- T$ [) O2 D: D% KServerName,如果你的
机器有多个名称或者IP地址,设置Apache表征服务器的名称。
* C& S( c+ m' E6 {. r! d- Z, t
1 I% w7 v9 u. P
DocumentRoot是Web树的根目录,
4 `. u- m0 J. O) {+ j7 y& _% L: j
# Z" v* K/ k: G F, C yUserDir在启用"username处理请求时,此指令告诉Apache哪个目录追加到用户的主目录(home)。UserDir被设置为public_html。用户将只有基本的网页服务
功能,
3 v8 }# F v k' S% o" @- c
! @' }2 ]6 n2 ]$ k5 S+ q, T0 B%26lt;Directory%26gt;是一个容器指令。%26lt;/Directive%26gt;格式的结束指令。
7 y _9 e4 m5 D( W# _ J
& d/ s5 i- Y& W" R6 f- `
%26lt;Directive%26gt;及相关的%26lt;Files%26gt;和%26lt;FilesMatch%26gt;指令的目的,是为了让你在每个目录或者每个文件的基础上,控制Apache行为的方式。指令放在%26lt;Directory%26gt;中,也适用于子目录。
# h6 C8 o- M8 n9 w8 _6 E* u
/ u5 X* ]2 N, C" y. _; X5 gFollowSymLinks选项,告诉Apache它可以从文档根目录内部到文档根目录外部跟踪符号链接。在文档根目录内部,FollowSymLinks和Indexes都处于开启状态(on)。万一缺省的索引文件(通常为index.html)不存在时,最后允许目录列表显示。
0 Q/ ^* [- _1 r4 X' n" [
0 o% c9 r2 Y7 W; M$ LDirectory中,用Options指令你可以控制什么选项是被允许的。
0 H7 k$ W( |8 ~% E, W; T" e$ X3 c; N
) C, k4 M/ V, o& v" SOptions指令:
' I& g2 F2 H ]7 e& z- c: x4 p1)ExecCGICGI脚本
程序能够运行于该目录树。
7 X: X& ?1 `0 [9 f2 m: }
2)FollowSymLinks在该目录中,服务器将跟踪符号链接。注意:即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名。注意:如果在区域内设置,该选项会被忽略。
* r5 p& @% O3 f! m: r5 \" v4 {9 M3 }
3)Includes服务器端包容被允许。
( M& c; ^9 _* B9 ?4)IncludesNOEXEC服务器端引用被允许,但#exec命令和CGI脚本程序的#include被禁止。
5 m0 ?. d4 i3 {) C* ]5)Indexes如果要求映射到目录的URL和在该目录里没有DirectoryIndex(例如,index.html),那么服务器将返回格式化的目录列表。
' K" h1 e; Q% F* q& n
6)MultiViews处理多重浏览内容被允许。
$ S) x7 C \! N. A* e" C
7)SymLinksIfOwnerMatch通过与用户id一样的链接,服务器只跟踪目标文件或者目录所拥有的符号链接。
* O0 ?! K4 j- K! C: d: U8)All除MultiViews外的一切东西。要是没有Options指令,默认为all.
D% \# g) P1 r2 ]8 r! ^3 n$ x0 U3 W2 ?) t' [# Z; t: r$ }
AccessFileName命令来设置(缺省设置为.htaccess)。在任何目录中,Apache配置指令可被放入一个叫做.htaccess的文件。指令也可应用于目录里的子目录。在访问文件中,
i$ A1 t1 n$ K9 y
0 C5 {- c" J1 ~3 N. D4 n
AllowOverride控制哪个指令将被使用。如果AllowOverride被设置为none。Apache甚至不会检查访问文件。
4 V) T) \& N! Q! z8 T
4 e9 j2 ~5 `% A; RAllowOverride参数:
) b5 Z6 s5 p) d2 ^( _1 t5 ^# w1)AuthConfig,授权指令哪一个允许使用;
+ Y' m5 [ A0 O6 C$ D2)FileInfo,用来控制文档
类型和处理方法的指令;
, i0 U% o. e5 \2 N4 u2 R3)Indexes,使用其中的一个指令来控制目录列表、图标等的显示;
9 @' @7 ~) R4 F7 b3 d3 G4)Limit,允许使用指令来控制主机访问;
! F- P: R% H: O9 o+ A4 _; U# h- o5)Options,使用Options指令中的一个。
7 ]# W4 m# v( K
$ o- x8 w$ o# J“allow”和“deny”指令就是用来控制访问的。第三个指令“order”,控制这些指令的使用顺序。如果你把顺序设置成allow,deny,而没有指定哪个主机是被拒绝的话,则所有主机都被假定为禁止访问。在本例子中,allow指令被选中,deny指令被普遍应用。在.htaccess文件或者%26lt;Directory%26gt;指令内,更多典型的配置可能是:
6 L+ }8 [+ D; A W( V5 C- h* R/ y
orderallow,deny
7 E4 ?* j, U3 c0 m+ O
allowfromall
/ Q' t( @, l) z: p5 s; Gdenyaaa.com
) s/ [0 x+ ]% H4 }7 H6 {所有主机被允许,除了那些来自aaa.com域的主机。
) W( f' V6 K" z+ V3 w' j" n
$ g! R; N8 p0 t! w! x7 A( M如果相反,
/ j9 `: d! |6 _5 ]
orderdeny,allow
8 E9 i: P2 C5 odenyfromall
3 T( D/ V; t8 M1 _: R6 callowfrom11.23.44
9 |5 k9 C1 d$ d$ I) ideny首先被检查。只有来自11.23.44IP
网络的主机才被允许访问。它也可能指定网络掩码,参数11.23.44.0/255.255.255.0相当于上面的例子。
: m, M( V3 h0 C5 O [! J; e$ d; i2 _
二.特殊配置:
' m( {# N+ g4 [) [, T0 N) o
1.支持用户个人主页:
8 M9 R$ Q6 n6 v$ c! Y3 a在../conf/httpd.conf中加入
8 H+ g1 a# i: T0 _' Y2 r
UserDir/home/*/public_html
) o% J7 d: Q6 N) B8 a* T- P设置用户可以使用CGI等:
9 b- \( {) @+ S" p- s! Y%26lt;Directory/home/*/public_html/cgi-bin%26gt;
2 P2 o0 P1 y* h* C u
optionsExecCGI
. w. [( b' j/ |, R: m0 pSetHandlercgi-bin#如果在全局设置了AddHandlercgi-bin.cgi...,
0 G( {* ~/ V* M& `3 S% K ^#这儿就不用设了
$ H5 a4 n# a9 J9 O. s7 j: E# R%26lt;/Directory%26gt;
' A5 t( ?' I& ~0 K- j4 V) E
" Q* s) B/ z" v; P$ u+ ]3 f2.
虚拟主机设置:
+ f9 k+ W# E5 Z, {3 J4 }' e9 k
?3 Z' e r1 O+ M0 {/ @$ B1)基于IP的虚拟主机
) \) j. o# s( G" H5 V$ I! p
若该机器的IP地址为192.168.0.2,虚拟的IP为192.168.0.3
( s" c: k5 m: L8 `
首先,在一台机器的
网卡上绑定多个IP地址去服务多个虚拟主机。
% }6 N& o3 x1 v: `) v
#/sbin/ifconfigeth0:0192.168.0.2netmask255.255.255.0broadcast192.168.11.255up
% z3 O" S E# _2 \, E6 x' D
#/sbin/routeadd-host192.168.0.2eth0:0
6 X2 C- C- k0 Q# ~0 R: g
- ?: T; t+ C2 z设置../conf/httpd.conf文件:
. Y3 p, H$ C" B0 |看DocumentRoot是什么,如果为/home/httpd
- ^' c* S, h+ O K
%26lt;VirtualHost192.168.0.3%26gt;
- N. |: R* C) }7 u B# m
DocumentRoot/home/httpd/aaa
$ t5 N* u; @: s% r: m6 k
%26lt;/VirtualHost%26gt;
* ~0 s6 O- m4 q9 |
6 G( z; d- e/ [* }' Q( d0 Q. { n
创建目录
! L6 Q! R9 R$ s8 O( M2 E1 ]! C
/home/httpd/aaa,
: N' m) a% s5 @& p; l. f7 J
& v5 X, \* t2 S! D, Q% [2)基于名字的虚拟主机:
4 i. j! d/ u2 T/ b" k* m编辑../conf/httpd.conf
( F% |" p' z7 W4 E% f& V- A1 Z4 b7 O! V! q
NameVirtualHost192.168.0.2
9 j+ V' y1 `/ c9 q( o%26lt;VirtualHost192.168.11.2%26gt;
* d1 z1 `0 N8 u/ r. I/ A
DocumentRoot/home/httpd/aaa
$ i# E! \7 ~' S- z$ Q: q+ L6 W) ], P$ OServerNameaaa.yourdomain.com
1 W/ Q2 Z0 S/ l) t& G1 I%26lt;/VirtualHost%26gt;
' ^# _; O) g& Y2 @
% \% j6 k+ L8 b; u
要有NameVirtualHost在最前面,下面依次为各个虚拟主机,
6 R6 J! ?' r3 p, F8 a; x还需要把aaa.yourdomain.com的DNS都指向IP地址192.168.0.2
* B7 Q) `, O2 O( e4 k6 c. i) h
% g: P; F1 B4 l7 P7 t3.Apache用户认证
! m4 T# G+ s' L+ @基本的Apache用户认证
8 l: _: i0 T% L A0 f. N9 i1 M4 _假定,对目录/home/aaa下的文件需要做到用户认证,在httpd.conf
! N' _4 R5 P1 ]2 U6 I; k
中加入下面的行
2 W) c$ a3 D- S5 p* M$ S; l+ v%26lt;Directory"/home/aaa"%26gt;
! ]0 S& g( v7 b1 Z% aallowoverrideauthconfig
0 B! X8 |8 Z2 c( y1 @/ v3 K
orderallow,deny
5 {* p W3 L0 D% G- R4 G6 @allowfromall
. j1 w D6 ]; I' d
%26lt;/Directory%26gt;
% A% W- L5 t n' ]4 U* a用在目录/home/aaa下放文件.htaccess,内容如下:
' W2 a n( {5 u# _8 v' \) aauthname"PleasegivemeyourIDnumberandPassword"
# R" m6 n1 z2 W* ~5 {- }% m
auth
typebasic
$ P! `# q* U: d4 D( D4 }$ {
authuserfile/etc/.passwd
% a0 v/ d3 q7 X b
requirevalid-user
9 g) I7 D2 w) ?7 @0 C c+ _: I. ^
$ t' P" p. e+ T0 i用htpasswd生成文件/etc/.passwd,
0 E4 e; ]& e: r8 @1 M: @htpasswd-c/etc/.passwdusername
3 v3 `: q* [6 o
; L; N! `. m8 ]. v( {# ]$ x本文转自:http://linux.tcpip.com.cn