|
  
- UID
- 1
- 帖子
- 642
- 精华
- 41
- 威望
- 17
- 金币
- 73077
- 原创
- 0
- 宣传
- 82797
- 阅读权限
- 255
- 在线时间
- 534 小时
- 最后登录
- 2009-1-8
  
|
楼主
发表于 2008-10-9 21:29
| 只看该作者
搭建一个大型网站架构的实验环境(Nginx代理服务器篇)
搭建一个大型网站架构的实验环境(Nginx代理服务器篇)# Z# H% C0 Q+ J1 h" N3 x0 z9 y7 h b
2007/12/28 16:38
2 x$ p: f6 Y3 I* U7 {# K9 a七、Porxy服务器配置
% a) Z/ W) {( k" D4 R( O4 y8 PProxy服务器(192.168.10.20)主要是负责终端客户的接入,为两台Squid缓存服务器提供均衡负载。现在我们就开始吧!
+ w) _ t6 n) z; F. W, d; D6 R服务器网络配置 f8 B% G3 Q0 m8 A4 W) T
# ee /etc/rc.conf+ D b; H3 Q/ o, U: V$ Y& t
ifconfig_lnc0="inet 192.168.10.20 netmask 255.255.255.0"
8 T3 ^6 m0 F) m2 w# i& ?defaultrouter="192.168.10.10"
% K9 _' B8 N2 E. Bhostname="proxy.rd.bj" C4 A5 |; g$ C! }, f
# ee /etc/hosts
5 F# q. r. ^; t! `' n0 I; J192.168.10.20 proxy.rd.bj
, l- ]/ i) Q& z( L# ee /etc/resolv.conf
6 n1 W4 H8 Z: }2 j% }nameserver 192.168.10.40
5 D. k' X4 M! ?( k& C a网络环境配置好后,我们开始安装Nginx,在那里,告诉我
1 x" h+ V6 B w/ V" f# O: @: I# whereis nginx6 Z! m5 u" b6 X
nginx: /usr/ports/www/nginx
8 _, h8 ]4 t& [+ f) q F# make config m2 L) s5 ^. Q- l# _3 F
: A! r! I6 {& X, q
0 G! M0 t6 s+ E7 q. n
# make showconfig #我的配置选项
: ~) ]7 b2 E: Q4 W! g) N: q( |! o===> The following configuration options are available for nginx-0.5.34:9 J/ ~9 k8 K' a
DEBUG=off "Enable nginx debugging"
4 Y: [0 i# F6 o6 L3 L9 [1 { HTTP_MODULE=on "Enable HTTP module"
" g ^7 _4 u, z0 [9 b4 Q HTTP_ADDITION_MODULE=on "Enable http_addition module"2 v% `# v5 o/ x( `# Z
HTTP_DAV_MODULE=on "Enable http_webdav module"/ G2 \& `/ o ?
HTTP_FLV_MODULE=on "Enable http_flv module"1 G+ W2 g* |2 D+ u' D( ]2 O
HTTP_PERL_MODULE=on "Enable http_perl module" e0 U4 j) J- ?) c u! u+ r" S
HTTP_REALIP_MODULE=on "Enable http_realip module"( _) M. |9 O0 p+ r* p; I: l
HTTP_REWRITE_MODULE=on "Enable http_rewrite module"
% F: L5 ~) X& C+ u* S* y HTTP_SSL_MODULE=on "Enable http_ssl module"& D- J! z5 \2 `) A7 u
HTTP_STATUS_MODULE=on "Enable http_stub_status module"
+ n7 J/ v. w% k$ \; k; \ HTTP_SUB_MODULE=on "Enable http_sub module"- S8 j$ k0 y+ l( j! O
MAIL_MODULE=off "Enable IMAP4/POP3/SMTP proxy module"
f& B% r3 A% L5 t( W) w) f MAIL_IMAP_MODULE=off "Enable IMAP4 proxy module"
' _& g1 K. [( t8 O4 b+ X5 @+ u MAIL_POP3_MODULE=off "Enable POP3 proxy module"
4 o+ M: a. e$ [3 o8 k8 [ MAIL_SMTP_MODULE=off "Enable SMTP proxy module"
% P' R- S& k' u2 \2 A MAIL_SSL_MODULE=off "Enable mail_ssl module" Q3 c8 ^7 Q- U' y7 t* ]
WWW=on "Enable html sample files"
& P" B& J5 n8 A% t' {===> Use 'make config' to modify these settings
6 _" G" o# E5 D# make install clean
" `7 X( Q/ [+ O又开始等待了 ... NNN ..." o Y; a# m2 o" j4 @2 g& G2 r
又看看了看播客,终于完了,现在开始配置吧!
! S: n) E( Z+ G9 o: i# cd /usr/local/etc/nginx* A, \) C9 ~# H, c* X* _
# ee nginx.conf #更改配置文件+ B$ O# l6 Y$ U% n
我更改后的配置文件如下:( f$ q# f; t3 q9 H: J
user www www;8 l5 X. k2 f9 ?
worker_processes 1;5 P' ^! f/ q o' x$ ^
error_log /var/log/nginx_error.log;
4 m! u. k4 A2 X- r: B6 P" Gpid /var/run/nginx.pid;
& \' q! Y; Z4 f q' Zevents {
/ Y# L; b" [$ T& i1 S; R use kqueue;
6 y4 f5 G" g i5 z& G- O$ a# | worker_connections 65535;# {: V4 l7 e6 n) g2 J
}& Q0 T3 y3 s' |+ z8 W
http {
0 w& @3 o; y6 `* M; U include mime.types;! i: W4 k. s4 d
default_type application/octet-stream;% g/ T- a4 \( j' B/ s
log_format main '$remote_addr - $remote_user [$time_local] $request '% m! I; r' I9 x8 T
'"$status" $body_bytes_sent "$http_referer" '- k2 K- ?1 ^* k' a. L% T
'"$http_user_agent" "$http_x_forwarded_for"';& V. V. G+ T3 m/ p' Y4 N
access_log /var/log/nginx_access.log main;
6 s7 O2 d6 ~ v client_header_timeout 3m;
0 b7 i, Y! Q0 D p/ H& s client_body_timeout 3m;
: n1 f/ m% L( \8 F; ?) s1 s7 J send_timeout 3m;5 O2 N4 ~0 l1 V: Y: h
sendfile on;
) V& O+ Q, \" V) m2 p# b tcp_nopush on;
3 l4 T/ p5 H8 \. t3 v) J! h tcp_nodelay on;
/ D5 I8 O/ n \9 k keepalive_timeout 65;# I- D" `7 h* q! N8 D( X7 B5 U
client_header_buffer_size 1k;4 v) Q" R( G2 E! i3 c8 a4 x
large_client_header_buffers 4 4k;
9 p' H$ u( j+ T- m5 a" T& _ output_buffers 1 32k;& P7 o% v: `3 ~9 d
postpone_output 1460;
( l- w8 A2 ~+ t0 j( \ gzip on;2 O9 V0 k" Z6 j0 w( v
gzip_min_length 1100;
$ \: y7 q$ ~9 d9 _; P gzip_buffers 4 8k;9 l5 ]. C2 W% C5 s# m6 D
gzip_types text/plain;( T7 H$ L6 w! ^# _/ i B
upstream mysvr {
+ u9 p' d; o( n/ l& @+ K7 I server 192.168.10.30:3128 weight=5;
, g% g. e1 s1 ?8 R, ]& U server 192.168.10.31:3128 weight=5;
' g7 l- Q( e4 y3 X; z; M3 Z. \ }* L% ^) |& ?2 E t$ t
server {
# ~* \; ?. t/ A0 `5 z! Q8 D+ s, D listen 80;. H8 Z2 ~, t2 A7 V& f7 L
server_name www.rd.bj;
; K% j; I* R. }4 | charset gbk;5 F) p+ ?* a2 n) ]; X8 o
access_log /var/log/nginx_host.access.log main;
* o6 U9 {0 s0 x; n1 t location / {( ^# W K5 V; f4 }4 ^. d
proxy_pass http://mysvr/;3 V* p4 L3 g" O$ M# ~
proxy_redirect off;
& j) n4 r& _* ?2 [! f% h, X& {* c proxy_set_header Host $host;% E! I1 W9 K6 a3 d: N* Z% y; l
proxy_set_header X-Real-IP $remote_addr;
% w6 ?- |, H" N# X proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 F7 ]& K: y. Q+ u
client_max_body_size 10m;: v$ `8 `& }: S; r9 O
client_body_buffer_size 128k;
) z- k/ M; W& h* E proxy_connect_timeout 90;2 d+ `% J; B2 ^; I1 G
proxy_send_timeout 90;
, {# }& o0 g' h5 K2 H proxy_read_timeout 90;
5 |3 t& W3 M# }5 m6 T proxy_buffer_size 4k;
; C$ O1 P) L( h5 v/ l. W proxy_buffers 4 32k;8 V# n% I7 h9 }9 x, P, H e, Z1 u
proxy_busy_buffers_size 64k;5 @) \1 L, D$ C+ k( k
proxy_temp_file_write_size 64k;
! V% x8 p" c' ~. R; X# E }
. n: {8 c7 o8 d z% S; @ location /nginx {1 h; J4 O- w0 W' S2 x3 [
stub_status on;
& [. |0 B/ s+ K2 u access_log on;6 ?, ~ v, A6 o# ?+ r. I
auth_basic "NginxStatus";
) @6 r$ ?( } G% Y" O u% C$ x auth_basic_user_file /usr/local/etc/nginx/htpasswd;
; S; k. G0 `, ^* v+ T, i- a0 A3 u }* a: A v2 `1 B& p* f+ ^ Z
}
$ K$ |4 {: A7 t}
$ V j3 f- A$ n* d保存配置文件退出后,现在对刚才设置的文件进行验证。
" f5 T- ]& _4 ]. S( ? T- i# rehash
W( ]- }- d* \5 w% Q% x# nginx -t
5 a6 |3 Q6 b; f- x6 o* }; c |2007/12/27 15:42:52 [info] 25243#0: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok4 u& V; H' m* }0 p3 L/ b) w
2007/12/27 15:42:52 [info] 25243#0: the configuration file /usr/local/etc/nginx/nginx.conf was tested successfully q3 I' \+ [ R/ B; k7 G' E
Very good,没问题了,我们在配置文件中还设置了查看Nginx的状态信息,所以,现在我们还必需生成一个htppasswd文件,这时候我们得用到Apache的htpasswd 工具了, 我们这台代理服务器上没有Apache,现在只能依靠web服务器的了,去那生成一个复制过来。
5 n+ ~; p- B) A/ a/ v. r生成htppasswd文件的方法:
+ H$ |: G, }) X# htpasswd -c /tmp/htpassswd nginx
; z! f* o2 J4 F7 A7 D' W8 M输入两次密码就完成了,然后把生成好的htpasswd文件拷贝到proxy的机器的/usr/local/etc/nginx目录下就行了。
2 R. T! [# u4 b0 s8 N如何在两台机器之间拷贝文件呢?scp出场了 ...
$ w, Z& }: [% m! j K/ @/ I( c# scp /tmp/htpassswd root@192.168.10.20:/usr/local/etc/nginx
& G4 h" p3 Q# H3 M* l好了, 现在万事具备了,现在启动她吧!!!
* [$ W( A; b7 P4 X$ d/ Z# nginx
3 |& _# l; Z# h; S4 _$ D# ps -aux | grep nginx$ B- n @- @5 C8 Z% q% B: f9 D& G% n
root 804 0.0 3.4 4908 4288 ?? Ss 4:49PM 0:00.00 nginx: master process nginx (nginx)
; g8 F' o1 |1 _7 x7 Uwww 805 0.0 13.8 18004 17404 ?? S 4:49PM 0:00.02 nginx: worker process (nginx)7 V3 _" K! ?% r( O
root 807 0.0 0.3 536 416 p0 RL+ 4:49PM 0:00.00 grep nginx1 j8 L2 m; I- }% M
现在用浏览器查看一下Nginx的状态,1 j/ R# V" V' `
http://192.168.10.20/nginx$ C3 H; ?* z4 l" H
输入用户名和密码进入,如图:
9 Q; v+ }- f+ ?$ J `$ d- k 4 y+ ]3 J) U; t/ F$ a/ w+ B0 Z
9 V* O7 i/ Q2 e: ` b8 j好了,Nginx也配置完成了。 |
做一个快乐的!,建一个漂亮的"。 |
|