返回列表 回复 发帖

搭建一个大型网站架构的实验环境(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- k4 y+ ]3 J) U; t/ F$ a/ w+ B0 Z

9 V* O7 i/ Q2 e: `  b8 j好了,Nginx也配置完成了。
做一个快乐的!,建一个漂亮的"
返回列表