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
其他的东西还没有想到,等想好了会继续贴出来!
参考文档(有时间MM可以上以下网站参考):
Apache
http://httpd.apache.org
php
http://www.php.net
Resin
http://www.caucho.com
mod_gzip
http://www.remotecommunications.com/apache/mod_gzip/
Cronolog
http://www.cronolog.org
mod_expires
http://httpd.apache.org/docs/mod/mod_expires.html