|
|
unix 平台与NT平台使用apache server的设置相同。以下重点以unix平台为例" z D/ F$ Z9 u6 n
说明apache server的设置。另外值得注意的是,虚拟web的成功设置,有大约
) P. \6 O+ ~- y% C- k50%的工作量是在域名的注册与解析方面。所以一般先注册好域名然后再做# @& c, v- ^! O* T9 {1 p# C" Y
虚拟WEB设置。! ^( Z5 E- t7 l; _
! Y" A$ G; J9 q2 h, W
一 、IP型虚拟主机9 v# Y/ u& [: |5 y# o
0 O* f/ S8 Q2 v) z
IP型虚拟主机指每一虚拟主机对应唯一的IP。可通过多个物理网卡或虚拟网口实现多IP,Solaris2.5和Windows NT都支持这种方式。2 i# G+ r1 g' H* B+ \
. Q3 i5 S" b1 T两种配置多虚拟主机的方法:
% M- I9 j( l; h5 C# m; G5 ^' ?+ }: B9 P: H5 R0 n' @
1、为每一虚拟主机启动一个httpd进程。
! C6 U+ I( N3 V3 Z3 r4 r, E# W1 y3 p* S
下列情况下使用此方法:# z. j3 m3 V9 P2 m
* L6 X8 m; z% e5 O
? 需考虑安全隔离问题,如两个httpd运行于不同的User、Group、Listen、ServerRoot,两者用户除通过Web相互浏览数据,无法访问其他数据。
: u- {8 a1 q/ t g% P+ J1 [/ M2 l
* Q$ L; w, I* i2 j( c1 h? 能提供足够内存和文件描述器。: ^' \; R( w" t, l, U
; {- ~/ _7 ~: X/ X设置方法:
0 t' `" z* T% i. n: {- P
# ^! x; P( a6 k2 m& `为每一虚拟主机建立一个独立的httpd安装,在每一个安装路径的配置文件httpd.conf里,用Listen指令指定进程服务的IP,如:
: K. P1 V" V/ ?: |9 I& }4 d; f2 v+ r. o! Z9 k
Listen 10.68.37.10:80" ?2 I( a4 H! `- `: |
) A, m% i/ ]6 T$ P# R$ q* h
2、为所有虚拟主机启动一个httpd进程。
9 u) Z, F% k2 p. Z% N2 s) O1 R( B8 A% s/ c! U
下列情况下使用此方法:
1 I6 Y7 ~/ r/ G @# h
# j4 t i+ \) N8 p. T! z? 允许在虚拟主机间共享httpd配置。/ C* K# |9 G. H% I9 e/ b4 S
4 {1 k( K- X7 b) S: d& _% H
? 计算机服务于大量的请求,运行多个进程使服务器性能降低成为重要考虑因素。
|* T r' T9 z+ X5 x3 r/ F2 w4 |0 x6 ^( L# q4 E' z# D$ e
设置方法:
! v7 g( V6 U+ m% X& _/ Y+ @+ ?0 V, ?
在配置文件httpd.conf里,用VirtualHost指令为每一虚拟主机设置ServerAdmin、ServerName、DocumentRoot、 ErrorLog、TransferLog或CustomLog,如:, A% b* ^6 d/ P' }- ]) ^* V- y8 H
+ `. {8 d* @, o7 Z5 u6 [" A<VirtualHost www.smallco.com> #此处建议用IP
% S% J; B$ z' QServerAdmin webmaster@mail.smallco.com
) m; n/ K8 D4 P# ]DocumentRoot /usr/local/etc/httpd/htdocs/smallco
) `8 h" Z, h/ _4 i- ]ServerName www.smallco.com #建议此处用域名+ W. `: i {8 R3 w9 s
ErrorLog /usr/local/etc/httpd/logs/smallco/error_log
: ^& {$ o$ f* s- Y0 LTransferLog /usr/local/etc/httpd/logs/smallco/access_log
- t* f* C5 `( m% J0 H2 l</VirtualHost>
" K; C) E% @4 D4 M/ D! K" L& a& r* Z1 o# x
<VirtualHost www.baygroup.org> #此处建议用IP
9 S/ N: Y I4 \' vServerAdmin webmaster@mail.baygroup.org
: d7 D( Z" _0 B8 lDocumentRoot /groups/baygroup/www" M7 L% A) }1 D: p
ServerName www.baygroup.org #建议此处用域名
* u4 s/ e3 @6 Q2 X; [ErrorLog /groups/baygroup/logs/error_log
/ r5 [. w- H5 v1 BTransferLog /groups/baygroup/logs/access_log) k3 Q# b7 l/ `7 V- M
</VirtualHost>
) ?$ n G3 h" ]6 P' T- \' J; {7 q7 q' W& m( Y; X& L
同时要做虚拟网口或网卡的配置,在DNS也要做相应设置。0 v" i7 w# k) V1 J3 c
2 j0 w& s6 D1 p6 {! v
二 、名字型虚拟主机(Apache1.3以上版本支持)2 S- w; A$ I2 W, ~4 H/ L! ^
! O4 ]8 {/ H1 J l
IP型虚拟主机虽好,但不是最佳方案。它要求每一虚拟主机有一专用IP,在某些机器上难于实现。8 F% p4 `$ i- a" j
$ y2 ^2 H$ b$ A; l6 i名字型虚拟主机是指每一虚拟主机的名字不相同,但IP一样。它的好处是不限制虚拟主机数量,配置、使用简单,不需另外的软硬件。缺点是客户端必须支持该部分协议,最近版本的浏览器都支持,某些老版本浏览器不支持。但Apache为此提供了解决方法。' M3 }- O. G- G. ^: k. d6 w
a3 n, ^4 y4 \0 P/ V& _9 [
设置方法:0 `) p$ ?9 w, M4 M1 X& q% K
- X; z9 A7 Q; b3 i) |4 w
在配置文件httpd.conf里,用NameVirtualHost指令设置虚拟主机,如:
7 R+ } Q, _7 e' x! ^* K( |% E; D% s" \: _# X. m, s
NameVirtualHost 111.22.33.44" o4 u: A5 k! W0 I$ W$ D
, q4 W" S" M. S1 e$ R0 P* P4 _<VirtualHost 111.22.33.44> #建议此处用IP
- _$ i# f3 C9 MServerName www.domain.tld #建议此处用域名
% X8 M2 J& d9 O* K; C5 O9 ^' K* XDocumentRoot /web/domain# B% p. n1 H% Y8 @
</VirtualHost>
+ k2 j$ |$ V; `( i7 o& O( b
7 J9 t& L4 o% m3 j, M; ?同时,在DNS定义www.domain.tld指向111.22.33.44。0 p# J/ g: [' D' E
- p" l% c( R2 v# M2 b注意:当在NameVirtualHost指令后使用IP时,任何使用IP的URL请求都是针对虚拟主机的,主服务器从不会响应一个使用IP的URL请求。 ]& b& A8 h! O a3 O
- p1 @: }; h/ F
另外,有些服务器希望以多个名字被访问。例如,假设有某一IP的服务器,希望以名domain.tld、www2.domain.tld都能被访问,做法是在VirtualHost指令部分使用ServerAlias指令。如:% _. Z5 J+ c0 ~
! q6 ^0 |0 u R( s3 @4 w
ServerAlias domain.tld *.domain.tld3 j4 R* S* I0 p3 V/ [% Z
5 s6 w: ]+ C/ l) _9 O另附一些虚拟主机的设置实例。
5 ^" z6 y& @6 S' {, g* W E% g+ K
: n B4 ^1 w2 y9 M6 e [
) g+ o6 x8 d& s! ?- K 3 C6 K3 B/ A8 l/ F! {
6 Z4 H- a! Q1 M% E附:虚拟主机设置实例* `- L! Z' O. P) m$ t
8 o; T* @! B( S0 f0 S2 u! m& `
IP型的虚拟主机配置# ]" i' o4 V5 x; G& d
8 U" {* ~4 ]2 @; Z" T
Setup 1: 服务器有两个IP,
# T4 c) z y. o v4 h
V3 }5 p# W0 F! F7 P111.22.33.44 server.domain.tld; g( i% l5 b _9 g) u& O
. a! Y/ d7 v% R
111.22.33.55 www.otherdomain.tld# c2 H5 d& v% i* [1 K" G
% b2 \0 x1 N2 W5 G, A9 bwww.domain.tld 是server.domain.tld 的别名(CNAME),代表主服务器。( {( q- \6 ~+ \0 ]
% R5 S- k$ ~' b
服务器配置:& F4 y/ p$ @, Y3 c7 }2 |
! C6 ~( {8 ?% p. |0 I% O. W...( s7 y6 n7 \+ k% t5 r: v* I
6 h6 u8 x" X3 N. n7 J" oPort 80
# S& @& u4 x$ o, t" P7 Q1 k b
' h& c7 u0 c9 sDocumentRoot /www/domain$ D: d) b$ O' F0 I% y$ ~) T
ServerName www.domain.tld( Y; B \0 ], Z
<VirtualHost 111.22.33.55>
5 {! c1 n, F/ z! o" aDocumentRoot /www/otherdomain% E6 p5 Z$ }/ S4 v
ServerName www.otherdomain.tld, X# V" m+ F! r9 F8 S. n& @
... C/ B& ^+ U3 f! Q8 N1 g8 D
</VirtualHost>
* e3 Z( C9 D2 E$ z' k9 o: d
0 m1 E1 X+ _2 |: aSetup 2: 基本同Setup1,但不设置专门的主服务器。
+ U9 F! t+ g% S; ~5 [5 o/ n! N7 y' s; p7 i1 G8 k
服务器配置:8 j4 Y) c w' V5 W8 H, G
/ g5 T0 d1 N9 Y/ K6 ^/ m...! B2 ], b0 M d. w+ c
! J5 D: p; _2 J: ~/ E
Port 80
U' i& @' ~$ B/ {7 x; n5 @9 s) ?) o. Z
ServerName server.domain.tld, H. H2 \0 t+ u; R' g/ l
<VirtualHost 111.22.33.44>" w* w. `8 g9 _! `+ P( M8 i: f
DocumentRoot /www/domain: G* l5 S0 H' A- D b6 S: C) d7 l) T
ServerName www.domain.tld2 |# O, o/ t" Z1 N0 @( z* i6 W9 ~
...) e0 {; \8 x- ]* J; O% p: w5 y$ X
</VirtualHost>! c. h5 @' p# C, P* j
& v6 a6 k5 H* h/ v<VirtualHost 111.22.33.55>
+ g7 f/ ~: Z; C- L& pDocumentRoot /www/otherdomain) i+ }/ m" p" |1 C1 ]; {
ServerName www.otherdomain.tld
% ]* \' k/ G; \5 k( l5 S...
' f1 I+ t( m' A</VirtualHost>, w+ p& ?8 Z4 x
! R. p1 S3 |6 P) k' k6 h; b
这种设置只有当URL为http://server.domain.tld时才击中主服务器 1 u" e4 d& h+ R4 e5 i7 ]+ d! g
7 l7 L3 S7 u3 z; WSetup 3: 服务器有两个IP,# `! S o3 r" J# O- O
% |" u7 T* Y+ e [1 @; O% K# O' i
111.22.33.44 server.domain.tld2 E# I7 t/ U n x
111.22.33.55 www-cache.domain.tld( d+ W9 O4 Z+ y; Z) j' w8 u
www.domain.tld 是server.domain.tld 的别名(CNAME),代表主服务器。
V: ^' Q! q7 g! s1 Lwww-cache.domain.tld是proxy-cache,端口是8080,Web服务器使用默认的80。8 I; N: l0 A6 _2 T1 Z
6 F. v8 ^- R7 g% U9 F
服务器配置: 4 t/ T. @1 t A F! \6 W! G
/ d; v0 U- P0 r+ Y: |: {...
/ d9 c; u! g2 T7 z) U9 M9 X# t7 K+ i! v
Port 80
' Y N, S. X, J" @2 X1 Q& n9 c ?+ P( W6 G
Listen 111.22.33.44:80
: v! X! C* [& K* j3 PListen 111.22.33.55:8080
. W& M3 Y/ C; a, f7 Y S
, u! a' d$ v& ]9 }" w9 D% S" f) CServerName server.domain.tld5 D) A w+ F) d8 L
<VirtualHost 111.22.33.44:80>
* b1 i/ ?1 O$ H, Z7 F: kDocumentRoot /www/domain
' O8 E% ^2 |6 A2 G% v2 l/ DServerName www.domain.tld
5 H& M6 h! Q) b3 q' L5 i2 r...' X2 j5 }$ K; ` Y3 a
</VirtualHost>
- Y' G1 s8 |/ ~0 [7 F @$ \* u4 K s2 N
/ `; y! Q8 V& z<VirtualHost 111.22.33.55:8080>
/ J0 ^) V' M0 o: ^0 J xServerName www-cache.domain.tld
J. c% E; V/ r. [. L...
* e& b M* @3 \0 o1 L5 y<Directory proxy:>: y. x; d/ ?$ @- `/ s
order deny,allow
7 p' w$ J9 r/ f6 Y5 v: [deny from all
2 J$ N7 {4 m; D) S) Y, |allow from 111.22.33( @) X% }5 w7 V# l6 P P' \( t# l
</Directory>) _0 y; Z4 \; r1 M
</VirtualHost>3 I, ^& x: Q |% j c: u
0 z1 y( F, a; h9 D' {
# k8 b0 a$ M2 [3 {/ X
1 a* k- ~1 ]; `4 _. P A
名字型虚拟主机配置) T* N) e" s8 J" o% c' a
: l: ^4 q8 e! N3 M eSetup 1: 服务器有一个IP,
% s; \; J! ~1 _' s0 M# p4 `! O/ e' s2 J
111.22.33.44 server.domain.tld.
7 D4 u( V# y: G8 Y4 M) h2 c
/ P$ ?# w, w) d6 X2 Uwww.domain.tld和www.sub.domain.tld是别名(CNAMEs) 。 4 l/ N" a9 o" U" z2 c
2 b$ t" a2 t0 Q2 ?$ ?$ ^
服务器配置: : d/ F8 Q1 A; E9 A% L: h
8 `5 w, a9 N% ~
...
$ [# {! m& f7 `: Y. K1 u- |7 v: U7 Q$ p. L- o; D/ i/ e) {
Port 80, Q$ n1 V" z( U0 X, J/ W
7 _# [$ u/ N: ?+ s/ |ServerName server.domain.tld
" i, A( U- W7 {# \NameVirtualHost 111.22.33.44
/ |2 i9 K& L x* z% i- j& ?5 H* k8 v" t+ v* Q( l6 H
<VirtualHost 111.22.33.44>
) j% P6 B: y2 {+ x% r# sDocumentRoot /www/domain
# m* h: {; R/ G0 z& f5 EServerName www.domain.tld
3 A4 l* P j8 @...
' p5 q$ s+ g) n% A; K& y</VirtualHost>
; _+ Q9 n6 V6 D0 i, T; K
/ Q! b% n1 W2 `" G3 q' S<VirtualHost 111.22.33.44>
% P' `( l4 e$ y, DDocumentRoot /www/subdomain6 m& A1 O: Y- o9 u) J
ServerName www.sub.domain.tld& ]7 G$ y1 \1 Y& k+ T) `' d* `4 S
...8 P5 \3 o+ ^+ o+ u, m' V9 w* P
</VirtualHost>
3 A. v1 `" a3 L( A6 S4 N3 e$ }* ] o1 r3 ?! w N& K$ o; k
若使用IP访问服务器,由于 www.domain.tld 有最高优先级,被认为是默认服务器或第一服务器。& N5 w7 M3 @4 O1 t1 t
4 r/ ?! l) Z: i& ^3 y. BSetup 2:服务器有两个IP,- x/ i; w4 j% I- h( k
! E. W) \, J {# v! y111.22.33.44 server1.domain.tld 用于主服务器: x* V6 c" J. K, n1 W* P
111.22.33.55 server2.domain.tld 用于虚拟主机
7 i/ w$ T# S1 q4 m5 |7 m别名www.domain.tld用于主服务器,4 ]5 `4 C3 r% _/ e
别名www.otherdomain.tld用于一个虚拟主机,. |0 U" t+ r g0 b. V5 w' X: ^
别名www.sub.domain.tld,*.sub.domain.tld 用于另一虚拟主机,
4 o# D' g# `0 P3 w. r, L% N
: x5 R& p. Y1 h0 _, j服务器配置: . C+ U% k0 N, C
* K+ `) Z1 X* o6 M5 B
...
$ i) { H' V: N* H. Z
1 |, P7 j$ v: lPort 80
) W5 \( t5 H6 Z# s4 c7 Z8 ?7 o5 s+ @+ ~7 K" F& _. y
ServerName www.domain.tld
/ A3 \. Y2 z4 G9 a/ ^3 X) u) r6 `0 ^DocumentRoot /www/domain
; k% D7 v+ E/ t6 Q xNameVirtualHost 111.22.33.55$ W% ?8 @8 r0 \5 d- Q, L
<VirtualHost 111.22.33.55>
) T' |$ j0 X5 g& T4 j4 KDocumentRoot /www/otherdomain9 d6 D$ K- ]% }. ?9 t
ServerName www.otherdomain.tld( B* S* \! h' M- o* R; Q
...( t. J+ B9 R" Z4 A4 [4 H
</VirtualHost>
$ [0 u- r0 e' r7 ^4 k4 G o9 g- \7 x
2 Y3 q$ A" I3 @ ]! Q<VirtualHost 111.22.33.55>
, Q- v( m0 K; U5 V( l0 oDocumentRoot /www/subdomain( l/ H# p* D' L2 ^# ^1 L
ServerName www.sub.domain.tld
+ Q9 P/ `7 y: t8 R% R$ B/ VServerAlias *.sub.domain.tld
; T \( [- T! R8 c& H...3 P& H, C5 A9 v6 s
</VirtualHost> ( c" ~# \2 G1 N& f
z C9 _" W" ]% d$ F3 I' w9 M& b
混合型(IP/名字)虚拟主机配置
2 i8 o$ A% ^3 i5 w
8 J1 r0 \0 E/ r/ VSetup:服务器有三个IP,
5 X- v8 ?' T. F7 d/ u5 m! r9 W6 ^: w/ w- ?5 G8 n. k
111.22.33.44 server.domain.tld 用于名字型虚拟主机
- {" P! Q6 y7 r- R. [' Z111.22.33.55 www.otherdomain1.tld 用于IP型虚拟主机* D- `: I: E" C( b& }
111.22.33.66 www.otherdomain2.tld 用于IP型虚拟主机3 ]. E1 u1 E% T/ Q# j+ b% u
4 p [: Y r8 W- y
服务器配置:2 k9 X3 p- e7 c e
...- ]8 O: F% Z8 J l
+ ?1 J" }- m, |' \( l( `
Port 804 v9 F5 P6 \! R8 v3 Q
ServerName server.domain.tld, R" O- o m x" s+ y
( W, w+ l$ K) q% u: ]' O
NameVirtualHost 111.22.33.44
/ i' D! P. w6 T+ |3 g1 E% g* a' p$ N# n; j
<VirtualHost 111.22.33.44>
' q' U3 O, x8 w+ X: s" a# ]8 R KDocumentRoot /www/domain1 X( N& M4 I$ S6 G
ServerName www.domain.tld9 y9 E" E3 K3 K; N
...$ {) Q8 |" D& ~" k: x$ o
</VirtualHost>
- a0 k/ V* _/ d+ O6 m' ~; o% Z8 C6 I% C2 L7 E/ K. E8 n. o
<VirtualHost 111.22.33.44>" j x8 j5 I; {, D- [" {' P
DocumentRoot /www/subdomain1: [$ I! B5 P% u' |" k* ?
ServerName www.sub1.domain.tld( q8 Q/ h$ o5 p9 g8 m
...0 K m# J1 N, a2 b; V& M% [
</VirtualHost>
/ q6 }5 U, G5 |* W
2 L7 i6 z9 x' n, m( b<VirtualHost 111.22.33.44>. Q, z" A6 B, W1 z$ A
DocumentRoot /www/subdomain2 `: K+ y5 H$ R, t; F/ y8 f3 l1 a
ServerName www.sub2.domain.tld7 F3 R" @, g) m- w
...6 ^. o% a& X" H0 j1 G
</VirtualHost>
' }$ a5 K1 H3 P- ~* g9 h. Z3 _: H1 n2 c& [4 v' N
<VirtualHost 111.22.33.55>& t( u9 y& G# P: w8 K9 f# ^
DocumentRoot /www/otherdomain12 i* |" Z: \3 w. @3 k# ~! Y3 }1 c
ServerName www.otherdomain1.tld
- f. ~- M1 x2 U3 A... |- c1 l3 |# _3 E$ [! q7 X; L
</VirtualHost> ; [5 w; Y0 q& Z( m- D
' z) K- j* d" N% [) Y9 O
<VirtualHost 111.22.33.66>3 D& b0 C' s3 J$ r$ `
DocumentRoot /www/otherdomain2& S8 a% `0 Z1 G0 t) x' N
ServerName www.otherdomain2.tld" l* ?7 J: Q( r8 q0 ]' ^9 s
...3 N, {5 x, B# p1 n' ^6 C
</VirtualHost>
3 d5 S6 V% n* R3 G: U" Q& E9 z7 }- w
端口型虚拟主机配置
" o+ X# R& X! B6 a) ~9 O% U) `
/ s. m) f3 x' g5 wSetup: 服务器有一个IP,- Y0 l& [4 {% |2 P7 f2 u
8 r; h o8 S2 D( M v111.22.33.44 www.domain.tld) j) S% ?! A' C3 \. E. _" B
" @; v. u; g% S' _7 H不需要另外的别名或IP,采用端口型虚拟主机即可设置一个配置有别于主服务器的虚拟主机。 5 l8 |5 g7 `/ s
0 w$ N+ V1 D) u服务器配置:
# w |6 ^7 t, k+ N @: s& Q) u...: ]( m9 _9 u! f" ?) r/ n7 o) g. {
|" [9 g6 ~7 ]' ZListen 80- D6 w p, I& d' ^9 v( Y8 U" L: b9 c
Listen 8080
* b! V/ ~' E* w8 C8 ]" l( L8 U, D
5 K$ J0 {7 }2 D3 t& b6 ~ServerName www.domain.tld
* m5 {/ n$ e7 ?% i+ ^8 lDocumentRoot /www/domain, t+ e+ L. |4 w5 D
/ y: s3 Y4 Y$ g3 A8 E, T) Y
<VirtualHost 111.22.33.44:8080>
9 w% w/ h, B. mDocumentRoot /www/domain2. x5 y9 g% C! g& e
...* m# R" r G6 i4 o/ J
</VirtualHost>
9 f E- r% W- p1 l ^0 x& F! _2 J3 O/ N9 Y, H& S
& {( Q0 F& c) h$ R, c
, z8 X O L# D) l3 L2 h来源:http://fengyu.china.com/Vhost.htm |
|