<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[APACHE安装笔记]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 24 Jan 2007 09:29:46 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	从简化安装==&gt;性能调优==&gt;方便维护的角度，讨论WEB服务的规划==&gt;HTTPD安装/应用模块配置==&gt;升级/维护等过程。<br/>让APACHE的升级和PHP RESIN等应用模块的升级完全互不影响。<br/><br/>1. WEB应用容量规划：根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式；<br/>2. APACHE安装过程：apache的通用的简化安装选项，方便以后的应用的模块化配置；<br/>修改 HARD_SERVER_LIMIT：<br/>vi /path/to/apache_src/src/include/httpd.h<br/>#define HARD_SERVER_LIMIT 2560 &lt;===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”<br/>apache编译：<br/>/path/to/apache_src/configure --prefix=/another_driver/apache --enable-shared=max --enable-module=most<br/>3. 可选应用模块/工具的安装：php resin mod_gzip mod_expire及各个模块之间的配合；<br/>PHP安装：<br/>/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --enable-track-vars --with-other-modules-you-need<br/>mod_resin安装：<br/>/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs <br/>Mod_gzip安装：<br/>/path/to/apache/bin/apxs -i -a -c mod_gzip.c<br/>工具：cronolog安装：http://www.cronolog.org<br/>4. 升级/维护：看看通用和模块化的安装过程如何简化了日常的升级/维护工作；<br/>按照以上的方法：系统管理员和应用管理员的职责可以清楚的分开，互相独立。<br/>系统安装：系统管理员的职责就是安装系统=&gt;安装好一台DSO模式的APACHE，然后COLON，<br/>应用安装：由应用管理员负责具体应用所需要的模块并设置HTTPD。<br/>系统升级：系统管理员：升级系统/升级APACHE<br/>应用升级：系统管理员：升级应用模块<br/><br/>具体的说明：<br/><br/>WEB应用的容量规划<br/><br/>APACHE主要是一个内存消耗型的服务应用，我个人总结的经验公式：<br/>apache_max_process_with_good_perfermance &lt; (total_hardware_memory / apache_memory_per_process ) * 2<br/>apache_max_process = apache_max_process_with_good_perfermance * 1.5<br/><br/>为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢？原因是在低负载下系统可以使用更多的内存用于文件系统的缓存，从而进一步提高单个请求的响应速度。在高负载下，系统的单个请求响应速度会慢不少，而超过apache_max_process，系统会因为开始使用硬盘做虚拟内存交换空间而导致系统崩溃。此外，同样的服务：2G内存的机器的apache_max_process一般只设置到1G内存的1.7倍，因为APACHE本身会因为管理更多的进程而产生性能下降。<br/><br/>例子1：<br/>一个apache + mod_php的服务器：一个apache进程一般需要4M内存<br/>因此在一个1G内存的机器上：apache_max_process_with_good_perfermance &lt; (1g / 4m) * 2 = 500<br/>apache_max_process ＝ 500 * 1.5 = 750<br/>所以规划你的应用让服务尽量跑在500个APACHE以下，并设置APACHE的软上限在800个。<br/><br/>例子2：<br/>一个apache + mod_resin的服务器： 一个apache进程一般需要2M内存<br/>在一个2G内存的机器上： apache_max_process_with_good_perfermance &lt; (2g / 2m ) * 2 = 2000<br/>因此：apache_max_process ＝ 2000 * 1.5 = 3000<br/><br/>以上估算都是按小文件服务估算的（一个请求一般大小在20k以下）。对于文件下载类型站点，可能还会受其他因素：比如带宽等的影响。<br/><br/>APACHE安装过程<br/><br/>服务器个数的硬上限HARD_SERVER_LIMIT的修改：<br/>在FREEBSD和LINUX等UNIX操作系统下APACHE缺省的最大进程数是256个，需要修改apache_1.3.xx/src/include/httpd.h<br/>#ifndef HARD_SERVER_LIMIT<br/>#ifdef WIN32<br/>#define HARD_SERVER_LIMIT 1024<br/>#elif defined(NETWARE)<br/>#define HARD_SERVER_LIMIT 2048<br/>#else<br/>#define HARD_SERVER_LIMIT 2560 &lt;===将原来的HARD_SERVER_LIMIT 256 后面加个“0”<br/>#endif<br/>#endif<br/><br/>解释：<br/>APACHE缺省的最大用户数是256个：这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置，但随着内存成本的急剧下降，现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了，而且APACHE的软上限max_client是受限于HARD_SERVER_LIMIT的，因此如果WEB服务器内存大于256M，都应该调高APACHE的HARD_SERVER_LIMIT。根据个人的经验：2560已经可以满足大部分小于2G内存的服务器的容量规划了（APACHE的软上限的规划请看后面）。<br/><br/>APACHE的编译：通用的编译选项能使安装过程标准化<br/>./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-module=most<br/><br/>解释：<br/>--prefix=/another_driver/apache/： 一个系统使用寿命最低的一般就是硬盘，因此：将服务数据和系统完全分开，不仅能提高了数据的访问速度，更重要的，大大方便系统升级，备份和恢复。<br/><br/>--shared-module=max：使用动态加载方式会带来5%的性能下降，但和带来的好处相比更本不算什么：比如模块升级方便，系统升级风险降低，安装过程标准化<br/><br/>--enable-module=most：用most可以将一些不常用的module编译进来，比如后面讲到的mod_expire是就不在apache的缺省常用模块中<br/><br/>如果不想build so, 也可以这样:<br/>./configure <br/>&quot;--with-layout=Apache&quot; <br/>&quot;--prefix=/path/to/apache&quot; <br/>&quot;--disable-module=access&quot; <br/>&quot;--disable-module=actions&quot; <br/>&quot;--disable-module=autoindex&quot; <br/>&quot;--disable-module=env&quot; <br/>&quot;--disable-module=imap&quot; <br/>&quot;--disable-module=negotiation&quot; <br/>&quot;--disable-module=setenvif&quot; <br/>&quot;--disable-module=status&quot; <br/>&quot;--disable-module=userdir&quot; <br/>&quot;--disable-module=cgi&quot; <br/>&quot;--disable-module=include&quot; <br/>&quot;--disable-module=auth&quot; <br/>&quot;--disable-module=asis&quot;<br/><br/>但结果会发现，这样编译对服务性能只能有微小的提高（5%左右），但却失去了以后系统升级和模块升级的灵活性，无论是模块还是APACHE本身升级都必须把所有SOURCE加在一起重新编译。<br/><br/>apache的缺省配置文件一般比较大：我们可以使用去掉注释的方法精简一下：然后再进入具体的培植过程能让你更快的定制出你所需要的。<br/>grep -v &quot;#&quot; httpd.conf.default &gt;httpd.conf<br/><br/>需要修改的通用项目有以下几个：<br/><br/>#服务端口，缺省是8080，建议将整个APACHE配置调整好后再将服务端口改到正式服务的端口<br/>Port 8080 =&gt; 80<br/><br/>#服务器名：缺省没有<br/>ServerName name.example.com<br/><br/>#最大服务进程数：根据服务容量预测设置<br/>MaxClients 256 =&gt; 800<br/><br/>#缺省启动服务后的服务进程数：等服务比较平稳后，按平均负载下的httpd个数设置就可以<br/>StartServers 5 =&gt; 200<br/><br/>不要修改：<br/>以前有建议说修改：<br/>MinSpareServers 5 =&gt; 100<br/>MaxSpareServers 10 =&gt; 200<br/><br/>但从我的经验看来：缺省值已经是非常优化的了，而且让APACHE自己调整进程个数还是比较好的。<br/><br/>特别修改：<br/>在solaris或一些比较容易出现内存泄露的应用上：<br/>MaxRequestsPerChild 0 =&gt;3000<br/><br/>应用模块和工具的安装配置：<br/><br/>由于使用模块动态加载的模式，所以可以方便的通过简单的配置调整来把APACHE定制成你需要的：最好把不常用模块全部清除（无论处于安全还是效率）。<br/>比如：对于静态页面服务器：就什么模块都不加载，对于PHP应用就加上PHP模块，对于JAVA应用就把RESIN模块加载上。而且各种模块的插拔非常简单。<br/><br/>一般说来，可以不需要的模块包括：<br/>#LoadModule env_module libexec/mod_env.so<br/>#LoadModule negotiation_module libexec/mod_negotiation.so<br/>#LoadModule status_module libexec/mod_status.so<br/>#server side include已经过时了<br/>#LoadModule includes_module libexec/mod_include.so<br/>#不需要将没有缺省index文件的目录下所有文件列出<br/>#LoadModule autoindex_module libexec/mod_autoindex.so<br/>#尽量不使用CGI：一直是APACHE安全问题最多的地方<br/>#LoadModule cgi_module libexec/mod_cgi.so<br/>#LoadModule asis_module libexec/mod_asis.so<br/>#LoadModule imap_module libexec/mod_imap.so<br/>#LoadModule action_module libexec/mod_actions.so<br/>#不使用安全校验可以大大提高访问速度<br/>#LoadModule access_module libexec/mod_access.so<br/>#LoadModule auth_module libexec/mod_auth.so<br/>#LoadModule setenvif_module libexec/mod_setenvif.so<br/><br/>最好保留的有：<br/>#用于定制log格式<br/>LoadModule config_log_module libexec/mod_log_config.so<br/>#用于增加文件应用的关联<br/>LoadModule mime_module libexec/mod_mime.so<br/>#用于缺省index文件：index.php等<br/>LoadModule dir_module libexec/mod_dir.so<br/><br/>可用可不用的有：<br/>#比如：需要在~/username/下调试php可以将<br/>LoadModule userdir_module libexec/mod_userdir.so<br/>#比如：需要将以前的URL进行转向或者需要使用CGI script-alias<br/>LoadModule alias_module libexec/mod_alias.so<br/><br/>常用的模块：<br/>最常用的可能就是php和JAVA WEB应用的wrapper，此外，从性能上讲：mod_gzip可以减少40%左右的流量，从而减少机器用于传输的负载，而mod_expires可以减少10%左右的重复请求，让重复的用户请求CACHE在本地，根本不向服务器发出请求。<br/><br/>建议将所有MODULE的配置都放到<br/><br/>PHP的安装：<br/>/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need<br/>需要修改的配置：<br/>AddType application/x-httpd-php .php .php3 .any_file_in_php<br/><br/>resin的安装设置：<br/>/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs <br/><br/>一般将具体的resin设置放在另外一个文件中：<br/>&lt;IfModule mod_caucho.c&gt;<br/>CauchoConfigFile /path/to/apache/conf/resin.conf<br/>&lt;/IfModule&gt;<br/><br/>mod_expires的安装配置：<br/>&lt;IfModule mod_expires.c&gt; <br/>ExpiresActive on<br/>#所有的.gif文件1个月以后过期<br/>ExpiresByType image/gif &quot;access plus 1 month&quot;<br/>#所有的文件缺省1天以后过期<br/>ExpiresDefault &quot;now plus 1 day&quot;<br/>&lt;/IfModule&gt;<br/><br/>mod_gzip的安装：<br/>/path/to/apache/bin/apxs -i -a -c mod_gzip.c<br/><br/>mod_gzip和PHP在一起的配置<br/>&lt;IfModule mod_gzip.c&gt;<br/>mod_gzip_on Yes<br/>mod_gzip_minimum_file_size 1000<br/>mod_gzip_maximum_file_size 300000 <br/>mod_gzip_item_include file .htm$<br/>mod_gzip_item_include file .html$<br/>mod_gzip_item_include file .php$<br/>mod_gzip_item_include file .php3$<br/>mod_gzip_item_include mime text/.*<br/>mod_gzip_item_include mime httpd/unix-directory <br/>#不要让mod_gzip和php的session使用同一个临时目录：php_session需要通过php.ini设置session.save_path = /tmp/php_sess<br/>mod_gzip_temp_dir /tmp/mod_gzip<br/>mod_gzip_dechunk Yes<br/>mod_gzip_keep_workfiles No<br/>&lt;/IfModule&gt;<br/>mod_gzip和mod_php的配合：不要让mod_gzip和mod_php使用同一个临时目录；<br/><br/>mod_gzip和RESIN配合：要让mod_gzip在mod_caucho后LOAD，否则mod_gzip不起作用<br/>...othr modules<br/>AddModule mod_so.c<br/>AddModule mod_caucho.c<br/>#notice: mod_gzip must load after mod_caucho<br/>AddModule mod_gzip.c<br/>AddModule mod_expires.c<br/>...<br/><br/>&lt;IFModule mod_gzip.c&gt;<br/>mod_gzip_on Yes<br/>mod_gzip_dechunk yes<br/>mod_gzip_keep_workfiles No<br/>mod_gzip_minimum_file_size 3000<br/>mod_gzip_maximum_file_size 300000 <br/>mod_gzip_item_include file .html$<br/>mod_gzip_item_include mime text/.*<br/>mod_gzip_item_include mime httpd/unix-directory<br/>mod_gzip_item_include handler &#039;caucho-request&#039;<br/>&lt;/IFModule&gt;<br/><br/>日志轮循工具cronolog的安装和设置：cronolog可以非常整齐的将日志按天轮循存储<br/>缺省编译安装到/usr/local/bin/下，只需要将配置改成：<br/><br/>CustomLog &quot;&#124;/usr/local/sbin/cronolog /path/to/apache/logs/%w/access_log&quot; combined<br/><br/>日志将按天截断并存放在以weekday为目录名的目录下：比如：log/1是周一，log/5是周五, log/0是周日<br/><br/>升级维护：<br/><br/>由于使用标准化的DSO模式安装APACHE，APACHE的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活，建议将所有独立模块的配置都放在<br/>&lt;IfModule mod_name&gt;<br/>CONFIGURATIONS..<br/>&lt;/IfModule&gt;<br/>里，这样配置非常容易通过屏蔽某个模块来进行功能调整：比如：<br/>#AddModule mod_gzip.c<br/>就屏蔽了mod_gzip，其他模块不首任何影响。<br/><br/>安装和维护过程：<br/><br/>* 系统安装：系统管理员的职责就是安装系统和一个按照DSO模式安装的APACHE，然后COLON。<br/>* 应用安装：由应用管理员负责具体应用所需要的模块并设置HTTPD。<br/>* 系统升级：系统管理员：升级系统/升级APACHE<br/>* 应用升级：应用管理员：升级应用模块：PHP CAUCHO等<br/>* 系统备份/恢复：如果APACHE不在缺省的系统盘上，只需要将APACHE目录备份就可以了，遇到系统分区的硬件问题直接使用预先准备好的系统COLON，直接将APACHE所在物理盘恢复就行了。<br/><br/>系统管理员：APACHE的最简化安装 OS + APACHE(httpd core only)<br/>应用管理员：应用模块定制 　 +so<br/>+php<br/>+so<br/>+caucho<br/>+ssl<br/>应用： 纯静态页面服务:<br/>image.example.com<br/>www.example.com bbs.example.com mall.example.com<br/><br/>例子：APACHE和PHP模块的独立升级。<br/><br/>如果APACHE是按照以下方式安装：<br/>./configure --prefix=/home/apache --enable-shared=max --enable-module=most <br/>PHP是按照以下方式安装：<br/>./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql<br/><br/>以后单独升级APACHE的时候，仍然是：<br/>./configure --prefix=/home/apache --enable-shared=max --enable-module=most <br/>make<br/>su<br/>#/home/apache/bin/apachectl stop<br/>#make install<br/><br/>单独升级php时，仍然是：<br/>./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql<br/>make<br/>su<br/>#/home/apache/bin/apachectl stop<br/>#make install<br/><br/>参考文档：<br/><br/>Apache<br/>http://httpd.apache.org<br/><br/>php<br/>http://www.php.net<br/><br/>Resin<br/>http://www.caucho.com<br/><br/>mod_gzip<br/>http://www.remotecommunications.com/apache/mod_gzip/<br/><br/>Cronolog<br/>http://www.cronolog.org<br/><br/>mod_expires<br/>http://httpd.apache.org/docs/mod/mod_expires.html<br/>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] APACHE安装笔记]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>