常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

Apache安装笔记

 
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全
阅读上一个主题 :: 阅读下一个主题  
作者 留言
ldconfig
精神病


注册时间: 2002-06-09
文章: 1090

文章发表于: Fri 2002-10-11 14:40:06    发表主题: Apache安装笔记 引用并回复

版权声明:可以任意转载,转载时请务必标明原始出处和作者信息



从简化安装==>性能调优==>方便维护的角度,讨论WEB服务的规划==>HTTPD安装/应用模块配置==>升级/维护等过程。


摘要:



  1. WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;

  2. APACHE安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;

    修改 HARD_SERVER_LIMIT:

    vi /path/to/apache_src/src/include/httpd.h

    #define HARD_SERVER_LIMIT 2560
    <===将原来的 HARD_SERVER_LIMIT 256

    后面加个“0”

    apache编译:

    /path/to/apache_src/configure --prefix=/another_driver/apache --enable-shared=max

    --enable-module=mos
    t

  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呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过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/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左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且APACHE的软上限max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高APACHE的HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(APACHE的软上限的规划请看后面)。



APACHE的编译:通用的编译选项能使安装过程标准化

./configure --prefix=/another_driver/apache/ --enable-shared=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=setenvif" \


"--disable-module=status" \


"--disable-module=userdir" \


"--disable-module=cgi" \


"--disable-module=include" \


"--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 include已经过时了


#LoadModule includes_module libexec/mod_include.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 setenvif_module libexec/mod_setenvif.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在本地,根本不向服务器发出请求。



建议将所有MODULE的配置都放到



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设置放在另外一个文件中:




CauchoConfigFile /path/to/apache/conf/resin.conf



mod_expires的安装配置:

 


ExpiresActive on


#所有的.gif文件1个月以后过期

ExpiresByType image/gif "access plus 1 month"


#所有的文件缺省1天以后过期

ExpiresDefault "now plus 1 day"



mod_gzip的安装:

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



mod_gzip和PHP在一起的配置




mod_gzip_on Yes


mod_gzip_minimum_file_size 1000


mod_gzip_maximum_file_size 300000 


mod_gzip_item_include file \.htm$


mod_gzip_item_include file \.html$


mod_gzip_item_include file \.php$


mod_gzip_item_include file \.php3$


mod_gzip_item_include mime text/.*


mod_gzip_item_include mime httpd/unix-directory 


#不要让mod_gzip和php的session使用同一个临时目录: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




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


...





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_include file \.html$


mod_gzip_item_include mime text/.*


mod_gzip_item_include mime httpd/unix-directory


mod_gzip_item_include handler 'caucho-request'



日志轮循工具cronolog的安装和设置:cronolog可以非常整齐的将日志按天轮循存储

缺省编译安装到/usr/local/bin/下,只需要将配置改成:


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



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

log/0是周日


升级维护


由于使用标准化的DSO模式安装APACHE,APACHE的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在




CONFIGURATIONS..




里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:

#AddModule mod_gzip.c


就屏蔽了mod_gzip,其他模块不首任何影响。




安装和维护过程:





  • 系统安装:系统管理员的职责就是安装系统和一个可以适应任何情况的APACHE,然后COLON。


  • 应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。


  • 系统升级:系统管理员:升级系统/升级APACHE

  • 应用升级:应用管理员:升级应用模块

  • 系统备份/恢复:如果APACHE不在缺省的系统盘上,只需要将APACHE目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,直接将APACHE所在物理盘恢复就行了。






















系统管理员:APACHE的最简化安装 OS + APACHE(httpd core only)
应用管理员:应用模块定制   +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


_________________
中华人民共和国宪法 第三十五条 中华人民共和国公民有言论、出版、集会、结社、游行、示威的自由。

He said, 'We haven't had that spirit here since nineteen eighty nine'
返回页首
阅览会员资料 发送站内信件 浏览发表者的主页 MSN Messenger
wangbin
老妖


注册时间: 2003-06-20
文章: 1461

文章发表于: Thu 2004-05-13 22:18:11    发表主题: 引用并回复

代码:
grep -v "#" httpd.conf.default >httpd.conf


好,以前还没有看到! Laughing

_________________
问:为什么不用ports?
答:装13。
我很欣赏。
返回页首
阅览会员资料 发送站内信件
hernan
半仙


注册时间: 2004-05-22
文章: 8

文章发表于: Sat 2004-05-22 22:34:11    发表主题: 高手救我 引用并回复

我是新手一个
刚刚装上了apache
但是启动不了
只要运行命令:apachectl start
就会出现如下:
Can't locate API module structure 'auth_anon_module' in file
/usr/local/libexec/apache/mod_auth_anon.so:Undefined symbol
"auth_anon_module"
希望哪位高手来帮我一下
越快越好
先谢谢大家了
返回页首
阅览会员资料 发送站内信件
wangbin
老妖


注册时间: 2003-06-20
文章: 1461

文章发表于: Mon 2004-05-31 22:12:04    发表主题: 引用并回复

代码:
/usr/ports/www/apache2/work/httpd-2.0.49/server/mpm/prefork

_________________
问:为什么不用ports?
答:装13。
我很欣赏。
返回页首
阅览会员资料 发送站内信件
伊凡
半仙


注册时间: 2002-08-04
文章: 37

文章发表于: Tue 2004-08-17 07:48:33    发表主题: 引用并回复

不错。 Very Happy
_________________
学习学习再学习!
返回页首
阅览会员资料 发送站内信件 浏览发表者的主页
从以前的文章开始显示:   
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标