专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » apache安装:APACHE安装笔记 »正文

apache安装:APACHE安装笔记

来源: 发布时间:星期四, 2009年2月12日 浏览:131次 评论:0


摘要:


  1. WEB应用容量规划:根据硬件配置和WEB应用特点进行WEB服务规划及些简单估算公式;
  2. APACHE安装过程:apache通用简化安装选项方便以后应用模块化配置;
    修改 HARD_SERVER_LIMIT:
    vi /path/to/apache_src/src//httpd.h
    # HARD_SERVER_LIMIT 2560 <=将原来 HARD_SERVER_LIMIT 256 后面加个“0”
    apache编译:
    /path/to/apache_src/configure --prefix=/another_driver/apache --enable-shared=max --enable-module=most
  3. 可选应用模块/工具安装:php resin mod_gzip mod_expire及各个模块的间配合;
    PHP安装:
    /path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need
    mod_resin安装:
    /path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs
    Mod_gzip安装:
    /path/to/apache/bin/apxs -i -a -c mod_gzip.c
    工具:cronolog安装:http://www.cronolog.org
  4. 升级/维护:看看通用和模块化安装过程如何简化了日常升级/维护工作;
    按照以上思路方法系统管理员和应用管理员职责可以清楚分开互相独立
    系统安装:系统管理员职责就是安装系统=>安装好台可以适应任何情况APACHE然后COLON
    应用安装:由应用管理员负责具体应用所需要模块并设置HTTPD
    系统升级:系统管理员:升级系统/升级APACHE
    应用升级:系统管理员:升级应用模块


具体介绍说明:

WEB应用容量规划
APACHE主要是个内存消耗型服务应用我个人整理总结经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5

为什么会有个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多内存用于文件系统缓存Cache从而进步提高单个请求响应速度在高负载下系统单个请求响应速度会慢不少而超过apache_max_process系统会开始使用硬盘做虚拟内存交换空间而导致系统崩溃此外同样服务:2G内存机器apache_max_process般只设置到1G内存1.7倍APACHE本身会管理更多进程而产生性能下降

例子1:
个apache + mod_php服务器:个apache进程般需要4M内存
因此在个1G内存机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你应用让服务尽量跑在500个APACHE以下并设置APACHE软上限在800个

例子2:
个apache + mod_resin服务器: 个apache进程般需要2M内存
个2G内存机器上: apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
因此:apache_max_process = 2000 * 1.5 = 3000

以上估算都是按小文件服务估算(个请求般大小在20k以下)对于文件下载类型站点可能还会受其他原因:比如带宽等影响

APACHE安装过程
服务器个数硬上限HARD_SERVER_LIMIT修改:
在FREEBSD和LINUX等UNIX操作系统下APACHE缺省最大进程数是256个需要修改apache_1.3.xx/src//httpd.h
#ndef HARD_SERVER_LIMIT
#def WIN32
# HARD_SERVER_LIMIT 1024
#el d(NETWARE)
# HARD_SERVER_LIMIT 2048
#
# HARD_SERVER_LIMIT 2560 <=将原来HARD_SERVER_LIMIT 256 后面加个“0”
#end
#end

解释:
APACHE缺省最大用户数是256个:这个配置对于服务器内存还是256M左右时代是个非常好缺省设置但随着内存成本急剧下降现在大型站点服务器内存配置般比当时要高个数量级不止所以256个进程硬限制对于台1G内存机器来说是太浪费了而且APACHE软上限max_client是受限于HARD_SERVER_LIMIT因此如果WEB服务器内存大于256M都应该调高APACHEHARD_SERVER_LIMIT根据个人经验:2560已经可以满足大部分小于2G内存服务器容量规划了(APACHE软上限规划请看后面)

APACHE编译:通用编译选项能使安装过程标准化
./configure --prefix=/another_driver/apache/ --shared-module=max --enable-module=most

解释:
--prefix=/another_driver/apache/: 个系统使用寿命最低般就是硬盘因此:将服务数据和系统完全分开不仅能提高了数据访问速度更重要大大方便系统升级备份和恢复

--shared-module=max:使用动态加载方式会带来5%性能下降但和带来好处相比更本不算什么:比如模块升级方便系统升级风险降低安装过程标准化

--enable-module=most:用most可以将些不常用module编译进来比如后面讲到mod_expire是就不在apache缺省常用模块中

如果不想build so, 也可以这样:
./configure
\"--with-layout=Apache\"
\"--prefix=/path/to/apache\"
\"--disable-module=access\"
\"--disable-module=actions\"
\"--disable-module=autoindex\"
\"--disable-module=env\"
\"--disable-module=imap\"
\"--disable-module=negotiation\"
\"--disable-module=env\"
\"--disable-module=status\"
\"--disable-module=userdir\"
\"--disable-module=cgi\"
\"--disable-module=\"
\"--disable-module=auth\"


\"--disable-module=asis\"

但结果会发现这样编译对服务性能只能有微小提高(5%左右)但却失去了以后系统升级和模块升级灵活性无论是模块还是APACHE本身升级都必须把所有SOURCE加在起重新编译

apache缺省配置文件般比较大:我们可以使用去掉注释思路方法精简下:然后再进入具体培植过程能让你更快定制出你所需要
grep -v \"#\" httpd.conf.default >httpd.conf

需要修改通用项目有以下几个:

#服务端口缺省是8080建议将整个APACHE配置调整好后再将服务端口改到正式服务端口
Port 8080 => 80

#服务器名:缺省没有
ServerName name.example.com

#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800

#缺省启动服务后服务进程数:等服务比较平稳后按平均负载下httpd个数设置就可以
StartServers 5 => 200

不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200

但从我经验看来:缺省值已经是非常优化而且让APACHE自己调整进程个数还是比较好

特别修改:
在solaris或些比较容易出现内存泄露应用上:
MaxRequestsPerChild 0 =>3000

应用模块和工具安装配置:
由于使用动态加载模式所以可以方便通过调整配置来定制APACHE:不常用模块全部清除

般说来可以不需要模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side 已经过时了
#LoadModule s_module libexec/mod_.so
#不需要将没有缺省index文件目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:直是APACHE安全问题最多地方
#LoadModule cgi_module libexec/mod_cgi.so
#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 env_module libexec/mod_env.so

最好保留有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so

可用可不用有:
#比如:需要在~/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在本地根本不向服务器发出请求

PHP安装:

/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need
需要修改配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php

resin安装设置:
/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs

般将具体resin设置放在另外个文件中:
<IfModule mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfModule>

mod_expires安装配置:
<IfModule mod_expires.c>
ExpiresActive _disibledevent=>ExpiresByType image/g \"access plus 1 month\"
#所有文件缺省1天以后过期
ExpiresDefault \"now plus 1 day\"
</IfModule>

mod_gzip安装:
/path/to/apache/bin/apxs -i -a -c mod_gzip.c


mod_gzip和PHP在配置
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_minimum_file_size 1000
mod_gzip_maximum_file_size 300000
mod_gzip_item_ file .htm$
mod_gzip_item_ file .html$
mod_gzip_item_ file .php$
mod_gzip_item_ file .php3$
mod_gzip_item_ mime text/.*
mod_gzip_item_ mime httpd/unix-directory
#不要让mod_gzip和phpsession使用同个临时目录:php_session需要通过php.ini设置session.save_path = /tmp/php_sess
mod_gzip_temp_dir /tmp/mod_gzip
mod_gzip_dechunk Yes
mod_gzip_keep_workfiles No
</IfModule>
mod_gzip和mod_php配合:不要让mod_gzip和mod_php使用同个临时目录;

mod_gzip和RESIN配合:要让mod_gzip在mod_caucho后LOAD否则mod_gzip不起作用
...othr modules
AddModule mod_so.c
AddModule mod_caucho.c
#notice: mod_gzip must load after mod_caucho
AddModule mod_gzip.c
AddModule mod_expires.c
...

<IFModule mod_gzip.c>


mod_gzip_on Yes
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 3000
mod_gzip_maximum_file_size 300000
mod_gzip_item_ file .html$
mod_gzip_item_ mime text/.*
mod_gzip_item_ mime httpd/unix-directory
mod_gzip_item_ handler \'caucho-request\'
</IFModule>

日志轮循工具cronolog安装和设置:cronolog可以非常整齐将日志按天轮循存储
缺省编译安装到/usr/local/bin/下只需要将配置改成:

CustomLog \"|/usr/local/sbin/cronolog /path/to/apache/logs/%w/access_log\" combined

日志将按天截断并存放在以weekday为目录名目录下:比如:log/1是周log/5是周 5, log/0是周日

升级维护:
由于使用标准化DSO模式安装APACHEAPACHEHTTPD核心服务和应用模块以及应用模块的间都变非常灵活建议将所有独立模块配置都放在
<IfModule mod_name>
CONFIGURATIONS..
</IfModule>
这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddModule mod_gzip.c
就屏蔽了mod_gzip其他模块不首任何影响

安装和维护过程:

  • 系统安装:系统管理员职责就是安装系统和个可以适应任何情况APACHE然后COLON
  • 应用安装:由应用管理员负责具体应用所需要模块并设置HTTPD
  • 系统升级:系统管理员:升级系统/升级APACHE
  • 应用升级:应用管理员:升级应用模块
  • 系统备份/恢复:如果APACHE不在缺省系统盘上只需要将APACHE目录备份就可以了遇到系统分区硬件问题直接使用预先准备好系统COLON直接将APACHE所在物理盘恢复就行了
系统管理员:APACHE最简化安装 OS + APACHE(httpd core _disibledevent=>应用管理员:应用模块定制   +so
+php
+so
+caucho
+ssl
适用应用: 纯静态页面服务:
image.example.com
www.example.com bbs.example.com mall.example.com



参考文档:

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



标签:apache安装
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: