返回列表 发帖

Apache参数优化配置

一、安装" h& x; U5 i3 v; r: y
# 解压缩$ S! v/ a9 Z7 V( @# ~$ o
tar jxvf httpd-2.2.2.tar.bz2
( f2 F9 }8 d  g) zcd httpd-2.2.0
% ~& H: h! k4 F& w  q& Z, t# vi server/mpm/worker/worker.c
  N+ e( \$ V1 e4 N: I. b- R3 T找到下面几行,并改成如下的数值,其目的是在源码中修改apache可支持的最大线程数和最大客户端数目。2 y3 h  L5 H0 P: e4 H! v
# define DEFAULT_SERVER_LIMIT 256* q+ |, I% }' R1 z
# define MAX_SERVER_LIMIT 40000
9 v# G+ t3 t; T5 i4 d# define DEFAULT_THREAD_LIMIT 256
- `: b' A" J. h" H/ F# define MAX_THREAD_LIMIT 400006 h. V$ \( O; a$ Q8 y- X6 H1 _7 L

3 I& D% B! G5 Y4 H# 编译和安装 apr 1.2
3 L# _& k6 I; m+ t" tcd srclib/apr3 c( p% K" {0 A3 J; n2 |) A
./configure --prefix=/home/liuchao/local/apr9 @' @& H1 w8 i' i2 V: ~7 [
make; V- _7 I' U# U% z! ?4 V: P- W# C: z
make install
: j. |) q: ?" V( m$ @# 编译和安装 apr-util 1.23 ]- S' ]& I" t  J! q
cd ../apr-util# J+ L. K( p' r$ ^9 l( |
./configure --prefix=/home/local/apr-util --with-apr=/home/local/apr
! v2 d2 W) C+ ]6 D9 Zmake
$ f- h2 p. `  [. K6 fmake install+ m- Y) Z! w/ s* E: C
优化编译选项及配置apache可加载的模块
/ k4 h% @7 D; ^3 h6 a- vpatch -p1 < ../mod_limitipconn-0.22/apachesrc.diff5 ?8 q$ I# E) }' S7 B6 L
/usr/local/apache2.2.3/bin/apxs -c -i -a mod_limitipconn.c
7 F7 `" S( j& d! O& M' Y& f0 p. f/usr/local/apache2.2/bin/apxs -c -i -a mod_evasive20.c
' V/ J3 p' j: F- S6 v' A更改2G logs:6 v% j* Y7 N# j" Q+ l! w6 \* V
export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
4 v4 F. w- }' o: U: a然后编译cronolog即可
2 r0 S( u; @/ b! VCHOST="i686-pc-linux-gnu" / z" n; o# D* [( l' D- ]/ u
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
2 o0 [4 K: E5 s2 N1 V4 d0 q; XCXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
* X3 N3 y, ?3 ~$ z7 `1 N3 D./configure --prefix=/usr/local/apache2.2.3 --enable-mods-shared=all --enable-so --with-mpm=worker --enable-deflate --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-rewrite --enable-charset-lite --enable-suexec --with-suexec-bin=/usr/sbin/suexec --disable-ipv6 -disable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util0 C( `) t. g8 |0 D0 A1 F
# 编译及安装, Y9 r# V5 i7 c9 G' q- P+ _$ A& |
gmake && make install; Q0 ?0 D1 D0 E$ Z$ _% N
二、优化apache配置选项
3 q1 L# Y* m4 r- N; x在主配置文件httpd.conf注释下一行,这样做的目的是把apache的功能配置分成小文件,便于修改和移植1 ]: p, i) p5 J& P* ^0 u
Include conf/Includes/*.conf9 Z. \8 J" j- O4 i5 F
修改MPM(多道处理器)参数- s7 P% B( j5 E* A$ F) W! H
# cd /usr/local/apache2.2, I- G) W; Y+ r- {' Y$ U7 n
# vi conf/extra/httpd-mpm.conf
5 {) L3 A; g. [" q找到如下选项,并改成对应的数值
. l0 Q) [+ W8 P0 P4 R<IfModule mpm_worker_module>  6 u( n4 H, _8 Z( p
          ServerLimit           64" b1 _$ s: x5 @0 X! y. r
          ThreadLimit          1281 F1 a' V2 R( B& c: Q: o  C
          StartServers           8  C" w8 J( w5 R% D* j. j7 Y8 R' Z
          MaxClients          8192
/ }( @: G- R) m* o  U  G1 j          MinSpareThreads       64$ \0 i4 [% `1 ?9 q& r
          MaxSpareThreads       256
, Z2 i2 p; ]  J  |          ThreadsPerChild       128
- {. D6 \" Y4 d/ ]0 S3 ?# g          MaxRequestsPerChild    04 C7 i5 v4 w* T6 G9 J+ p5 F7 h& d
</IfModule>
% \1 v4 W" z0 p3 F8 l      ServerLimit              647 U- `; Y/ Q  W' g
      ThreadLimit              64
' p" G8 B  c1 D# ?9 p      StartServers              8
( P" h- o$ ^5 D% y1 w      MaxClients             4096' N+ k- f* v' Q% V6 s& q  o6 j! }
      MinSpareThreads          645 d0 j) y) m# d: r9 p/ B8 g2 M
      MaxSpareThreads         256 $ k3 ?/ D) \/ e# t; A9 d+ U9 @8 T
      ThreadsPerChild          648 F  y, w2 t* G8 f2 T. o$ b. s5 u
      MaxRequestsPerChild     500
# u7 D7 U& o* ]' y9 h测试过的配置:<IfModule mpm_worker_module>
6 I# E$ F* i0 g1 y$ d% G3 l# ^( Q         ServerLimit          329 o" D# N' X; q& j/ Z
         ThreadLimit          641 R  P* x- A6 G5 d  v
         StartServers          8
/ A2 I% l' ^6 \         MaxClients         2048+ |& Z( ^  Y# K9 ~5 c$ p5 A; J
         MinSpareThreads      64+ g2 [3 |; s+ `& k
         MaxSpareThreads      256
8 W, `( }& S8 r7 Q         ThreadsPerChild       64
* k' a$ H$ \4 H4 }, l) Y         MaxRequestsPerChild   0
8 l) y5 E5 F- u4 o4 I2 I; s</IfModule>" @' i" x0 L9 {% ~: g
修改apache2.2子进程所有者
: a6 K& H1 X1 D4 H  t6 U( i" V- }# vi /usr/local/apache2.2/conf/httpd.conf
6 E; r2 [1 t# y$ A# d/ N把daemon改为nobody
( O' k, I3 z- l6 Y9 C- ]User nobody
) f; F% x8 c  T/ @Group nobody- Z* ]+ m, n  B$ @) B* I) ^. M
一般说来,可以不需要的模块包括:- R! s5 T9 `" x* o2 Y0 F6 |7 b6 @
#LoadModule env_module libexec/mod_env.so! n* l1 ?0 @4 G8 d0 R, R
#LoadModule negotiation_module libexec/mod_negotiation.so7 S$ |/ ?7 f5 C. U: u! K5 n
#LoadModule status_module libexec/mod_status.so  o1 P. A7 V! k
#server side include已经过时了
9 K! v# [$ ^, t#LoadModule includes_module libexec/mod_include.so
! P, y  r; ]4 Z4 l3 e- D#不需要将没有缺省index文件的目录下所有文件列出
% x+ F6 v2 j8 ]" n" U9 i2 j#LoadModule autoindex_module libexec/mod_autoindex.so
# t. R7 z- ^5 L- g( Z#尽量不使用CGI:一直是Apache安全问题最多的地方
7 k- Y5 A# J: Y7 M#LoadModule cgi_module libexec/mod_cgi.so
! Y8 `: q( W1 _* X#LoadModule asis_module libexec/mod_asis.so
! _; k( m/ d9 u: [#LoadModule imap_module libexec/mod_imap.so
+ p1 ?3 m# L9 Y#LoadModule action_module libexec/mod_actions.so2 @6 {4 K; p/ e2 U4 Z
#不使用安全认证可以大大提高访问速度/ @3 c  o- q4 K9 {& _# V- f
#LoadModule access_module libexec/mod_access.so+ V& E  \5 K, n( ]
#LoadModule auth_module libexec/mod_auth.so
6 e# E5 S  @  H' Y, G#LoadModule setenvif_module libexec/mod_setenvif.so' K5 @+ ~  ^2 v1 W$ ]- k
最好保留的有:/ F, w: z  d1 B! q2 [; K# J4 F
#用于定制log格式! [8 E* H/ |. J. y7 y) S
LoadModule config_log_module libexec/mod_log_config.so/ A* Y! e3 h9 G; b$ w" y
#用于增加文件应用的关联
# [% K  g0 G- _% J+ vLoadModule mime_module libexec/mod_mime.so4 m, y! A( w; m9 l- X5 F
#用于缺省index文件:index.php等! t0 D! J/ S8 d' Y+ ~- G1 j
LoadModule dir_module libexec/mod_dir.so& z$ f6 e6 B4 _; X, g. }' O
可用可不用的有:3 A+ o2 K, X1 N0 k
#比如:需要在~/username/下调试php可以将' U& e: m  d; |+ k+ q
LoadModule userdir_module libexec/mod_userdir.so
+ c0 L8 z* P( U#比如:需要将以前的URL进行转向或者需要使用CGI scrīpt-alias
$ {" o9 I; u4 W) s. |LoadModule alias_module libexec/mod_alias.so7 N$ ^0 K* c6 o9 b. Z

8 I2 O5 P! e7 d' ~' ?  X2 W. T三、配置模块3 j9 ~$ z( _1 Y5 t# I! W0 h
1.配置静态页面压缩输出模块deflate
6 O7 L. c) V+ O使用mod_deflate模块: K$ W$ a3 u4 m, b
在httpd.conf中加入以下设置:
" o% U/ D0 e+ D7 g5 F+ P$ w; FSetOutputFilter DEFLATE
  J# _# W( u$ c, t- T# L8 sDeflateFilterNote ratio 8 ^9 L: X$ R. m0 J; B
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 1 ]1 [' R( N4 S2 C# t: j
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
. |& U( P* F4 T$ [+ m9 C- H2 mSetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
) m3 y) R( Y% w: H8 E, \- {$ F或者
3 z( G2 K8 y* R9 y. w& ~4 q' c4 v5 @DeflateFilterNote ratio
7 B3 {7 v" N. y8 @AddOutputFilterByType DEFLATE text/*
. m# }& T( `- tAddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscrīpt
! S( i! W+ r' Z! N' p+ Q$ K$ u两种配置方法的作用差不多,其目的主要是把一些不必要压缩的文件禁止压缩。
0 y4 h' d( \0 {/ a$ l2 ~2.配置mod_cache模块4 b8 v3 b0 i# r2 p8 {
# cd /usr/local/apache2.2/conf/Includes
( S7 d, G3 ~- Z2 f0 `6 {; N4 S# vi mod_cache.conf
9 U  j; [- W; {5 R在配置文件里添加如下语句" }9 a4 J& X0 U
<IfModule mod_cache>
- E5 C$ P  T* ~! D' _/ t5 G! H* Z0 A5 q9 i9 T" z) `* v8 b
LoadModule disk_cache_module modules/mod_disk_cache.so
! Q! C6 E9 {1 K1 y6 H<IfModule mod_disk_cache># i+ @' v% j9 X3 L
CacheRoot /
% ?# ~! W& `4 Y) W) sCacheSize 256
# w! Z; U6 t* ~- i0 e) ?CacheEnable disk /* t6 c0 f/ ]7 g; [- x
CacheDirLevels 5% F( h9 M5 w& F/ l1 o6 g3 _
CacheDirLength 3* p5 _; w7 S- O: V
</IfModule>
  h4 t: G# N8 C5 H( K) _3 [# {LoadModule mem_cache_module modules/mod_mem_cache.so0 p" W: X, P* M1 r1 v/ O0 Z* `: m
<IfModule mod_mem_cache>
) p. c/ M' v. g* Q2 c, H6 c! ~5 tCacheEnable mem /
. r  V3 `# U9 HMCacheSize 40966 H& u: y. P, Z: ?4 t+ N+ O$ [
MCacheMaxObjectCount 100
- d0 r$ A/ r8 I9 o+ `MCacheMinObjectSize 1, G" N( `" ?' P- i6 t* x
MCacheMaxObjectSize 2048
' J; F$ G4 N7 u, a  o& h' }  W# y</IfModule>: M  `$ }4 }! [  ~/ N9 H
</IfModule>
: y2 p" a) \. bvi /usr/local/apache2/conf/httpd.conf+ x! }5 [$ U/ u) a) P3 [' z
在末尾添加上:0 w8 X2 _5 ~5 O0 w9 k
CacheForceCompletion 100
0 D) h; \( R  {& PCacheDefaultExpire 3600* n) X9 l2 |: l' d, K4 E' l
CacheMaxExpire 86400
4 r/ q2 `8 W% E& ^CacheLastModifiedFactor 0.1
9 j( E: V/ s6 }" d设置虚拟目录( W7 U' f- k. s) c7 @; Z. k
然后保存退出。启动apache
0 b; E( C+ \, O& |" Z3 M& M参数的解释:0 Z; {) L! m  b1 x
  c) q7 I3 s- A4 z7 `4 r
mod_cache:6 O) D6 ]4 R6 F; F
CacheEnable: 启动 mod_cache,其后接两个参数。第一个参数指定快取的种类,应设为 mem (记忆体快取) 或 disk (磁碟快取) 之其一;第二个参数指定使用快取的 URI 路径,如果对整个网站 (或虚拟主机) 进行快取,简单指定为根目录(/) 即可。
4 T1 P0 O2 S+ h! ?CacheForceCompletion: 这个值指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。
) x# ~# d% K0 i& t9 uCacheDefaultExpire: 指定快取的预设过期秒数;预设值是一小时 (3600)。% \( ?! z( K. `* [
CacheMaxExpire: 指定快取最大的过期秒数;预设值是一天 (86400)。8 y, C6 l, e( w. g! ]  {# Y. x, U
CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。
5 q2 h# T  W( s) h) m9 z4 _计算方式是:4 r* h5 d9 I2 P+ ^
expire period (过期时距) = 最后更新后至今的时间间距 * CacheLastModifiedFactor
. l' R% {; J5 L2 o+ I5 T而expire date = 目前时间 + expire period
8 v# t* K7 \$ Q* J7 m0 e, c1 i不过无论如何,过期时间不能超过 CacheMaxExpire 的设定值。4 y& [5 C: M$ i# \
现在。如果用squid对该服务器进行反向代理的话,就可以通过cache 实现web的加速了
# f9 J9 p' o% S) n* @/ P3.配置mod_expires模块
+ G/ _4 d, r0 D7 S7 ymod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。% g' n! S$ ^! Z0 C6 X5 ]5 a
mod_expires的安装配置:
- T0 }7 b9 z- k) q7 U' y<IfModule mod_expires>
. j+ ]; J& j( @% q7 P$ ?$ G* J* |      ExpiresActive on
/ {3 V2 O; V5 @! b1 D6 E& y! G8 l      ExpiresByType image/gif "access plus 1 month"8 Q9 J7 e/ r, L* u) G
      ExpiresByType text/css "now plus 1 month"/ ]/ Z( _$ e. B  s- m1 h! n
      ExpiresDefault "now plus 1 day"
  G! N/ x$ W' p; F+ V" p1 Q</IfModule># x9 i4 r) i' g+ v( W% g3 v0 \6 E
注释:
% u) j9 w, g  a0 W所有的.gif文件1个月以后过期
" T2 W/ M2 b( {  ~" w所有的文件缺省1天以后过期% b$ L' ~" o) A. {" K
4.配置dosevasive模块
5 M0 V2 ~& |; ]% ?/usr/local/apache2.2/bin/apxs -i -a -c mod_dosevasive20.c
% G* O  i/ p6 H6 x' L, Y编辑httpd.conf,加入以下内容:
0 Q2 Q( k* k( ILoadModule dosevasive20_module modules/mod_dosevasive20.so, U; j/ F: b, ?2 K+ D) a% t( o
<IfModule mod_dosevasive20>$ I: S8 U" s$ k2 v' ?# s1 q
DOSHashTableSize 3097, n/ R' k9 Y0 X4 i7 U% A
DOSPageCount 2
1 z- H! r9 l8 v$ Z5 E) {, Q4 UDOSSiteCount 50  d! q9 E" P4 V+ [8 d( r
DOSPageInterval 15 E0 [+ Y( C- F. m' Z+ z' n! o
DOSSiteInterval 1
4 G. [3 G$ H; F9 I& J$ m  `DOSBlockingPeriod 10
, D1 R) ]1 p$ L  h& ?</IfModule>( C# _# B$ |$ G3 u$ T
5.配置mod_limitipconn模块
% W; o1 G0 u# _$ u' ?' w$ vmod_limitipconn.c是一个非官方的apache防止多线程下载模块,可以用来作为WEB文件的下载限制,但是它是使用ExtendedStatus On形式,工作在应用层。当同一个IP的连接到达限制的时候,apache对get请求发送:; D9 w. g1 R7 x) C  q4 z
HTTP/1.1 503 Service Temporarily Unavailable$ `3 V) K% N; I
从而使用户不能下载,但并不能阻止这种攻击,仍旧允许连接的。
$ p! r# R$ q* h+ f& ^# V* T# /usr/local/apache2.2/bin/apxs -c -i -a mod_limitipconn.c! G# \$ h9 L- l5 n: d, {, r
修改apache配置文件:) u2 R7 o1 C$ ~) W- r
# vi /usr/local/apache/conf/httpd.conf
# G$ N- r8 f! c7 q! l( t4 K
  R, |& q3 N8 F5 B" U9 O同时需要设置以下参数在 httpd.conf 中 , 也可以在单个虚拟服务器中。 ' P1 S; r9 X. l1 V
 , A# N* B/ a9 w/ g" ~$ @* z
ExtendedStatus On
4 m) o2 t% X4 z, s& a: E修改配置文件:* D1 I" _2 o4 @8 y* a2 s
1 全局控制:0 R5 k# w" k$ x. `. a6 J) ~
  在httpd.conf加上以下几行:
' S, ]' N9 G/ v, M( K$ m, D; q- V  <IfModule mod_limitipconn>
6 x7 ?2 Q& U' P* v, ^+ k2 W( B7 K. b9 k          <Location />     # 所有虚拟主机的/目录
8 F! B# `1 r0 R            MaxConnPerIP 3       # 每IP只允许3个并发连接, c9 e/ Y' _* ~' Q* V
            NoIPLimit image/*    # 对图片不做IP限制
( X  f# k8 r, H$ E! J      </Location>
5 t% I2 y4 t# d7 @- J9 f0 o  <Location /mp3>    # 所有主机的/mp3目录
/ A3 J3 ~3 P9 {4 d  q7 `3 K" `9 R    MaxConnPerIP 1           # 每IP只允许一个连接请求    ! p/ S9 k: b' k5 m
    OnlyIPLimit audio/mpeg video      # 该限制只对视频和音频格式的文件
" E8 \' b3 L* D" `6 N& M) Q      </Location >
! ~) d$ {- |: v% d</IfModule>8 G, l: L' X9 P2 b( C+ W  K# K) j; O
2 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:0 Y- i! J! V8 c+ @
  < VirtualHost xx.xxx.xx.xx >5 ?' q: L, q7 u* V
    ServerAdmin chenlf@chinalinuxpub.com3 R, R  J9 e, T/ j& q0 g0 P
    ServerName server.domain.com
) J8 s' z" q& r( v          ServerAlias *.domain.com/ N2 k* b. _1 U- q% }: ?
          UseCanonicalName OFF; P4 y: m* ]  j/ r
          VirtualDocumentRoot /htdoc/domain/%1
0 I7 b) T9 Y1 u8 p  < IfModule mod_limitipconn.c >
6 t% L$ T# M! N. g+ Y: Z# V  M. ~        < Location / >      # 所有虚拟主机的/目录
2 e- X* \/ e1 E1 X2 O5 j) P( C, j" X8 N      MaxConnPerIP 5           # 每IP只允许3个并发连接
% s' @( }  b' v  A            NoIPLimit image/*        # 对图片不做IP限制3 v  X/ q- t" t/ `
        < /Location >
- y$ ~, L# M" z/ _/ P2 j        < Location /mp3 >      # 所有主机的/mp3目录
) q3 `! t" b/ s9 z0 p2 O      MaxConnPerIP 2           # 每IP只允许一个连接请求   
* v; J* _8 A/ G9 F8 S      OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
7 y+ q; Z" Q, V& N        < /Location >* e( X) v- G& |7 c- `* g
  < /IfModule >. W  i% s# f/ x0 b$ ]$ B/ ?
  ErrorLog /home/my/logs/error_log
2 f3 e$ \0 z; e+ w% Q1 L" k5 a  CustomLog /home/my/logs/access_log common
: W6 s, |5 x% }0 h* X< /VirtualHost >6 B* f. L' r" Z! _; Y& y  A% J
( L$ s( ^$ J, r; D
重启apache,用多线程的下载工具下载时,大于3个线程,其余的将得到信息:
2 ?* x5 k0 r+ ~HTTP/1.1 503 Service Temporarily Unavailable
* f  p: W9 h& k. M6 {' P! y或者根据User_Agent判断,把已知的多线程工具都给deny 掉2 v; a4 z4 y& h2 ^% o0 t8 f
in httpd.conf/ e9 u. I2 i  R" `* A" N
.....2 _) _5 e) a( Z) X! Y
BrowserMatch "NetAnt" badguy
! ]9 z. |  L4 S# S" H( B; OBrowserMatch "GetRight" badguy) S3 D/ x5 k( e2 `& M" r$ i
BrowserMatch "JetCar" badguy
/ [* f' Q5 t' b3 Q7 yBrowserMatch "Mass Downloader" badguy
0 ]$ q% G2 x) ~# `# xBrowserMatch "ReGet" badguy
$ Y  Y8 i" w/ I/ `BrowserMatch "DLExpert" badguy. ^7 U1 C6 K7 d) i6 ]: h( d
BrowserMatch "FlashGet" badguy, @9 z. N) I% T) J
BrowserMatch "Offline Explorer" badguy
2 K& Y4 u8 R# A3 [; [BrowserMatch "Teleport" badguy
$ M! }+ L, y8 k9 S2 H............ |8 j' D$ Z# z* Y  Q7 x2 Z
order deny,allow+ {6 H$ ^. o1 s% E" Z; p
deny from env=badguy7 C( c  U8 j; g9 j  w+ D
allow from all  x; B1 M4 ?. z9 ?4 A
注意httpd里面应该有 mod_setenvif模块。$ {9 ~9 v* d6 {/ |
在你的apache的conf文件里面加入0 g* }* K. e0 t* A
LoadModule limitipconn_module lib/apache/mod_limitipconn.so
% w% ^$ M* C8 oExtendedStatus On& ~, M+ }: ?$ t- X% N" t% {
6.安装modsecurity(mod_security 可以加强apache的安全性,特别是在防sql 注入上有很好的效果。) 2 k; i' K/ ^- ]8 D
下载站点:http://www.modsecurity.org/download/  # W5 X9 P- W2 I+ {6 U  P% T
# /usr/local/httpd220/bin/apxs -cia mod_security.c
0 `' K3 S4 d" w# A打开httpd.conf查看是否有如下文字加入
) X" N8 ?; A" M  f. f! w/ R在httpd.conf中添加下列一段mod_security的配置文件 3 S- Z" g" D" k; E9 k
LoadModule security_module      modules/mod_security.so
6 x8 v$ J* ]* a, ^<IfModule mod_security>
6 e& T' J; J" Z8 t# ^SecFilterEngine On / v; x6 _& S+ [: x0 N
SecFilterCheckURLEncoding On / D% G6 ?( E  v  X
SecFilterDefaultAction "deny,log,status:500" ! K2 |, }- @- E" a% b9 I# g2 v
#SecFilterForceByteRange 32 126 # |9 l1 j6 _+ ~  m/ l
#SecFilterScanPOST On 9 ~' X6 a8 r6 Q% }# a6 K
SecAuditLog logs/audit_log ' V1 D) h6 R* D" g5 r3 b
### $ n6 d2 m2 V4 S; B, ]/ ~( |. e
SecFilter "\.\./" $ n+ u# i/ G/ k+ \% g, m
##### , D  Y  k# g* Q2 z4 o/ X9 q7 `+ Q& A& U
SecFilter /etc/*passwd
. ^; t+ E; d3 U% l' k5 E) m: HSecFilter /bin/*sh
: p) s  q$ J1 ^6 m1 i: k; ~+ O& a#for css attack 7 _% E. {$ {. q, K8 R* J" x8 {0 S
SecFilter "<( | *scrīpt" ) H" u& t/ R, u
SecFilter "<(.| +>"
6 I8 V- b/ {# [; ^2 u#for sql attack
! Y% d6 ^8 w2 l! o+ Y9 q9 qSecFilter "delete[ ]+from" 5 U- w& k# R& q
SecFilter "insert[ ]+into" 8 L! ~/ Q- s+ D' N9 r0 \
SecFilter "select.+from"
3 c" p5 p1 o/ F1 _* h. _SecFilter "union[ ]+from" * L# M0 i! k$ I1 K0 Y( ^7 t
SecFilter "drop[ ]"
: ^1 @6 _0 I! M</IfModule> : x' k% [/ v5 F) h4 H% I
四、滚卷log2 J; ?& H) {3 l
编译前设置export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"; ~4 i! r+ F! U! F$ j$ m3 z; U
使其支持2G以上文件。) K" ^4 B) j. N) V# `
ErrorLog "|/usr/local/sbin/cronolog    /usr/local/apache2.2/logs/error_%Y%m%d.log"
. p" p/ L! {3 a# cCustomLog "|/usr/local/sbin/cronolog    /usr/local/apache2.2/logs/access_%Y%m%d.log" combined
, m; Q" f, b( R" b! P) Q6 I用gzip压缩每天的日志:/ F' C( I2 L& ?0 V; t
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log* b7 B9 R6 o1 n2 j' |9 M& {
日志的定期删除:
9 j" M2 k9 i8 L  V$ n- b30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f# W( X2 t7 Z% b- o4 [: u- C8 T1 R4 ^% [

4 v3 K3 _  }% z2 G) q+ m+ Q运行语法检查命令检查语法,出现错误后继续调整。
; x1 W- {& }/ Z. s2 \# ./bin/apachectl -t5 h* W7 _! |' Q2 m: e1 g" d3 @* \
html网页跳转7 X, }. U  ^4 c5 n7 T! j$ p  v
<title>index.html</title>
7 `6 v1 T3 w. D<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
: O8 k! ]7 k: r<meta http-equiv="refresh" content="0;url=http://210.51.8.179:81"> 5 a- R$ [0 }- T
使apache的日志文件里不记录图片文件
9 w* ]5 p) E" ^: t0 m' g     找到:   
4 W. u0 j: |) u) l      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined" a  a% c& T2 l0 m- d
      LogFormat "%h %l %u %t \"%r\" %>s %b" common
6 c7 i) M: ^( J' H7 e3 X* t      LogFormat "%{Referer}i -> %U" referer
7 X- K4 n/ f; h8 F( Y, [      LogFormat "%{User-agent}i" agent
3 g/ E: G! N( y+ Z2 X    再后面加上图片文件的类型
% f$ Q3 B' d$ W. [% O      SetEnvIf Request_URI \.gif$ gif-image
7 D# c2 j$ W: A0 u4 s8 P1 B      SetEnvIf Request_URI \.GIF$ gif-image
7 Q3 J# }0 a% ~0 W4 R      SetEnvIf Request_URI \.jpg$ gif-image
9 V1 w8 [& r, n# y% E& a      SetEnvIf Request_URI \.JPG$ gif-image; R( v  z5 c4 E2 ?2 W9 B
      SetEnvIf Request_URI \.png$ gif-image
0 T. W& Z7 i* o! u% K  J      SetEnvIf Request_URI \.js$    gif-image   
  E6 \' S0 q' a! k' N$ J      SetEnvIf Request_URI \.bmp$ gif-image6 {' i( |  t$ V
      SetEnvIf Request_URI \.css$ gif-image* F( I; G+ a9 T5 t
      SetEnvIf Request_URI \.mid$ gif-image4 W& O* c  P3 @" s8 a0 W+ d
      SetEnvIf Request_URI \.swf$ gif-image
! x: f" T/ z7 P      SetEnvIf Request_URI \.mmf$ gif-image
2 j0 f3 N& w0 N      SetEnvIf Request_URI \.wma$ gif-image; _5 I, X$ g: s: V
      SetEnvIf Request_URI \.midi$ gif-image
0 Y7 D( u8 [& }8 I7 j! b' |- N8 `    日志
- t& `; ~0 |5 A6 m; ~% _      CustomLog /usr/local/apache/logs/access.log combined env=!gif-image$ G1 b6 X. a, B+ X, U
使用两个 # ^: r% T( j; `$ C: c; O: B0 I
ProxyPassReverse / http://%{HTTP_HOST}:8088/ 7 `* l0 W! ^0 B" h. K8 q
RewriteEngine on                                          / ?8 m" G2 l/ H: ~) @( z
RewriteCond     %{REQUEST_URI} !.*\.(gif|png|jpg)$
$ J4 ^6 d1 Z7 T. ]& ]$ CRewriteRule ^/(.*) http://%{HTTP_HOST}:8088/ $1 [P]
+ E- E( K" P( TLinux下检测Apache进程数量并自动重启的脚本 ! r; n; t: `2 f
在/etc/crontab里,定时执行检测脚本,检测系统的Apache,和Mysql进程是否超出标准,超标的话,自动重启,没有的话,记录进程数据.
. a2 A3 y- r2 p* |/ MCrontab的内容(每30分钟执行一次,并将结果记录在/var/log/chksys.log)
7 R8 |5 Q6 \% X: J9 V0,30 * * * * root /usr/local/chksys.sh >> /var/log/chksys.log
% ^4 q6 K2 L: b1 G% }- [9 T/usr/local/chksys.sh代码:. c% w! }% J7 j8 u/ W
#!/bin/bash" ?! O6 C0 ~/ `5 T- r9 X
#check apache,mysql thread and auto reboot system% J; J* a  @, N& T6 i  d
#Powered by ipaddr(aspbiz)8 x: I: h% b  A0 W/ l
#config
; P" y  r8 `8 F; Z# yMaxApacheThread=300
( r8 S7 |% Y( J- \+ ~# r/ W( QMaxMysqlThread=250
, A* V% B6 R+ a9 r: ^NeedReboot=0) L4 w! J% y3 D# {3 M8 Y. |4 e
ApacheThread=`ps -A|grep http|wc -l`
# [, n; b, V9 m/ O2 E+ tMysqlThread=`ps -A|grep mysql|wc -l`) x" r8 P& F  ^6 `2 |$ S3 W- t7 v1 v
if [ $ApacheThread -gt $MaxApacheThread ]
: t% z9 z5 }1 E0 Lthen
5 J" l# M3 K* y# p7 L2 V! QNeedReboot=1, Y5 r/ W; I) K6 s+ G
fi
/ p; _7 K4 J' X+ W2 [/ Xif [ $MysqlThread -gt $MaxMysqlThread ]
" ~6 x) g) r+ \2 x9 Tthen/ ?$ S  d0 F* s) c+ j( h: i3 ?6 E
NeedReboot=1: v# \8 M/ @+ a3 q3 U: k
fi& {1 Q1 O0 Q# H) j
if [ $NeedReboot -eq 1 ]6 O6 p( O- j/ @+ y" t0 \4 l
then, T* D- q7 k. @, A4 a$ B6 t8 Z
echo "-----------------------------"" h8 A$ B+ }7 C0 X, l8 F
echo $(date +"%y-%m-%d %H:%M:%S"' ]( O6 t: j! ?
echo "-----------------------------"& C5 u% ?( W. J' M
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
+ R2 U  }. p) n6 Z. X2 O2 l4 Fecho "System is busy,reboot"
0 n4 J- t: c5 G& R& vreboot
; f8 G; I2 Y1 @$ l; Celse
& s/ U, I$ r- W; aecho "-----------------------------"  w* x3 K4 B  ^& X, `
echo $(date +"%y-%m-%d %H:%M:%S"
" ^( E' Z, F# j1 R8 necho "-----------------------------"1 `0 m, T- I5 h7 \. c- _
echo "Apache:$ApacheThread;Mysql:$MysqlThread."! o/ R! ]# @& H' F  p
echo "System is normal"; Z% R" r# z2 o) S  V2 ?
fi

返回列表