Apache优化[阮胜昌]

经过查阅资料,这次对apache的参数做了如下调整,昨天也把apache 从2.1.X升级到了2.2.x, mysql 从4.x升级到了5.x
<IfModule mpm_prefork_module>
   ServerLimit      2000
   StartServers       10
   MinSpareServers     10
   MaxSpareServers    15
   MaxClients       1000
   MaxRequestsPerChild  10000
</IfModule>
需要注意的是ServerLimit必须放在maxclients前面,否则无效,系统会不允许设置maxclients超过256为了平衡内存占用调整了
keepalvietimeout 5  (原来是15)
MaxRequestsPerChild 10000 (以前是20000)
另外,加入了apache防盗链设置,从而减小流量的占用
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://deepin.org/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://deepin.org$ [NC]
RewriteCond %{HTTP_REFERER} !^http://bbs.deepin.org/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://bbs.deepin.org$ [NC]
RewriteRule .*\\.(iso|zip|rar|7z|gif|jpb|png|css|js|swf])$ http://bbs.deepin.org [R,NC]
目前看到的效果是 600人在线的情况下, CPU占用平均40% (以前基本在70%以上),内存开始可以正常回收,保持空余内存在10M-20M之间浮动 (以前会越来越少,直到崩溃,基本不会回收)
APACHE优化之apache的内存使用
apache的内存使用
apache进程在使用内存时,是“渐长”的。也就是说,直到这个进程死掉,使用内存的数量是一直增长而不会减少的。这样的话,apache进程使用内存的多少,就决定于你的应用程序最大使用内存量了。
keepalive参数
KeepAliveTimeout这个参数决定了,在什么都不做之前,一个http进程能够等待多长时间?设想一下,如果keepalive设置为on,而keepalivetimeout设置为一个比较大的数字,apache占用内存会很快的增长。这是因为,一个apache进程完成了一个任务(并达到了一定的内存占用,想一下“渐进”模式),并不会马上退出,而是等待一个keepalivetimeout时间。假设用户的链接请求持续不断的到来,则积累起来的无用的apache进程就会相当多,直到timeout,这些进程才会被杀死。
但是,keepalive的确对于静态的文件,比如图像文件的传送是很有效的,因此,keepalive要设置为on,但是keepalivetimeout要设置的小些,比如5s
MaxRequestsPerChild
这个参数是说,apache进程在处理了多少个请求之后,必须退出,重新开始,以免在处理中的内存问题。
对于php脚本来说,把这个参数设置的小一些是有好处的,可以避免程序使用的内存持续增长对apache带来的压力:让这个参数定期释放内存,因为php是在脚本执行完毕后,自动释放只用的资源(内存)的。
比如设置为50?如果太小的话,重新产生一个apache进程也是要消耗资源的,这是一个平衡问题。
apache 防盗链两例
1.利用rewrite 确认你的apache 能使用rewrite mod
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://linuxsky.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://linuxsky.net$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.linuxsky.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.linuxsky.net$ [NC]
RewriteRule .*\\.(gif|jpb|png|css|js|swf])$ http://www.linuxsky.net [R,NC]
其中有色的地方都是要改为你的:
 红色:就是改为你提供下载页面的地址,也就是只有通过这个地址才可以下载你所提供的东东。
 蓝色:就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有通过红色的地址才可以访问。
 绿色:如果不是通过红色的地址访问蓝色这些为扩展名的文件时就回重定向到绿色地址上。
2.利用SetEnvIfNoCase 和 access
SetEnvIfNoCase Referer \"^http://linuxsky.net\" local_ref=1
SetEnvIfNoCase Referer \"^http://www.linuxsky.net\" local_ref=1
gif|jpb|png|css|js|swf)\">
Order Allow,Deny
Allow from env=local_ref
红色为信任站点,蓝色为受保护的文件扩展名。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在FREEBSD和LINUX等UNIX操作系统下APACHE缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif
注解:
APACHE缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,现在随便找一台PC内存配置都与其相当,服务器就更不要说了。所以256个进程的硬限制对于一台高于256M内存的机器来说是太浪费了,而且APACHE的软上限max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高APACHE的HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(APACHE的软上限的规划请看后面)。
2、APACHE的编译:通用的编译选项能使安装过程标准化
./configure –prefix=/another_driver/apache/ –enable-shared=max –enable-module=most
注解:
–prefix=/another_driver/apache/: 作为web服务器硬盘的工作量是不可忽略的,为了降低硬盘的损耗可以将服务数据和系统完全分开,这样能提高了数据的访问速度,更重要的,大大便于系统升级,备份和恢复。
–shared-module=max:使用动态加载会有5%的性能损耗,但是这样做更有助于模块升级、系统升级风险降低、安装过程标准化。
–enable-module=most:用most可以将一些不常用的module编译进来,例如后面分析的mod_expire是就不在apache的缺省常用模块中。
3、精简apache:apache的缺省配置文件一般比较大,可以去掉无聊的注释精简一下。
grep -v “#” httpd.conf.default >httpd.conf
#服务端口,缺省是8080,建议将整个APACHE配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80
#服务器名:缺省没有
自己搞定
#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800
#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200
不要修改:
以前也有些文章说要修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200
个人看来:缺省值已经是非常优化的了,而且让APACHE自己调整进程个数还是比较好的。
特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000
4、应用模块和工具的安装配置:由于使用模块动态加载的模式,所以可以方便的配置来把APACHE调整成你需要的,最好把不常用模块全部清除,无论是安全考虑还是效率考虑。
不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了,淘汰。
#LoadModule includes_module libexec/mod_include.so
#LoadModule autoindex_module libexec/mod_autoindex.so不需要将没有缺省index文件的目录下所有文件列出
#LoadModule cgi_module libexec/mod_cgi.so尽量不使用CGI:一直是APACHE安全问题最多的地方
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#LoadModule access_module libexec/mod_access.so不使用安全校验可以大大提高访问速度
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so
最好保留的有:
#LoadModule config_log_module libexec/mod_log_config.so用于定制log格式
#LoadModule mime_module libexec/mod_mime.so用于增加文件应用的关联
#LoadModule dir_module libexec/mod_dir.so用于缺省index文件:index.php等
可用可不用的鸡肋:
#需要在~/username/下调试php可以:LoadModule userdir_module libexec/mod_userdir.so
#需要将以前的URL进行转向或者需要使用CGI script-alias可以: LoadModule alias_module libexec/mod_alias.so
常用的模块:
最常用的应该是php和JAVA WEB应用的wrapper,从性能上讲:mod_gzip可以减少40%左右的流量,从而减少机器用于传输的负载,而mod_expires可以减少10%左右的重复请求,让重复的用户请求CACHE在本地,根本不向服务器发出请求。
建议将所有MODULE的配置都放到:
/path/to/php_src/configure –with-apxs=/path/to/apache/bin/apxs –with-other-modules-you-need

 


 

你可能感兴趣的:(优化,胜)