$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[应用&技术] 分享用Nginx+Apache+Mysql+Php+eaccelerator+Zend构建高性能的WEB服务器

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。
8 S$ V1 E; d# G& y/ ^3 J8 ^0 d% {; p# U$ A
Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,但是网上吹嘘胜于apche10倍实在比较夸张,apache经过优化之后处理PHP页面速度还是不错的,比fastcgi方式要稳定的多。
: s4 X' V" e/ K, v& C: S- ?/ f6 {+ n4 j. N
本文就是整合了nginx和apache,由nginx处理静态页,apache处理php页面
% Y8 v/ t% s3 B: S  C* g( L- O, `( Z  g2 [! F& P- D0 `
( w5 x" m# k; j( Q
安装步骤
; j: z- D6 U; [8 u4 t0 X3 Q; {系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 4.8,另在RedHat AS4上也安装成功3 a6 E; k' F4 e6 g& r6 I" m

* E, y( k3 U$ v, S一、获取相关开源程序:- L9 y2 P7 a" [* N8 F2 C) D- Q6 S5 L
所需软件:. I1 y# ^7 u# _0 n1 t

7 T* }5 |9 T% x/ ^7 u8 p% e
7 `( x: U3 b9 Y5 x$ z8 @eaccelerator-0.9.5.3.tar.bz2
" |6 W0 D% R9 Y* h6 ogd-2.0.35.tar.gz" ^# [( Q- g. ~
httpd-2.2.14.tar.bz2  P- Y$ Y( ~: w0 H8 J
mysql-5.1.42.tar.gz1 G  [- w, I  W$ X+ O- t
php-5.2.12.tar.bz20 z' T& k! ^8 u4 J& H. F
ZendOptimizer-3.3.9-linux-glibc21-i386.tar.gz
  Q- J5 Y0 y1 K1 a( `; knginx-0.7.64.tar.gz
+ G- U0 a8 p( [pcre-8.0.tar.gz4 P3 D1 y  L4 p$ H0 E
7 c$ R! w( g4 y: e4 w8 J6 d9 E- f
-------------------------------------------------------------------------------------------------3 h2 i  {; t/ v! @5 ~
3 W# |6 w, Z! ^) F( f4 K
安装之前要确保系统中安装了以下这些包。7 _6 N, D& a; ]; H+ n& ]
我们可以用rpm -qa |grep 来查看系统是否装# m  K4 h5 i9 I4 {" N4 C

3 @4 [& J8 \5 C/ y+ }" O6 m! S. _4 l5 k2 q1 Z2 Z) r' D1 G
bzip2-devel
0 f4 Z6 [  [' u* r! {zlib-devel5 V5 [7 j' o% j2 ^$ K8 c: z
libjpeg-devel
/ P% c/ c" I2 p# Alibpng-devel# s( b$ T( ~  Y# ~8 e- s  T2 p
libtiff-devel9 X- ~1 D) }# V0 F
freetype-devel2 s9 m4 \: Q$ x3 y: w# O% j
openssl-devel
+ x! c; m( g3 W1 c5 ilibxml2-devel
7 @9 e% g7 [2 n- D2 E, v9 ugettext-devel + j5 B" F/ \6 B0 m  ^+ l/ p+ @9 n+ z9 N

8 z+ P; D/ E- S3 y) P这些包一般都安了,除了最后一个,我们可以在光盘里找到用rpm -ivh 来安装上.
7 l# |' D3 G, I: R! i, ?; l+ Y
$ V, C. z( m" H/ I- q  Z& x
& ]- e- ~& y2 U9 `& {; ^! r; o, M7 O# \( p, Z2 H8 A
二、安装MYSQL
; y9 A; X, \) I, Q/ z3 d. N  v$ `& w+ z  h4 j0 m

. K* {, u+ z  l+ G) A5 n! H# tar -zxvf mysql-5.1.42.tar.gz
+ B/ h) m& z% r/ R% ?( B# cd mysql-5.1.428 U9 B  [% H2 x# t0 v7 Y$ J! L
# groupadd mysql3 [6 t! Q# A: _0 @* \
# useradd -g mysql -s /sbin/nologin -M mysql
% s- l3 y0 z% X$ |& W- r# ./configure --prefix=/usr/local/www/mysql --with-charset=gbk --with-extra-charsets=all --enable-thread-safe-client --localstatedir=/var/data
1 {  n! q6 V& |4 C3 ^  j- [# make && make install4 i& t/ K% j0 d
# cp support-files/my-large.cnf   /etc/my.cnf. t$ |6 O' I. _# o* V6 ^' E& N0 Z
# chown -R mysql.mysql /usr/local/www/mysql/
0 Q( j6 T  V, V9 ^7 P7 n1 o$ E$ u# /usr/local/www/mysql/bin/mysql_install_db --user=mysql: O: [/ [; i; W- Y0 N/ t; D
# chown -R root.root /usr/local/www/mysql/' ?0 D6 F: _3 z
# chown -R mysql.mysql /var/data& \0 L. ~) G- O/ q
6 g2 d8 V2 w, s8 p" k! k
启动数据库服务,并添加到自启动
  m! I' a& Z& P
" l8 O4 N; ^" b' e, A* x' F$ ~" Z
' U9 y: k( \; N" W0 g# B+ {" @# /usr/local/www/mysql/bin/mysqld_safe --user=mysql &9 |* G* k' R. ^" T; v
# netstat -ant) Y$ [/ Q* D+ K9 H$ D) K
/ C2 P' \1 T4 W/ Y& s- b  O
查看3306端口) v) N9 n8 C( U4 F7 i

: U2 }: Q/ I6 t6 K加入自动启动服务队列:, O+ f1 @" {/ L4 D+ h+ C; Z' X
* H+ s3 |- i7 g! n# h

+ B" m# R# K, `! Y- a0 O# cp   support-files/mysql.server   /etc/rc.d/init.d/mysqld% y9 i/ @5 `; c6 ~# ]
# chmod   755   /etc/rc.d/init.d/mysqld
3 H4 O# \' E( w2 {" Q; o0 L2 _# chkconfig --add mysqld
" X7 A6 a7 [9 t! e: r" P# chkconfig mysqld on% M  l3 e0 q* ^+ k* p; V
# {$ i* |; _4 p. ?* S' C
添加root密码; {3 {2 R! X+ `5 C4 X: y
& W& @$ j+ m# \& e0 Q% E
$ ?1 a4 Z# L' M. w8 A
# /usr/local/www/mysql/bin/mysqladmin -u root password "123456"
; m) g& M' n. A" b# }/ P4 p# ^: B  E3 G$ R4 Z
测试一下:$ j6 k& n' ~4 b: ^" D

3 f" @# S. _! F8 H! F' T; H
# H+ F/ J( O( S. }' ?" V0 r# /usr/local/www/mysql/bin/mysql -u root -p
. O5 l2 K3 w+ j$ U7 y% Y
1 E4 k6 Y! u8 |' H) i. P, D9 V输入密码:123456,看能不能进入到数据库
8 {3 J# y) a7 D8 m7 D8 `) s8 r  e9 A0 K( @3 j% A/ {
配置库文件搜索路径8 Q# [) o, X  i9 [

7 d/ n& x1 N& o
9 [: v8 k7 ^* N, ]. a- \; b# echo "/usr/local/www/mysql/lib/mysql">>/etc/ld.so.conf8 Z- R) e* ~- [6 ~
# ldconfig
& E" l/ T+ r. K: i3 t" t4 X3 B# ldconfig -v1 o. g4 Q$ r9 j' O, v6 a7 o
# echo "export PATH=$PATH:/usr/local/www/mysql/bin">>/etc/profile/ ?) z2 ]& Y% i' ~
# source /etc/profile# X+ z3 d0 F1 Q$ W7 {0 k8 G8 v  i
& Z, x9 t- N  h8 A  K* `
: C7 X3 z* P9 j4 S8 Q
三、安装gd7 [$ O/ O1 ^& [- G) b: C! d, i

- [) n  A% j" P4 q" b1 o- O# tar -jxvf gd-2.0.35.tar.bz2
2 }1 n+ g7 I& S4 ?5 V# cd gd-2.0.35
: C; t% A* R# H+ t# ./configure --prefix=/usr/local/www/gd --with-png --with-freetype --with-jpeg --with-zlib  --with-fontconfig
% F: ?+ S$ I* S9 Z6 i8 V* g1 y# make
1 n  B, ~& F# {/ W  E#如果GD报错:configure.ac:64: warning: macro `AM_ICONV' not found in library' U4 }- P* o# X
你就make clean一下,然后再make
1 K8 }7 ]% B- c( k+ w0 v4 [. D( t# make install
' O' |- c# ?$ {6 i9 y& W9 H& ^% U, m' m7 L4 N$ L' d/ O
----------------------------------------------9 z/ A3 }- {# @8 U; J# h

. t- U$ H5 _# I5 _0 e四、安装Apache
8 j% T" S& @, v: V+ C; X1 k' ?+ W. F# X7 ~- \. [+ r
# groupadd www
+ ^: t* r$ m& _# useradd -g www -s /sbin/nologin -M www; C8 `! A6 I9 K( c0 ~

5 H" F  f  E: e+ ~  _+ N! B" K( R# tar -jxvf httpd-2.2.14.tar.bz2
' S) K3 W% ]8 k) w) f# cd httpd-2.2.14
: d, S8 n/ {' Q1 C; b# cd srclib/apr  8 b5 Q! _! M* M4 e$ Z% A
# ./configure --prefix=/usr/local/www/apr --enable-threads --enable-other-child --enable-static ; z# O7 [7 s* W) N. Z
# make && make install # k! W9 x4 _0 w) H! `& r& g
# cd ../apr-util
# \7 Q2 K5 C9 M5 m, j# ./configure --prefix=/usr/local/www/apr-util --with-apr=/usr/local/www/apr% \2 D, ~5 `& O! h
# make && make install
6 R# C2 s* P! x( f0 ~* @, u# cd ../..1 }, N, x4 v/ ~! y3 O6 f+ _8 e3 q
# ./configure --prefix=/usr/local/www/apache --enable-so --enable-rewrite --with-apr=/usr/local/www/apr --with-apr-util=/usr/local/www/apr-util) s( G+ H% M8 C/ K
# make: Z& ?' M8 x$ ^8 M: C  R% S
# make install! \+ \$ m( u( A* ]

5 \! A# V* r, j- M% g#vi /usr/local/www/apache/conf/httpd.conf  
, m' s+ k( w' ?6 R6 I/ ?) m2 v
0 W7 z& N# `) O( g# Y0 X(1)找到DocumentRoot "/usr/local/www/apache/htdocs"
6 D6 ~/ }  d. |' g0 V& I修改为:DocumentRoot "/var/www"
3 b- }' W+ f" u; p: r0 Y1 g3 ~! q5 U  X0 j8 v- ~
(2)找到
7 }. a6 O$ Y. O  e5 u. J( m<Directory />( h6 w; J2 @% B5 g1 l2 `1 D2 d
Options FollowSymLinks
  t) J# ?& R/ S% s/ d- I" C1 R$ RAllowOverride None
' s0 i- c5 a, {6 D5 `% [6 aOrder deny,allow  Y2 }, C- ]  W
Deny from all        //这句改为Allow from all, t9 A* O  L& N" R
</Directory>8 J& [- c/ Y7 F; y% y

5 x4 \! D* L, W6 B3 \# G5 m3 G; D(3)找到<Directory "/usr/local/www/apache/htdocs">
% g% @" ~  R" j修改为:<Directory "/var/www">
8 Y  q3 E  K, ~$ J7 d1 C
- I- k! Y" n- Y(4)找到
+ D6 g: e. K8 |Options Indexes FollowSymLinks  //这行注释掉,禁止目录列表, T4 o$ R3 \( _2 H9 |4 e

$ C$ Z5 q5 h4 y/ D4 n0 V7 @8 d(5)找到  g2 m, ^1 w, B. v
" D) \. ]! S. P
<IfModule !mpm_netware_module>. P4 m5 n# U. {9 G" M. H* m
<IfModule !mpm_winnt_module>
, |' _! ]& F" E1 B8 S4 ^/ ]2 V: W! B/ w2 J& G9 y, E
User daemon              //改为www
: X4 a6 k. B: G) L7 c6 @' p, dGroup daemon             //改为www
, _% s. E$ b& D& d: R7 G  m% ?
2 I! I: O' J, @</IfModule>
3 P) B6 U9 U7 \1 ~7 p) u</IfModule>
$ ~2 a- o1 V1 m6 [1 i$ v0 U- a% @% }; x0 d3 ~. k) l9 d
添加到自启动
3 k/ v, a: K1 f& N: C6 J: e9 ~
' _9 I; J, n( D( y2 v" q# cp /usr/local/www/apache/bin/apachectl /etc/rc.d/init.d/httpd2 `& H2 |# f4 }4 k, S" @' M

" Z( W/ d1 h- ]; z8 A然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)9 u" l4 R& ]+ Q' C" v0 t
# chkconfig: 2345 10 90
- `! @/ L; k0 X2 f# description: Activates/Deactivates Apache Web Server3 J: G4 S& g& d' E2 x1 a
. m( m) E- ^2 _6 x) c: w
最后,运行chkconfig把Apache添加到系统的启动服务组里面:  O6 P0 u7 Z! _6 C) a0 Z5 ~% O: A
# chkconfig --add httpd
5 n, a9 B0 M$ l# chkconfig httpd on
4 J+ e$ n& [1 l6 C+ ^4 ]. s) t( z3 i- c1 o$ Q

: o9 M. x  c% t: Q9 g) B2 l% a$ W: \* {3 _; O  W
五、安装PHP$ O! f" ~' K: Y; U# e2 _3 F; e6 b- i
0 t5 S8 \9 V) G( C% o

6 p' Q/ `  D: \7 @2 B# tar -jxvf php-5.2.12.tar.bz2
0 j) s4 H8 p. t( f# cd php-5.2.12
, D6 l8 x7 p! Y8 d4 Y5 s1 d# ./configure --prefix=/usr/local/www/php --with-apxs2=/usr/local/www/apache/bin/apxs --with-mysql=/usr/local/www/mysql --with-gd=/usr/local/www/gd --with-config-file-path=/usr/local/www/php --enable-mbstring=all --enable-xml --disable-rpath  --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization  --enable-mbregex --with-zlib --enable-sockets --enable-soap --enable-exif --with-zlib-dir --with-bz2 --with-libxml-dir
# w6 f' S) t1 M6 J# make
8 B8 j) b9 ]  s# make install1 [8 o! \  ?* p& |% \
# cp php.ini-dist /usr/local/www/php/php.ini
; Z  y* I3 b* Y
2 h4 d' I6 \% ]! `: a7 Q" v3 S) I6 j  i% i, y& A+ f
整合apache与php
$ g( g; c5 v. i7 p6 x/ b: r9 a# vi /usr/local/www/apache/conf/httpd.conf
& M* J5 t! J/ t" |' o3 n! O
+ q2 B9 y& y# R  B% c找到AddType application/x-gzip .gz .tgz在其下加以下内容
% Q) b  `8 i) `# h4 R9 z  N3 u% s. j% |1 x. i

! J( j' k& d3 P8 U9 x& b+ d$ u2 R) aAddType application/x-httpd-php .php+ j6 o; s& e' `- W
: I5 [5 {0 L# G- u8 d
查找设置WEB默认文件)
6 K3 c# c+ Z! D6 H+ `DirectoryIndex index.html
) Q# l! S1 P& H6 r4 P改成:' g# j( c. y' Q- Y" }

0 `( E# ]/ [3 K+ N: A# @9 u. P3 w
% D9 q6 G' ^" W& YDirectoryIndex index.php index.html index.htm9 F4 Q7 w3 X5 V$ A/ U& u
6 }# u# m! Y. p- k
保存退出
' k) v4 ]  v& Y. G- _% l# m) X2 Y4 H* H
" \: n% U# ^- q, I* ^1 ^
service httpd restart& w3 M. Q7 Y' D% U

0 I' z2 f* u1 I9 }* i然后在目录中建一个文件用来测试php情况
; T: R* Y1 f% f# e2 a在htdocs目录下建一个测试页
( A  u, O1 E  m, C6 A5 [5 Q- p0 N2 [: x- y, i: z$ v  b) y' o8 K/ U6 S
: A2 R9 U7 d8 v) D

8 k' e5 B) e1 U* Evi index.php: |' ?% H/ i7 f. d& P1 h; Z$ `
<?php, |7 r; B4 x  K+ Z: |
phpinfo();
2 H* j2 m' Z3 I" S. C6 r9 A/ t?>5 O7 o/ v' _% ?, T# ?0 {3 B

; o7 ?4 U, E4 h$ u1 ^保存退出
1 z! M6 n! Q& u# b" F/ s重启apache
# n1 ^9 a& U+ V4 y5 x* Z8 S
" Q7 L, p$ o, p9 K, B9 g/ {1 \! u' G& Z
六、安装PHP扩展* L/ |/ J* H7 Y/ l' w/ E) J
. w( O+ @  G" J# k. |9 Z
1、安装eaccelerator加速软件
8 d; @# d% O4 y2 Q) ^. l' E
/ g7 x0 r( j  _, ceaccelerator是php的加速软件,使用后php的执行效率会有很大幅度的提升。
8 @4 R. ?" _1 Y1 M; U: W
% R& D1 p+ ~3 h3 d9 m9 I  h, M1 w$ ~' ?
# tar jxvf eaccelerator-0.9.5.3.tar.bz2- K# ?4 U0 [% a7 O
# cd eaccelerator-0.9.5.3& P. E" y, A" `
# /usr/local/www/php/bin/phpize
. X. ^% w# P! U8 r3 z# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/www/php/bin/php-config# X! {8 U4 X6 k4 @+ U* [. X
# make
; O; Y" h, i1 j* v' Y9 ]# make install8 s/ {3 T8 N1 T" m1 _6 E6 h

: o9 }# x6 g+ B) @+ J! k/ _编译安装后我们会看到屏幕提示的eaccelerator.so所在的目录,php5.2.x系列是在/usr/local/www/php/lib /php/extensions/no-debug-non-zts-20060613,记住这个路径,待会要用到
7 L/ |0 Q! G& R& G' ]
: h# l/ J" t6 w修改php.ini
$ ~& R6 {) d' |, [; _* e
+ C' q( |4 s$ K  t: L8 A/ I# vi /usr/local/www/php/php.ini
% _, t& V8 B/ n- c/ v8 q2 m
6 V0 j# e  y) i/ }安装php扩展: O8 v5 i! _8 B$ Z: r
在文件最后,[zend]之前,注意,这部分内容务必放在[zend]之前,不然可能会出现不可预期的服务器问题。添加下列信息:
1 c" f8 U; C  C0 E+ y' I2 |6 F. _3 D# u% F4 u- J

2 b  C9 m' J# y0 A' w; a$ m[eaccelerator]$ d) f  B: b# |8 W
zend_extension="/usr/local/www/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"& G2 S) _8 T: F5 l
eaccelerator.shm_size="16"
$ A4 D2 S4 l3 Z3 N8 heaccelerator.cache_dir="/tmp/eaccelerator"
$ k3 i- N2 Y' ?9 J7 [eaccelerator.enable="1"7 _) @8 G/ M  W- f
eaccelerator.optimizer="1"2 K* e) F; {( i" F/ c" B6 v
eaccelerator.check_mtime="1"
$ m3 Q9 u% R4 n3 B) m5 J, Ueaccelerator.debug="0"0 F" X- R7 d/ }9 X: F1 v
eaccelerator.filter=""' U0 A8 c7 q$ }8 K& E. [: T: A
eaccelerator.shm_max="0"
0 i( ^$ `! L: g( ieaccelerator.shm_ttl="3600"
: d8 s8 u6 V3 ueaccelerator.shm_prune_period="3600"2 F) v8 I$ g" k. w+ Y0 ]2 N
eaccelerator.shm_only="0"
) g" M* V; O6 w1 ~( w- Ceaccelerator.compress="1"
* e/ s( R" u+ i4 m3 Leaccelerator.compress_level="9"8 t0 ^% g; C4 B7 J7 a3 s; Q

  N0 A' ]+ g7 P# v2 q* r# E3 {( B6 W% S" _; {
# mkdir /tmp/eaccelerator
8 M7 u% O# ]) B; j3 f# chmod 777 /tmp/eaccelerator4 ~3 T2 ]% p3 P, f" j  r! S5 Z

" m0 K$ L0 {4 Z; K4 \7 m: ~
' F! E+ V- F  l0 @4 ]$ b3 G) n6 A4 @' B: O
2、安装Zend
# t8 s6 j  f) `7 x
( @9 H* U2 l; k' [2 i- P# f: }7 ~
# r5 k1 Q4 t: @# tar -zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz# M$ y6 p2 K6 {. Y
# cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/www/php/lib/php/extensions/no-debug-non-zts-20060613/( R2 f0 b4 K0 \  e" @

- k* r6 @# }) ~% n# vi /usr/local/www/php/php.ini
  R. d; @6 O. ]  e; M( f5 ~( t[Zend Optimizer]
- J* ~. @% V" b( M' szend_optimizer.optimization_level=1" S- Y6 h- A! A; S  |
zend_optimizer.encoder_loader=0) @" b9 R7 c8 D3 E
zend_extension="/usr/local/www/php/lib/php/extensions/no-debug-non-zts-20060613/ZendOptimizer.so"3 M$ L& @3 \5 O7 A+ Q. W4 c
8 y3 p7 p. F; ~1 W; l5 l
在浏览器中打开phpinfo()那个测试页,如果出现以下内容,证明安装成功!
  `: T& J. `7 s' S- l  o' y4 I$ J5 s
* h- J7 R2 H+ f; A$ @& R# c' l9 WThis program makes use of the Zend Scripting Language Engine:1 }. t4 Y6 q9 g5 P4 q
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies9 U0 S; i' A. X
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
! I" p: [/ S) n! Twith Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies; |8 i, R3 ]+ ?; e! m

" U1 ?7 h1 ?- A$ ?- ?* D, _3 h. Z$ b$ D: d- v! ~
3、安装PDO_MYSQL
8 P) K9 q4 o, s+ g3 w, k, T
2 s$ h' R; h; A$ }! F# tar zxvf PDO_MYSQL-1.0.2.tgz
: E9 y' u, @- _" O/ w2 C- A# cd PDO_MYSQL-1.0.2/
, @+ g% c* u( J9 u# /usr/local/www/php/bin/phpize0 W; y5 H! i) i3 M+ U9 G
# ./configure --with-php-config=/usr/local/www/php/bin/php-config --with-pdo-mysql=/usr/local/www/mysql/ ^( {0 f- Y4 Y1 G
# make0 G$ C% @: E4 D% t, q( ~3 c: Y
# make install
; ~' f' L' F/ `9 p
$ r. Z6 |9 S3 s# vi /usr/local/www/php/php.ini
) M1 N' K! z# i+ N4 K2 z; V8 l( D, ?! E添加
; y; R5 e. n) ~3 N0 ?0 A1 b9 @extension_dir = "/usr/local/www/php/lib/php/extensions/no-debug-non-zts-20060613/"; E) a" l3 t& I& D! N4 J2 q
extension="pdo_mysql.so"
" s; \' x( t3 B4 f3 s& @
" ]9 h: M, S( h  g+ b* L1 @% a7 j- W5 k+ {8 B7 y7 H
七、nginx反向代理" I' o( G. j. l7 N  t6 Y
' i7 N  L" {0 Z" L! H
1.Tcmalloc 优化Nginx性能# U( q( m) v9 v8 p. Q9 Q2 |
  o; I% [* {! ]+ T: l! l
64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
& p! F1 m3 ~: e. s7 E3 u7 h4 M# ^/ v! y# ]& w/ |: a
" J$ |5 [. ^. t! @0 f5 j+ o) ^( U
# tar zxvf libunwind-0.99-alpha.tar.gz2 `9 q  ^2 f3 {, [
# cd libunwind-0.99-alpha/
) a* f& r  O0 L- y# CFLAGS=-fPIC ./configure
7 ~2 I/ s+ {- R# f# make CFLAGS=-fPIC
4 I. F# r* V; i/ S1 L: c* a  T# make CFLAGS=-fPIC install
0 k! ?6 }$ E2 b. T* q5 T4 N7 ]0 ]$ a# h9 l: K& l6 i
  @9 B- j% I4 _8 W) t( I/ K" `) {
2、安装google-perftools:. s8 {% U+ Q% E" Z
7 {. Y% N# B' P5 V
# tar zxvf google-perftools-0.97.tar.gz- O' }& ]  o% A  O3 u9 s2 E1 x; g
# cd google-perftools-0.97/& w6 t3 |/ u9 p' T. R
# ./configure
& b% g6 ?  r& g6 D. a5 }# make && make install5 f0 ^5 d) \  b# X$ h9 x" Z7 b
: [2 N) g" [' f; \1 T
# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
3 z+ `  V( C3 @' C" [6 U# U7 d# /sbin/ldconfig
' ]+ R* k. h# l, v0 D! ~# I" T
' S! ]& ^1 j6 T4 @/ u3 @# k查看是否好用,启动nginx+ W9 G5 F) B, z' D; D; s/ @/ c7 @

- ~3 `2 H$ M3 s; |# lsof -n|grep tcmalloc, t! P7 t  A7 _
如果出现下面的就表示成功了
+ @! M0 i0 B$ W- N; ]" u( [3 U* n- z( K0 [) t$ H
3 z8 s, \+ s9 l8 d- w' i
----------------------------------------
% W2 {  Z# v# {, `8 s
  ^& Z6 i0 i8 L" `. E: xnginx      4322     www   10w      REG        8,2        0     682436 /var/tmp/tcmalloc.43220 \, O: F4 i  r' z  ~
nginx      4323     www   12w      REG        8,2        0     682438 /var/tmp/tcmalloc.4323
+ Y  ?* a( X4 ^" n! J& M! ?4 Snginx      4324     www   14w      REG        8,2        0     682439 /var/tmp/tcmalloc.4324
- `( T" }- x6 h( p# u" |nginx      4325     www   16w      REG        8,2        0     682440 /var/tmp/tcmalloc.4325' j' @: I: V  P7 s
nginx      4326     www   18w      REG        8,2        0     682441 /var/tmp/tcmalloc.4326
4 p1 ?5 O1 h+ N! Q  E4 mnginx      4327     www   20w      REG        8,2        0     682442 /var/tmp/tcmalloc.4327. c" S& U( a5 [. ^
nginx      4328     www   22w      REG        8,2        0     682443 /var/tmp/tcmalloc.43283 ^, i; z( m+ b5 ?1 w1 |
nginx      4329     www   24w      REG        8,2        0     682444 /var/tmp/tcmalloc.43292 d% _" g% N9 K; w
mysqld_sa  5284    root  mem       REG        8,2  1388088      62997 /usr/local/lib/libtcmalloc.so.0.0.01 c9 n- t+ H; f3 F! O
mysqld     5397   mysql  mem       REG        8,2  1388088      62997 /usr/local/lib/libtcmalloc.so.0.0.0
- k4 q( F5 [, D* F5 O5 j9 p/ Y+ _; N0 ~4 p' m: y4 d6 P, T
---------------------------------------------' m  W+ `2 o" Z7 t1 G6 a" N

9 z8 k7 ]/ A8 v0 q! R& p8 M3.安装 pcre
6 n$ r- f- O8 }! T9 {; H/ y
' x6 B4 \0 v/ R1 \$ F' M#tar zxvf pcre-8.0.tar.gz
" F8 f5 b; D. c5 y8 c) K+ S#cd pcre-8.0* v4 d! C7 S+ K  o9 e
#./configure7 N% D6 s- [  P* V( |: E" m
#make && make install' j' q. _& r" Q, T8 \% j" p8 O
% N# m4 G. M# M% Y3 ~5 l, N
4、安装nginx
" G$ S; U2 \) m7 ~2 p( C# v" ?% E) Z# k7 s& m! X
# tar zxvf nginx-0.7.64.tar.gz
; j2 J# G. I( P# cd nginx-0.7.64- W% Z. d3 H' [4 x7 S# h
# ./configure --with-http_stub_status_module --with-google_perftools_module --prefix=/usr/local/www/nginx --user=www --group=www
  v% s' Q6 o5 \) M4 a5 K# make && make install, Z  A" I# \/ `$ u: G- h5 D

" U0 U6 K, q5 K# [# \( {) _- Y修改nginx的配置文件
9 ?1 v& U3 S1 `( B# i我这里是把原先的重命名然后新建了一个nginx.conf8 u/ v5 n- |. h/ U

5 p+ C4 f6 \7 U0 b---------------------------------------------------
! j& C) I) S) Y% Buser  www;; \7 _& x, }+ f) I. b! L
worker_processes  8;
+ K: |3 ]8 L2 y" Epid  logs/nginx.pid;
5 T' B; a/ D' i  C7 B" @! u' |
; ^' r; n$ S. p$ N* }google_perftools_profiles /var/tmp/tcmalloc;
# @& D/ W- U1 b7 c) P) U2 k+ `1 ?3 f
worker_rlimit_nofile 51200;
7 z9 m0 K- N$ Z  c2 D1 a& }. Vevents
) W, X* ?2 x* ^/ A{
, ]! b4 |. U$ O7 Z& |; d. |+ _use epoll;
* ~4 I$ z; O' O, I0 ?1 v6 J3 b1 _worker_connections 51200;
! D  x! V1 H- n  t}
1 o* u# u7 E" b; T  q8 S$ Y5 H8 Z  _( A2 x
http{5 U" a: |8 U, U
9 v0 A/ g$ R# q5 Y& V, C3 U7 p
include       mime.types;5 U* c0 `% K( s6 G! l' z1 L
default_type  application/octet-stream;
# X1 h) u( `1 @, d2 n6 O
% ^/ k$ p! ]" G, S6 A% F6 Aaccess_log  off;
0 l5 Q7 N! ~! Cerror_log  /dev/null;  g. i* i1 L3 B+ I# A: ?

6 q0 V* _& a3 A- O- ]' e; fserver_names_hash_bucket_size 128;& Y6 P0 G* e* ?2 d( s
client_header_buffer_size 32k;; z' u$ A# _, E+ k. V9 _# G, t
large_client_header_buffers 4 32k;# @+ z8 H( ^( [* V( m
client_max_body_size 8m;6 x; F5 R5 V% |: P
4 m* D( F+ \" H) f: ~: R* ?* A
sendfile on;
  N+ [$ \/ ~2 P3 Htcp_nopush     on;# q& p! x: H7 v" Y; U
7 S" S" U, b  J' H% D
keepalive_timeout 120;
. ~( O$ `3 w! E" Y; p( u#fastcgi_connect_timeout 300;- G: Q8 z( }) z# v4 {% i2 J5 S- Z
#fastcgi_send_timeout 300;% a" t; w: V, @5 `
#fastcgi_read_timeout 300;
/ K& N* z5 B+ M) a* q# q! \) t#fastcgi_buffer_size 64k;5 r. C; Z5 Q; k  v) b2 Y
#fastcgi_buffers 4 64k;) W2 {$ u7 q+ W% B6 ~2 f. p, T
#fastcgi_busy_buffers_size 128k;! \$ ^1 m9 Z+ O! U
#fastcgi_temp_file_write_size 128k;
3 p5 j$ A1 B9 h% [; y5 [4 Q6 ^tcp_nodelay on;7 ^/ k& q3 o% _( A7 }

5 d. D' U: Z( W0 V4 _, ngzip on;
: N! `+ v! A( p/ f  fgzip_min_length  1k;( z/ S! d' F* q) B: l
gzip_buffers     4 16k;
' k+ d! K# u6 \3 ?. Dgzip_http_version 1.0;
5 L" R0 e! B" X% {  Mgzip_comp_level 2;" y0 q2 L. G, _
gzip_types       text/plain application/x-javascript text/css application/xml;4 d% X# c+ n4 s" H
gzip_vary on;
) l3 U  U6 n" I% f# V3 u5 |' h) d1 u! X  }1 T6 B8 {3 N

+ F, g$ Z+ X: M3 A: F/ j4 ?2 I+ R4 R) P
include vhost/*.conf;
4 d2 d& l, u7 B3 [4 C+ G$ b0 ]6 ~& {3 _5 n; p
}# M( A$ `3 i2 j% U- ^8 i
---------------------------------------------/ G2 Q1 F! [% V

0 {! c$ q! O1 Q6 t. Z# A1 l8 J
1 w2 Y9 f, O( L- X2 M; Rvhost/www.test.com.conf的内容0 @8 z) q4 S. l2 @- h$ d$ Z

6 e$ A2 I/ L& ^* n7 l---------------------------------------------
4 n+ I. N. J3 E& t! s- Q: [server- f$ G, @% z; s% K: @! ~% A
{: G; ?6 u# {" Y# S
listen  80;( y; w* H7 R. Y! E7 c
server_name    www.yahunet.com;, M0 E: E$ {2 N" |/ e* K
index index.html index.htm index.php;! c; w, s; y# d; C5 O6 }
root    /var/www/;1 E+ J8 {. D$ s; e

* A$ F4 U. a: A& g5 H6 Z6 ?9 `
: L/ C9 h$ `2 K  j0 O% C% d+ P( T* Klocation /nginx {3 U. n( O- u5 @/ ?4 }2 G" y
stub_status on;
& [* ?& a0 e) t4 l" ?  kauth_basic  "NginxStatus";8 f. E6 U" P, e5 `, o2 p  y
# auth_basic_user_file  conf/htpasswd;   
  ]6 T" r0 ^; n8 v- Y) v#密码由apache的htpasswd工具来产生
; R$ f$ y8 P. z1 laccess_log off;
8 w& `4 o- r6 g7 m5 V5 P! B) e}
4 r6 R6 U  ~% Z
, W8 I7 r$ r! ]  J# M: v4 q( C1 I* r% g& v- ?
location / {* }1 i4 O' R# h8 L/ c8 A4 k
location ~ .*\.(php|php5)?$ {+ R' q, f$ r" g" I6 V1 G& o" J
index index.php;
+ [) O8 `- @) h" w7 jroot /var/www/;
( B: D% c; y' R3 d3 A) Z+ Uproxy_pass    http://127.0.0.1:81;3 [- x0 [7 T9 c- @: @8 U) T' u
}/ w( U$ F. l* C- M/ {$ N6 r, f' T
; X& k6 l' n  Y& e

4 h7 S+ x& G! f, M* v" s. C3 W, D) }include proxy.conf;* G# I! M' P2 h) `6 B5 E3 m4 k
1 {/ \6 V7 G' V+ x+ Y3 g
if ( !-e $request_filename) {+ m6 V2 D! j) A7 f/ L9 p; _( v
proxy_pass  http://127.0.0.1:81;" Y3 i; W( f7 O/ E7 {% ]* T4 W, n
}* R& c, |: o- Q3 r" p& D3 Y$ ?

% s! Z, B; J0 x! E/ P/ R3 j! h# d
; S( |2 O! a  W5 slocation ~* \.(jpg|jpeg|gif|png|swf)$ {
3 p* }- D& R+ ?- Jif (-f $request_filename) {: F! x7 `1 k* ?3 D8 s: Z
root /var/www/;% z& c/ ^+ K8 X" `4 }8 p8 e+ C  h
expires    30d;# |$ r+ Y5 W& R- C8 D+ w, F
break;
' K1 r! l5 L/ R  N}" X3 k* G( b$ v9 H, X% G# ^  O6 `
}
6 b1 @) j4 _4 f1 l  w) K' Y& z/ nlocation ~* \.(js|css)$ {
# U7 p0 V9 C, r+ g7 l* Lif (-f $request_filename) {
5 {9 U( L' u0 X+ d2 J8 troot /var/www/;
) K/ z1 y* k# S5 Wexpires    1d;& P% o) A( o( Y
break;
" {) b1 L9 [, c}
8 z/ ], n9 c* J$ k}
" I6 O+ {1 X$ c1 F6 f5 d& O}
* ~9 A! H; |% j6 `# w/ j# ~) e% {5 Z
error_page   500 502 503 504  /50x.html;
& m1 j9 H, c% r7 Rlocation = /50x.html {
0 W3 V7 h3 R$ ?$ proot   html;
; O0 e: z5 }, D& }$ S6 ]}" @9 {  d$ H( [& B5 b+ o# ?1 g) Q9 @

. x) m; w# t: M#如果需要记录把下面的注释去掉
- l- V- d. ]% Q- B# log_format access '$http_x_forwarded_for - $remote_user [$time_local] "$request"'0 T: L" n& }# u) Q* f3 s
#     '$status $body_bytes_sent "$http_referer"'
$ S8 k/ w! Q) L/ u6 q#     '"$http_user_agent" $remote_addr';
$ Q3 l5 T& P5 ^" r# access_log    logs/www.yahunet.com_access.log    access;4 j% e  X: W  }# {$ q- |- \( n
. `; X3 t' H' r3 W$ G5 g) t
}6 u9 |- A3 q% V$ M, c4 [9 q
-------------------------------------------------
- g/ q/ U# C4 E7 h4 ?" z+ L! a, O0 s( Y: p0 _
3 g- y# O. K. Y' z0 \/ ]

0 c6 _& S" [* V6 w' nproxy.conf内容
, }: l3 G; F# q# S# E7 o" R3 E--------------------------------------------: O0 U  j+ g4 J% `
proxy_redirect          off;
( a. ?4 O' O  a, J7 P+ oproxy_set_header        Host $host;0 A+ ^( ^# E; w: N8 d+ n- a* ^3 F
proxy_set_header        X-Real-IP $remote_addr;8 t* y: Z/ V  d% m  q
proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for;
3 W: Q$ A& G! b8 D' j6 \6 C; K6 t, ]client_max_body_size    50m;" }  W  K; [1 W" A  S
client_body_buffer_size 256k;5 k, E, S) E- @- n
proxy_connect_timeout   30;
: R0 y5 l" L8 E* [2 Oproxy_send_timeout      30;
% @. R/ O- q0 y1 H) Iproxy_read_timeout      60;. i& u' n5 X% u7 z$ [
) Q+ Z* G* i0 G  s6 ~1 z/ h+ {2 s; W
proxy_buffer_size       4k;. `* i3 d4 ?2 d$ w8 [  l
proxy_buffers           4 32k;+ a1 N6 s+ M2 C# U2 u: @9 E
proxy_busy_buffers_size 64k;4 T9 u" L! ^1 d7 Q
proxy_temp_file_write_size 64k;
. T' {* r; P& N, ^7 a& e: T5 _proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
* R* F; ~/ i" b2 v! eproxy_max_temp_file_size 128m;
4 V9 O1 x* u) z$ o- M/ `. ?( j, Z5 l2 l& B' v: I$ l
#Nginx cache; d% T) U, n. ]5 l
client_body_temp_path client_body 1 2;) ]# U# Y% g3 \  U" k; j1 W
proxy_temp_path proxy_temp 1 2;
: J! e  V, J( h2 p7 h3 y% T1 U4 ?0 N, f) d( @; Z
#client_body_temp_path      /tmpfs/client_body_temp 1 2;
% l2 D6 n  ]' O#proxy_temp_path            /tmpfs/proxy_temp 1 2;
% ], [0 I. i$ ?& j- K+ x#fastcgi_temp_path          /tmpfs/fastcgi_temp 1 2;
  Z" m, L) O% P% o1 H$ n! w& y" [; a* c: `9 L1 N" p
----------------------------------------------
) ?) {& U/ B, w$ a/ A& @7 s/ U& x8 T  S: {" D' c$ B1 s: v
修改apache的端口为81
" L, c: B: |3 _, P7 ~$ ?8 i2 ~$ X# ?8 T" d8 z6 K

% v) c3 @( d( r% I3 A  Q8 x启动 nginx* H2 h, `: P% b) D1 f. E! b) g
#/usr/local/www/nginx/sbin/nginx
: j2 s7 g* \# n  p8 `4 y) }5 N" W: h+ J6 J/ ~
然后我们用IE测试一下 http://IP地址或域名  就可以看到nginx的默认的页面证明nginx已经启动9 R7 |% B, u( M% G, i8 @& t9 V1 @+ b
4 N/ T1 M8 i1 C) N6 h: _
关闭 nginx) l4 j+ G- }3 W4 q# i8 N9 R/ w
# kill -QUIT `cat /usr/local/www/nginx/logs/nignx.pid`
% [6 a+ s9 K. k% X
1 _' G4 x( O7 z! V8 s& E重启 nginx; D8 L+ x% n8 Y6 ]& A
# kill -HUP `cat /usr/local/www/nginx/logs/nignx.pid`  `4 n" n5 f1 [3 g* Q

# G7 Q3 X% F& X( u# U& k' V: }, [* @  g6 b) c5 ?
$ p% w* I/ P& d+ I
把nginx加入到系统服务
& W1 w) v; ^5 E/ Z6 l0 D) t! }6 c5 [2 V
# vi /etc/rc.d/init.d/nginx
$ d3 K. K- C/ i) s( ]* L- ~0 D8 R' ^6 t- n

* r8 e: i; I9 ^5 W4 s; O#!/bin/bash
% S4 W/ M4 o3 C( L; D# Startup script for the nginx Web Server
+ X5 F5 C# [9 C' G( f# chkconfig: - 85 15; D) m9 ]& v' D+ C% e
# description: nginx is a World Wide Web server. It is used to serve
) ^9 j. ~* \6 z9 V2 Q3 w" h# HTML files and CGI.
/ }7 K! \0 V, |, A# processname: nginx
3 r4 w; U5 ~( d4 J$ r" Q# pidfile: /usr/local/www/nginx/logs/nginx.pid
7 y, W, b6 h( H) W# config: /usr/local/www/nginx/conf/nginx.conf% }9 @7 I. E# V' f/ n- Q
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
" ]* k1 R$ ^) B* h5 X$ X/ ?6 oexport PATH
' B- a. ], k- Z  c3 m2 P( QNGINX_HOME=/usr/local/www/nginx/sbin
, ?0 W8 P* p4 [2 J0 H! i7 H: VNGINX_CONF=/usr/local/www/nginx/conf; x, {5 H4 K$ H# b4 I; E+ U3 v
if [ ! -f "$NGINX_HOME/nginx" ]
+ z7 h- R( x3 r8 s4 kthen
! U# ?- _2 E" r! b; E4 {# Uecho "nginxserver startup: cannot start"
1 z7 F/ x' q3 Y# F2 Iexit
- x- t% H2 t" U3 A/ efi
3 G- f/ P; O2 i3 o6 a" qcase "$1" in5 G; h2 K$ k* L% Y: p4 k& A" j6 q
'start')- s! |1 [! v, y% U* t; o9 d% g* C- d
$NGINX_HOME/nginx -c $NGINX_CONF/nginx.conf6 h4 \$ M( G& f6 R
echo "nginx start successful", w# u3 v8 I: F$ k: }2 t
;;
! V/ \) b1 U  A'stop')
  ?. J& U0 y( rkillall -TERM nginx" b( r- |9 G1 {. [# E* F
;;- B7 h* P% _8 N6 \0 j
esac
# J; Y4 n5 S, v# s, x! S, _3 \) u1 X8 T+ W+ u+ U7 U  R
. }' r3 P! k0 j( ?; R
# chmod a+x /etc/rc.d/init.d/nginx
% V  G7 O: ^  I! ?# chkconfig --add nginx3 r# Y; c7 u+ v8 b9 a
# chkconfig nginx on
2 M  q% n7 @: Q* B' `9 C
0 _# W6 {, o2 A0 U1 z) j6 ]
7 X7 [) F) z4 X八、用tmpfs加速nginx和php
$ D2 O3 p* v3 v+ V4 b! c" H: Q' l% C! P7 y* G$ m: e3 t( U- X
1、加速nginx2 _/ V. R. G# t: I$ {

7 Q6 W# W5 j$ h, b# c+ ~+ L# mkdir /tmpfs  c5 y2 k; I  N& s& X) k

6 p0 g4 `! V5 ?: l编辑/etc/fstab,加入3 ^/ H1 Q2 P; S. d

' `8 S% @1 A% b& K. qtmpfs   /tmpfs    tmpfs   size=1024m,mode=1777   0 0! G$ w0 X$ `2 v& H
% ~5 a; b0 a3 G) q
编辑/usr/local/nginx/conf/proxy.conf,将缓存目录均指向/tmpfs
& Q! {) L, Q  T$ z+ n1 E$ |, }6 i4 j6 W
client_body_temp_path      /tmpfs/client_body_temp 1 2;- R1 k- y/ n( \3 n! `' Y: A
proxy_temp_path            /tmpfs/proxy_temp 1 2;
* [- B1 o  h3 i+ A. C: e- ofastcgi_temp_path          /tmpfs/fastcgi_temp 1 2;8 ?" ]6 ?, @3 u* U3 U3 b/ z

  c) D' M8 j- w3 `  Q& E$ u7 K; |
" k: l# Z1 q7 S. F此分区可视情况适当调整大小,此处设置为1G
6 ^% f/ x$ Z8 s4 F9 E% i1 G0 _- A2 f( Q

* a2 `  @; K# @  e3 I2、加速php
! u' c0 J+ {( u. A6 e8 g) c$ F& z! X% L2 b  b% ?0 ?
# mkdir /tmpfs/eaccelerator
) Q$ p  h% z* z# N# chmod 777 /tmpfs/eaccelerator
. \8 D/ ?% C4 S. M2 ^/ x6 f
1 r: x0 y- u; z# Y# vi /usr/local/www/php/php.ini0 q3 E! B* X' Z! Y- u8 W
eaccelerator.cache_dir="/tmp/eaccelerator". L2 V2 n* |0 f- V7 B- m2 D
改为:& m& s- [4 J- Z0 n! c
eaccelerator.cache_dir="/tmpfs/eaccelerator"9 `# ~" p6 [' D/ j( d( T
* [/ C4 X, \9 C8 _: E# K( C$ w( d

% @- I: a: C) X/ L6 H5 K注:/tmpfs重启后就没有了,eaccelerator需要手工创建  {+ K4 z" @6 K5 C. j
可以写一个创建eaccelerator目录的脚本0 r. p3 i7 M% C  {( l9 p) B
8 a: t/ V! v6 P/ W
# vi /usr/local/www/eacc.sh" ^) v9 \% l) B% v  v7 w

8 Q9 C! g: X' l6 r$ d% Z#!/bin/sh
. w/ B6 j" U2 R- R/bin/mkdir /tmpfs/eaccelerator" K1 |2 ]( ~5 \) F, C  d* {+ o
/bin/chmod 777 /tmpfs/eaccelerator
5 d; y2 c! Z: h2 D/etc/init.d/httpd restart
. [9 c4 ]8 T/ d* [, i6 H6 u: Z
! g9 v% p9 W0 \' E2 g- y# chmod a+x /usr/local/www/eacc.sh
3 @5 B, z5 p1 T" f* i" `# echo "/usr/local/www/eacc.sh">>/etc/rc.local% M; t: J2 n- `- r

& L8 k: n3 v. R; ~* b' Z& s
' v; w9 N$ U  ^& f5 Y) Z九、优化Linux内核参数6 K- \; F: j6 i: s
4 W0 M" g8 l7 D) r5 a  `
# vi /etc/sysctl.conf
' a( A1 ~, [/ y* W9 c! r* R  K- c$ B. e+ |& V
在末尾增加以下内容:3 z, \; {: H) b

8 @: Q- [; L7 Nnet.ipv4.tcp_fin_timeout = 30+ y+ l# t* Z2 Y6 P3 l9 ^- d% O) a
net.ipv4.tcp_keepalive_time = 300
+ z, D+ H# _5 M3 nnet.ipv4.tcp_syncookies = 1# z7 L6 {$ Q' R
net.ipv4.tcp_tw_reuse = 1
' ~+ s2 X& |$ j4 h7 E4 mnet.ipv4.tcp_tw_recycle = 12 `$ t3 T! Y& a4 b. J
net.ipv4.ip_local_port_range = 5000    65000
( z3 P! c1 C8 u, Inet.ipv4.tcp_max_syn_backlog = 8192
5 w6 k0 P: l) E3 O& q9 Cnet.ipv4.tcp_max_tw_buckets = 50001 C# o& A; j1 V$ V& F" l7 ^6 Q( i
net.ipv4.tcp_synack_retries= 1
. T& g  i9 Y0 [4 @0 O" c$ S0 Qnet.ipv4.tcp_syn_retries = 1
1 a0 l0 t9 y& Z% ]. v( Q* c
7 d: K& Y  n# w% C# Q1 q2 I使配置立即生效:
* B5 E7 o$ N" t; j" z, S# /sbin/sysctl -p& g% y# n" c0 G: F9 s

6 \$ c! A8 Y* _2 a0 M# vi /etc/security/limits.conf
. h; i- E3 d0 J& |1 x; O5 e6 p/ C# g+ N0 P) V/ E9 w
*                soft   nofile          512007 I1 @( `& X9 y. l
*                hard   nofile          102400
1 R( C/ ]; \+ M*                soft   noproc          51200
1 c1 D+ q0 x" m8 W( t8 T*                hard   noproc          102400# E. S6 @) t) N7 O3 i/ Z

  v2 L; B, C6 T8 G8 z) u# ulimit -SHn 51200
% W5 G1 j2 r1 C" i0 Z$ j
- M" l( R9 u. r# V+ t9 \十、Apache优化
, t. Q1 ^" r& l) q1 ^& S/ |2 n' x) S! @+ f& k1 O
1 apache-mpm.conf; A# Y3 e# M" d* n$ H( t# l
+ B6 s( ]) z9 V. t" x! V
httpd.conf去注释
* N& Z7 ?% D0 [4 ~Include conf/extra/httpd-mpm.conf
3 _, d) j' W/ m
& ~% ?2 B8 m2 i# vi /usr/local/www/apache/conf/extra/httpd-mpm.conf 4 {4 c- [  i/ q0 b7 J8 r# n- O+ d8 q
3 S( t9 T# U; J, Q. a* @+ L2 R' t
<IfModule mpm_prefork_module>
. ^: g/ Q2 P1 \ServerLimit           1024
6 I& U2 C& k+ i4 nStartServers          152 j2 j1 Q1 O& G- d. z, W
MinSpareServers       15+ t& r; }9 M5 F
MaxSpareServers       30& ^& h$ |9 [3 Y8 M  H
MaxClients            1024- L$ |8 y3 x5 B
MaxRequestsPerChild   0
3 b1 O$ O! X9 L8 _) F2 L</IfModule>7 P2 ]6 u- V, [. @, |* h, a+ H5 ~
6 o+ i: t, I. q
-------------------------------% S. o; j2 g( o- p& r: `
ServerLimit
$ ~# _! t7 e: z4 r4 |2 t默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。
: _4 o- t' k4 Y-------------------------------( o9 d4 H2 U9 k) l

/ Y2 h  d3 l) R- w5 U5 d3 Z3 n2 apache-keepalive
" A, t/ ?: Z2 p  ^! Q1 q7 C- k; ]6 T- \% B+ e/ _5 R' F) p& ^+ s$ X
httpd.conf去注释
" k  _4 `8 Q0 I" I# h" C8 S7 Y1 ?# s% _3 w& k% V# s
# Include conf/extra/httpd-default.conf
% M! Z: M& D, y( S1 ]$ V3 R4 c
$ A4 C# Q+ |0 R- v1 s6 p6 g( |# vi /usr/local/www/apache/conf/extra/httpd-default.conf $ ?( m9 J: N' C/ @: p% S# p
  x0 S8 c& k$ c7 X- M! I5 z
Timeout 120   #与nginx的保持一至# V6 O) T  P+ E, r
KeepAlive On2 G6 [' M/ Y- V$ q7 _( w
MaxKeepAliveRequests 1000( b5 \$ @( W, U6 v  b
KeepAliveTimeout 5/ B" ~- r: T" u1 X1 t' L- V

& Z( C5 C! k0 s2 n0 V2 h
; K  |3 z( Y& H: d7 ~十一、MYSQL 的优化
- P) l+ {, \7 }" ]' w$ T" [
" h& n8 n! W5 ?! E- \( n5 L7 u! R+ i! ~1、Tcmalloc 优化mysql性能$ B, P$ w( k1 J

' y9 X# t: M# d/ e0 Q2 |# vi /etc/init.d/mysqld: z  o: u$ H9 y) k, Z2 h
* G+ r' g' g. D) }
添加一行export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
" H% V1 c( Q( F/ U7 p# H9 a; S) i
重新启动mysql
7 m. C) L% M! @7 D9 l9 W0 X- o- B$ n* w: m
# lsof -n|grep tcmalloc
1 r3 b7 S/ n% `/ {- F# }如果出现下面的就表示成功了9 u; @7 O& a+ A1 F. Q8 y  U

. ?2 y5 w& j/ |) }$ N4 O& P& k1 ]
( P7 Z0 v2 {" w. P7 z/ L8 b0 O----------------------------------------/ [! s# J6 m- U" H/ x

/ C# r1 M  Q& nnginx      4322     www   10w      REG        8,2        0     682436 /var/tmp/tcmalloc.4322
/ c/ a! r3 l* j4 Y- Y" nnginx      4323     www   12w      REG        8,2        0     682438 /var/tmp/tcmalloc.4323
1 s, C& I( Q& w( @  znginx      4324     www   14w      REG        8,2        0     682439 /var/tmp/tcmalloc.43247 D0 f/ B  z% R+ P  |) }
nginx      4325     www   16w      REG        8,2        0     682440 /var/tmp/tcmalloc.4325/ P* z% C+ R7 R& d8 v& l9 Z
nginx      4326     www   18w      REG        8,2        0     682441 /var/tmp/tcmalloc.4326
6 r, m& k6 E; e$ anginx      4327     www   20w      REG        8,2        0     682442 /var/tmp/tcmalloc.4327
0 ^  B+ n) F  Z8 n* Lnginx      4328     www   22w      REG        8,2        0     682443 /var/tmp/tcmalloc.43289 m  ?. s  J8 Y% ~
nginx      4329     www   24w      REG        8,2        0     682444 /var/tmp/tcmalloc.4329
$ J7 A. E! ~6 M6 H! B/ ^mysqld_sa  5284    root  mem       REG        8,2  1388088      62997 /usr/local/lib/libtcmalloc.so.0.0.03 u3 n% U5 t: o7 g+ ^
mysqld     5397   mysql  mem       REG        8,2  1388088      62997 /usr/local/lib/libtcmalloc.so.0.0.05 ]% W+ _6 @0 t5 J

/ P" A* I$ O) S! H5 L; n---------------------------------------------& J% |" Y' U9 r6 P! S
; J; n2 P+ J9 h' U. I' K& Y: V, F
2、优化/etc/my.cnf* d$ V+ }" N( C. I1 L; m
* Y4 X7 j- _9 D9 a, F; E6 y# K
1)确认在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”参数;
9 q  ?% z3 x- B2)确认在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”参数;# c, E! K# V; z% w$ O
3)如果不需要的话,可以将二进制日志(binlog)停掉,方法是将“log-bin”注释掉;
- h3 S* E- o; x0 ~: ?0 e" G4)在内存允许的情况下,对一些参数进行重新配置,目标在于将大部分操作集中于内存中,尽量不进行磁盘操作,对于我的 MYSQL 服务器我是如下修改的,基于 2G 内存情况:% _5 f3 e, n. g" q, L7 B
/ f  B8 o- {1 |! X* o: }2 i
[mysqld]
1 d( K6 `  z( Y! l( C" U) i; ]' O, zkey_buffer=512M
+ B4 _2 h/ w0 ]( Q& _$ T: {max_allowed_packet=4M
: F6 X; e- K# n7 w5 Y: @2 Z- o3 l8 V2 @table_cache=1024
0 ~1 O* u- }2 G) X5 n% G0 v. tthread_cache=64% p" u1 M9 ^# g  l
join_buffer_size=32M* C# H" W3 B7 a. P; S$ U
sort_buffer=32M
3 Q% j5 K1 n) x9 xrecord_buffer=32M
; f8 u* u9 F& M3 R  Xmax_connections=512# `( ]3 S6 a0 U
wait_timeout=120
$ \# L. z7 w/ I: g/ g9 _" v& Ainteractive_timeout=120/ n! S! ^1 R: \: J4 }
max_connect_errors=30000) q: a3 M% K1 W3 v) A
long_query_time=1
8 D  _1 ]9 h( P, J5 {0 z( y7 Q5 Tmax_heap_table_size=256M
0 I4 K; b4 H7 a! f- P& otmp_table_size=128M8 {$ ^9 `0 T7 }+ U5 M0 \
thread_concurrency=8
# P% F5 A, @5 g! Z* Nmyisam_sort_buffer_size=128M2 \' \( [. o# u: Q4 l

& s* L% S5 F! d! I% Y8 V你可以根据“show status”命令返回的状态进行微调。我主要注意以下变量的数值,越小越好,最好为零:)
( K: }" R$ s9 y/ ^/ TCreated_tmp_disk_tables
& K) x) z1 t/ }2 Q1 @2 DCreated_tmp_tables
# o9 G. @  n. ~- V2 ^/ ?, j6 jCreated_tmp_files
: p. P! k) n4 R" q' dSlow_queries  u; a& w& D$ U  _! N) H

, j: K8 z; w. C8 g+ y% Z$ _, X% W1 p
: Z. K+ o5 N/ A3 I# r# C在启动脚本中使用“--log-slow-queries=/home/logs/mysql_slow.log”参数,以便进行 SQL 语句的优化工作,这个其实是很很重要的工作。记得一定要在 my.cnf 中设置“long_query_time=1”才行。
  g  h/ `# E  e. `( ^! W# }3 s) |! u( i4 ]* Y# Z
出处http://lin128.blog.51cto.com/407924/277272


它山之石: 大型论坛系统环境搭建 20万日IP负载平衡实战

大型论坛系统环境搭建(20万日IP负载平衡实战)–Nginx+Apache2+PHP+MySQL9 K1 M- \9 H, w; }- t8 K

3 u; h% x  r9 f8 L: @5 g关于大型论坛系统环境搭建(20万日IP负载平衡实战)–Nginx+Apache2+PHP+MySQL $ }5 \$ h* e- P7 L4 e7 G  [! O
(本文只针对Discuz论坛系统讨论,由于软件包更新速度比较快,你看本贴的时候可能已经是使用新版本的软件包了,安装方法可能不一致,详细请查看软件包的README文件)
( S; U3 }5 p7 O2 O. E, b, ^测试环境:理想论坛(55188).
" s$ Z# \- ^9 I' X6 M& c' n理想论坛为国内人气最旺的股票论坛,注册会员已超过100万,并以每月60000人的速度稳定递增,每日页面访问量超过200万,并保持稳定增长的趋势,60分钟在线平均约2万多人,最高记录3万3千多。目前主题超过30万,帖子接近1千万,数据库大小5.8GB,附件总大小大约150GB
* s" g1 ]1 p/ k; h9 y5 A* V$ X( Y之前理想论坛有三台服务器,两台WEB服务器以及一台数据库服务器,访问已经渐渐出现瓶颈,在猪头的建议下,站长决定增加一台服务器放数据库,另外三台做WEB,并且对原有的服务器的操作系统进行升级。
$ i! u0 X' Y" m- G3 F硬件具体情况) O. A) i6 v1 h/ l
MySQL服务器: DualXeon 5335/8GB内存/73G SAS硬盘(RAID0+1)/CentOS5.1-x86_64/MySQL51 [( }! o4 D* C2 V8 S" n0 L8 O
三台WEB服务器如下:
" F3 w' F9 C4 D4 ]2 QN1. Dual Xeon 3.0 2GB 内存$ l( @2 J6 F5 ~7 h- k
N1. Dual Xeon 3.0 4GB 内存5 b3 \) d9 a% M/ P  Q/ @0 Q! ]
N1. Dual Xeon 3.0(双核) 4G内存
# s# z% A/ j- B9 q另外有三块300G的SCSI硬盘准备做RAID5,用来存放附件,四台机器通过内网连接
1 M8 b! D$ \1 [" p4 v猪头考虑过的解决方案如下:; j( a2 o" T2 C: ?3 V8 }/ ~
1. ZEUS + PHP5 + eAccelerator0 }2 T0 ?2 E9 r5 g1 H" O
2. squid + Apache2 + PHP + eAccelerator, c  f, g: H3 C" e8 B; \) H
3. nginx + PHP(fastcgi) + eAccelerator  }3 ?" _! D- J8 v$ k4 Q. k3 U
4. nginx + Apache2 + PHP + eAccelerator! ^2 w+ q7 D9 H6 v: i! q
第一个方案,属于比较完美的,而且很稳定,但是最大的问题是ZEUS是收费软件,用盗版总会受良心责备的,所以暂时押后做候补方案! U5 O+ d- y! R
第二个方案,squid转发请求给Apache2,很多网站都采用这种方式,而且效率也非常高,猪头也测试了一下,但是问题非常严重,因为squid是把文件缓存起来的,所以每一个访问过的文件,squid都要把它打开,理想论坛拥有150G的附件,而且访问量巨大,这种情况下只有打开squid,机器很快就会因为打开文件过多而拒绝响应任何请求了,看来也不适合,只适合缓存文件只有几百M以内的网站.
1 p: o- ?( H, n- g第三个方案,猪头对第三个方案的测试结果是访问量大的时候,PHP经常会出现bad gateway,看来通过TCP连接Fastcgi执行PHP的方法不够稳定,猪头也测试了通过Unix Socket连接执行PHP,同样还是不稳定.
7 N( e  `: {+ r; M9 `$ ^5 W对比之下,猪头目前使用了第四种解决方案.
1 h( S' c. D! O+ f* B1 X) w2 |( d# FApache2的安装。
  D/ S5 q5 p$ R1 U(由于服务器采用FreeBSD7,所以大部分软件将会通过ports安装)
7 s& t! d" }( A0 W# i: T& h8 e/ d% P' {由于Apache2只需要处理 PHP请求,所以其他模块基本上都不需要,所以不要选择安装其他模块,即使rewrite也不需要,因为rewrite将会在nginx上面实现,如果熟悉,还可以修改Makefile删掉不需要的部分,这样经过优化之后,apache将会以最稳定最高效的方式处理PHP请求% v3 s+ M1 \; W8 w7 l+ Y. M1 w
cd /usr/ports/www/apache200 L$ l0 z4 ?0 u% n8 s* {
make install clean8 m- d' J. ?7 m& G$ G
修改httpd.conf(这里仅列出要修改/增加的部分)
( c1 P2 @. C4 w8 m* v2 f. N' Mvi /usr/local/etc/apache2/httpd.conf
2 V& j7 J' N& C$ p8 o: i& ~( F4 T把KeepAlive On修改为KeepAlive Off,在下面添加
1 G" v& s/ i. g# x& k% Q; DServerLimit 2048
3 S, O5 G3 h8 k5 i8 e5 ?' u# l! wMaxClients增加到512+ ?4 E9 u% D" o3 L! ?
Listen 127.0.0.1:81 #由于httpd服务器不需要对外开放,仅仅处理nginx转发过来的PHP请求,所以仅仅需要监听本地的端口.
2 r3 q9 B8 C. U5 W另外增加对PHP的支持
" @) T& i: u2 X, VAddType application/x-httpd-php .php
: s" k* Q6 x- v0 f$ D! wAddType application/x-httpd-php-source .phps7 ^; l5 a* r  Z
至于添加虚拟主机的部分将不再罗嗦,注意虚拟主机也监听本地81端口就可以了
6 [& [+ k. e9 Y) l- SPHP5的安装(GD库等模块请提前装好)
$ i: `# @7 x1 O9 n/ e0 {cd /usr/ports/lang/php5
; s1 S' y. |0 ^修改一下Makefile,把需要的东西加上去吧
7 |, \2 @- }- u3 q- D0 t0 f5 P3 x本来应该有这样一段的6 P( v8 t) t) {" a7 h! K
CONFIGURE_ARGS= /* {, H7 P& i: q# V% c  C# h: b- u2 }- z
–with-layout=GNU /5 e1 G) \( }# H, r/ ?9 M' h! C
–with-config-file-scan-dir=${PREFIX}/etc/php /4 n) d$ @+ x5 \5 B/ r6 u
–disable-all /
8 R+ k# x( z5 c" M–enable-libxml /
0 S. `! t% g2 j: i& g& K–with-libxml-dir=${LOCALBASE} /3 w9 D. t5 P& p: X  A
–enable-reflection /
$ R2 @( @; u- a: H) `: u5 p7 F8 M–program-prefix=”"
  D$ c" Y) P7 Y我们要把它修改成1 ]- u* ?4 Q" O# y; p- b+ B
CONFIGURE_ARGS= /
7 |# R- t( q* }–with-layout=GNU /
; M: A" J: r- {. N–with-config-file-scan-dir=${PREFIX}/etc/php /1 D/ c" n& ]- S& m# F# h
–disable-all /
  _( ?% v$ w& ]  V4 a  w–enable-libxml /
) P9 |: w( N+ }–with-libxml-dir=${LOCALBASE} // Y2 W5 O7 k4 c/ ~2 S+ _( J8 Y
–enable-reflection /. S$ |) E6 E# Q# w# \8 N+ J- u
–program-prefix=”" /
" d0 s/ R: ^  z- J7 V–with-config-file-path=/etc –enable-mbstring –enable-ftp –with-gd –with-jpeg-dir=/usr/local –with-png-dir=/usr/local –enable-magic-quotes –with-mysql=/usr/local –with-pear –enable-sockets –with-ttf –with-freetype-dir=/usr/local –enable-gd-native-ttf –with-zlib –enable-sysvsem –enable-sysvshm –with-libxml-dir=/usr/local –with-pcre-regex –enable-xml
6 a7 z; T/ k" K% }# p% Q- Vmake install clean
2 }9 |& m0 U9 w' Jcp work/php-5.2.5/php.ini-dist /etc/php.ini/ l. ~, k! {2 q# `, L
安装eAccelerator; @/ T- h8 _1 x' Z
cd /usr/ports/www/eaccelerator( [$ Y8 U- P, {: R" ?
make install clean
/ y% P* T) b, g5 ]' h: y把以下部分添加到php.ini尾端:' H" F$ ~  h; p, m/ I
extension_dir=”/usr/local/lib/php/20060613/”
4 r! Y  a6 l9 q& Aextension=”eaccelerator.so”
8 B; W, G' ?/ C3 Z; yeaccelerator.cache_dir=”/tmp/eaccelerator”( h* r6 C. d; [0 x" |  \2 g+ D
eaccelerator.shm_size=”64″, m2 m! f+ a3 ^$ Z8 s
eaccelerator.enable=”1″
& B  ]8 b5 G  s& z( M% u  b! n& [' \eaccelerator.optimizer=”1″
7 {  J6 I% O8 Y7 v' u- Ieaccelerator.check_mtime=”1″" c9 B) C3 P8 R; V. \
eaccelerator.debug=”0″
$ h/ ?) n! {0 l- |/ M) Xeaccelerator.filter=”"+ w0 ^* X# y* E9 n# B5 T0 d0 e# r  u
eaccelerator.shm_max=”0″
9 j, q! Q. ?' W( B* k! ^eaccelerator.shm_ttl=”60″
. }$ @% g. l5 x* p& ueaccelerator.shm_prune_period=”60″
- Z0 g) B6 e$ y+ M* m4 ^( seaccelerator.shm_only=”0″5 _3 a) b/ t. w
eaccelerator.compress=”1″
% d3 n$ T2 ~2 U; {6 M" a/ Veaccelerator.compress_level=”9″
2 r# V% j; ?" a( b: [2 N" |2 z4 U' }* reaccelerator.keys=”shm_and_disk”  ]3 K' e! a# @) I# k; C7 b
eaccelerator.sessions=”shm_and_disk”
" s+ J8 l/ F/ ?, Seaccelerator.content=”shm_and_disk”
4 z/ i" e9 u) |# r建立缓存目录以及修改权限
1 A$ {5 D3 }# \" V% g: X, Smkdir /tmp/eaccelerator9 i/ C2 u3 w' Y) E" G8 O
chmod 777 /tmp/eaccelerator7 U* C: ?  D; y* u! m7 k7 U
chown nobody:nobody /tmp/eaccelerator) g3 e9 P3 ~0 i1 j, i3 ^1 N
nginx的安装以及配置' u4 P1 B0 ?& j9 i4 w% C
cd /usr/ports/www/nginx0 p( K4 d8 [% I# z" q! {9 [
make install
4 R) d: c) k# Z3 u4 R有几个module是我们需要的,要选上$ X3 S! j' y2 T4 Q0 h
HTTP module- ~" V2 u( R& R$ ^4 N; \
http_addition module( T/ [& C9 @" H" o) a$ `8 p, i
http_rewrite module
/ v: ^( X; c2 e+ {http_realip module
5 _7 B% P0 q, a% ^! s# N. Bhttp_stub_status module
& n. Q2 V- H* r/ {6 v) `其他的看自己需要了/ s5 y( G: v. I. G
修改配置文件
9 {- J. x+ w( F. a" {, l$ kvi /usr/local/etc/nginx/nginx.conf; N; b# k) H$ W+ p6 F
user nobody nobody;
6 `/ ~- [, h- J3 t0 h7 P9 x" hworker_processes 4;
! u0 t2 M' M# }3 D( r#error_log logs/error.log;0 _3 G8 X0 h( a1 u
#error_log logs/error.log notice;. H# _+ R4 W1 j7 t. y9 s$ d. n
#error_log logs/error.log info;
6 P- \1 S# i' ?2 C. \/ x) @#pid /var/log/nginx.pid;/ t* W8 i5 ?4 a) d9 j
events {
3 k2 P; Y# O9 u/ ?+ C( nworker_connections 10240;
' K1 {9 W$ r. G+ c, M}
: F5 h2 d( F- y3 a! t3 Hhttp {* |- S! l- f7 d& P" n: i
include mime.types;
' {$ K  {/ e' m) y' F) Fdefault_type application/octet-stream;3 |1 h) h' H9 B/ E' @
limit_zone one $binary_remote_addr 10m;9 ]" Z/ Z) c- s4 s5 E( c  u
#log_format main ‘$remote_addr – $remote_user [$time_local] $request ‘' p( ~' V# w1 l, j$ g& `
# ‘”$status” $body_bytes_sent “$http_referer” ‘
+ w7 E* b. L: g" K9 d# ‘”$http_user_agent” “$http_x_forwarded_for”‘;
4 d1 G0 @  ]6 p( Y0 Hsendfile off;
& q8 z9 e; t' N: ctcp_nopush off;+ k  r: c; z) \' g! C/ ?
#keepalive_timeout 0;3 f; w& [* R+ m6 U/ I' T
keepalive_timeout 10;" q; v+ p. T  i8 u$ n
gzip off;
( J) [2 v. v% p1 xserver {
3 g6 N  Z* \* y7 hlisten 80;
4 L% d8 O5 i( y! A8 Q* {9 }4 bserver_name www.55188.net www.55188.com www1.55188.com www2.55188.com 55188.com 55188.net www.55188.cn 55188.cn bbs.55188.net bbs.55188.com bbs.55188.cn;( l4 U7 x. Z# c, P5 w# p8 u# m
index index.html index.htm index.php;
0 E1 I3 u' f9 ]2 A! V0 Wroot /home/www;
- Z8 o- S& M" o  |. |, @4 Kaccess_log /dev/null combined;
5 q( S$ \" C- M0 ~; Nlimit_conn one 5;#限制一个IP并发连接数为五个
) V+ O, P/ ?! r! O  M6 Z6 s( rerror_page 404 /404.html;
( C2 X: H$ g+ @error_page 403 /403.html;
9 j1 m2 _# }( H7 m: b$ V3 P0 l0 ~location /status {
, O6 r" d! E. E5 |; n# D& |+ e6 gstub_status on;: m  p- R/ ~( S5 b3 k; O7 d, Q
access_log off;
7 Q" l3 {- w8 X1 l) v! Tauth_basic “NginxStatus”;! U* n/ Y1 y! d1 ~
auth_basic_user_file conf/htpasswd;8 d6 N0 `) b$ \& s
}
$ r5 D  ~9 U- O2 U* w9 m( W! ~/ R#在根目录使用Discuz6.0 rewrite规则,如果你的论坛在二级目录下面,则要相应修改location
0 }0 |/ m6 `% a  u' Wlocation / {
& x8 X+ z  g$ m0 V$ Trewrite ^/archiver/((fid|tid)-[/w/-]+/.html)$ /archiver/index.php?$1 last;6 Z- @* [- L+ R( |: G  d
rewrite ^/forum-([0-9]+)-([0-9]+)/.html$ /forumdisplay.php?fid=$1&page=$2 last;
$ L" H% K+ d% q, o4 W- urewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)/.html$ /viewthread.php?tid=$1&extra=page/%3D$3&page=$2 last;% t8 H" `9 b1 r2 ]+ j
rewrite ^/space-(username|uid)-(.+)/.html$ /space.php?$1=$2 last;- {% e4 v) ]+ V% Y$ k' I
rewrite ^/tag-(.+)/.html$ /tag.php?name=$1 last;
2 e$ }" G. v; ~. [, A/ _break;, k( a+ V! C0 o- O/ e
error_page 404 /404.html;/ x, H( x+ T* K) d" Y
error_page 403 /403.html;
) A6 F- h$ H0 w4 |}! N& r* b0 k3 @
#对附件做防盗链,没有正确的referer将会返回403页面! u0 X" @: K5 N
location ~* ^.+/.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {4 V& S/ r% Y8 |+ O. r
valid_referers none blocked server_names *.55188.net *.55188.com;
+ ~& F3 a: ?! Y$ X* j( O; Aif ($invalid_referer) {, r% n4 X( Q4 ]8 m: R- T
rewrite ^/ http://www.55188.com/403.html;$ B* c1 |8 T: M  @& A1 S( [
}' Z* s7 a8 {* S5 y$ N; E
}& y2 R* M) X  h! r/ o% ~- O
#转发PHP请求到本地的81端口,让Apache处理.% R- ?( R7 S; X
location ~ /.php$ {
/ X; G) Y/ T* |, t: dproxy_pass http://127.0.0.1:81;, Z& r4 D  |8 g' M
proxy_redirect off;2 _# T- _, J, j: Z3 k/ ]. M( v
proxy_set_header Host $host;
, `% n( [& g7 |' A* m$ \proxy_set_header X-Real-IP $remote_addr;
4 \2 l: H: n3 @" Z. xproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
5 ?+ V* ]6 p& ~7 uproxy_hide_header Content-Type;- B9 Z. S7 w( o6 d9 M
}2 E) L* X: S4 \; L) |( h6 X) Z6 T
}
  ^0 E- C; f- W8 b' n8 R! W}- Z% F* t) C1 ~! ~
测试一下你的配置文件是否都正确& P; ^5 y' \5 O" N( [
/usr/local/sbin/apachectl configtest; j7 o. T( [2 C) c: v! C
/usr/local/sbin/nginx -t
6 ~, ~& |) c: y6 t都没问题的话就启动服务器吧
' ]. c. ^9 x1 a  s3 d/usr/local/sbin/apachectl start  G# c/ M( @' g$ r- w
/usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx.conf
" V+ K8 o" X6 J) y5 N. a浏览一下主页,应该正常了
- o& a" E2 @2 s/ z& ]( J  ?# E后继讨论,# z4 V# o7 ]. s* Q% d
1.数据库.# W- o: R% E! ~
数据库的编译安装不再重复讨论,仅仅讨论环境,由于理想论坛的数据库比较大,而且发展比较快,所以要作比较前一点的预算,硬盘需要使用15K RPM的SAS硬盘做RAID0+1,操作系统需要使用64位版本,因为服务器需要8GB内存,要注意的时,使用了64位系统之后部分比较老的软件可能你无法找到64位的版本,这台机器就专门做MySQL服务器吧,如果数据库超过10G,应该考虑MySQL_Cluster
6 |( b3 a8 q4 o+ l# a2.附件.
7 W% j" T; t5 I因为有三台服务器做WEB,所以附件要使用nfs的方式通过内网进行共享,至于如何设置nfs这里不再讨论,如果有不明白的请将学费交给Google' p" y9 E7 r2 [+ D9 q& M
3.WEB.9 y9 p4 s  {, H4 f
由于三台机器硬件配置不一致,所以有必要考虑一下负载平衡的问题,nginx本身附带有负载平衡的功能,但是如果启用负载平衡的功能的话,每台机器都将会把客户端请求的数据缓存到本机,这样增加了硬盘的IO,对于理想论坛的访问量来说,这是个不小的开销,最后我们是使用DNS查询的方式来分配流量, 通过不同的A记录,配置好点的机器,多分一条A记录,配置差的就少一条A记录,这样从整体上看,流量分配应该比较平衡.  H+ t( k3 N1 E- S
4.关于nginx并发连接. c: y) x% e/ w
猪头给nginx限制了每个IP的并发连接,因为对于大论坛来说,总是比较出名的,不说人家攻击你什么的.采集都特别多,如果不限制,很容易出问题,经常会导致PHP罢工.
& g5 D" w( ?; U5 I3 q5 `, |$ y以上只是猪头愚见,如果有其他进展,猪头会更新本贴,如有疑问或者不同见解,欢迎提出讨论
; {9 T* i9 L/ V+ `当然还有很多很疯狂的方法,例如说把WEB文件(附件除外)全部放内存里面,MYSQL如果小于5G,也可以全部放内存里面,不过这些方法都是太极端的了,优化效果须然好,但是风险很大。# S' {- i. ]0 [+ z8 R7 ~& a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; a! R- @+ T& X2 v2 Q; k$ r# @
优化之后的效果
4 |* d; a7 g0 k1 ^1 u由于还有两台机器升级没完成,只帖一下其中一台WEB的状况了。目前) T' z0 }+ F' s8 r# p
Active connections: 1143
2 N: w0 p9 D5 `% v/ gserver accepts handled requests! ^* }7 _( M- d& h" N8 c3 U) D
1211445 1211445 6221785
. f; o8 L1 s! v" L# {1 aReading: 67 Writing: 136 Waiting: 940, o0 c# l- e4 i' i0 D, ?: m5 O  p! S
Apache最优化要关闭不用的模块,因为httpd请求全部让nginx处理了,Apache仅仅需要处理PHP就可以了,目前我开启的模块: B7 o, }' {' h; ]
LoadModule access_module libexec/apache2/mod_access.so
# l1 l; J) N+ `/ D" r7 f% v' NLoadModule setenvif_module libexec/apache2/mod_setenvif.so
3 @! _6 F0 g# F. o+ WLoadModule mime_module libexec/apache2/mod_mime.so. p* f" a+ Z; n1 M, W' J
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
9 s6 D2 B5 H* o0 h. j% U8 e9 BLoadModule negotiation_module libexec/apache2/mod_negotiation.so
. v; m6 A( o& L) F  [9 h) m! rLoadModule alias_module libexec/apache2/mod_alias.so
$ S/ N/ P: V5 x' Q# mLoadModule rewrite_module libexec/apache2/mod_rewrite.so
" {/ J8 H7 x, Y; ]+ XLoadModule php5_module libexec/apache2/libphp5.so
8 t  _. {( P5 n, Q. ]autoindex negotiation以及rewrite这些应该都关闭的,但是要做相应的修改.目前跑起来绝对比
, S: \: V. y: t2 w+ a( i) o% Y
, P8 h) s4 c: {( J# V1 A-------------- 点评-------------. A5 {, E8 k( d/ i
6 K& b" M. w8 l8 g此文也是一个不错的案例.. 学习一下.. 自己正用的到..+ S7 F+ M* f( [5 e% g6 L
  q7 ?7 L$ B. z% A( S- {9 r# p2 ?
0 D7 q! t) l+ t# m8 o1 H------------ 点评 End ---------------

TOP

返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全