﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-Programming Life-随笔分类-Apache</title><link>http://www.phpweblog.net/killjin/category/308.html</link><description>相信不能相信的，完成不能完成的。矛盾，就象征进步。</description><language>zh-cn</language><lastBuildDate>Tue, 04 Mar 2008 00:13:23 GMT</lastBuildDate><pubDate>Tue, 04 Mar 2008 00:13:23 GMT</pubDate><ttl>60</ttl><item><title>SSI</title><link>http://www.phpweblog.net/killjin/archive/2008/03/04/2882.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Mon, 03 Mar 2008 21:11:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/03/04/2882.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2882.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/03/04/2882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2882.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2882.html</trackback:ping><description><![CDATA[直译服务器端包含(Server&nbsp;Side&nbsp;Includes)，由字面上看由WEB在服务器提供的一种功能，并且是在服务器端进行的。一般说来，要完成较复杂的任务（如：聊天室／留言本等），必须设计专门的CGI或ASP程序；但是如果只是想给网页加上简单的功能(如：显示一篇文档，web服务器环境变量，关于该文档的更新日期／大小等)，则只要SSI就可以完成了。SSI则是直接由服务器解释执行的，须要WEB服务器软件支持SSI。<br>而且，由于直接在服务器端执行SSI，产生相应HTML代码；所以对客户端没有限制，不会产生因为不同浏览器而产生不同的观看效果。<br>SSI有什么用?<br>目前，主要有以下几种用用途：<br>1、&nbsp;显示服务器端环境变量&lt;#echo&gt;<br>2、&nbsp;将文本内容直接插入到文档中&lt;#include&gt;<br>3、&nbsp;显示WEB文档相关信息&lt;#flastmod&nbsp;#fsize&gt;&nbsp;(如文件制作日期/大小等)<br>4、&nbsp;直接执行服务器上的各种程序&lt;#exec&gt;(如CGI或其他可执行程序)<br>5、&nbsp;设置SSI信息显示格式&lt;#config&gt;(如文件制作日期/大小显示方式)<br>高级SSI&lt;XSSI&gt;可设置变量使用if条件语句。<br>使用SSI很容易吧？<br>SSI是为WEB服务器提供的一套命令，这些命令只要直接嵌入到HTML文档的注释内容之中即可。如：<br>&lt;!--#include&nbsp;file="info.htm"--&gt;<br>就是一条SSI指令，其作用是将"info.htm"的内容拷贝到当前的页面中，当访问者来浏览时，会看到其它HTML文档一样显示info.htm其中的内容。<br>其它的SSI指令使用形式基本同刚才的举例差不多，可见SSI使用只是插入一点代码而已，使用形式非常简单。<br>当然，如果WEB服务器不支持SSI，它就会只不过将它当作注释信息，直接跳过其中的内容；浏览器也会忽略这些信息。<br>如何在我的WEB服务器上配置SSI功能？<br>在一些WEB服务器上（如IIS&nbsp;4.0/SAMBAR&nbsp;4.2），包含&nbsp;#include&nbsp;指令的文件必须使用已被映射到&nbsp;SSI&nbsp;解释程序的扩展名；否则，Web&nbsp;服务器将不会处理该SSI指令；默认情况下，扩展名&nbsp;.stm、.shtm&nbsp;和&nbsp;.shtml&nbsp;被映射到解释程序（Ssinc.dll）。<br>Apache则是根据你的设置情况而定，修改srm.conf如：<br>AddType&nbsp;text/x-server-parsed-html&nbsp;.shtml<br>将只对.shtml扩展名的文件解析SSI指令<br>AddType&nbsp;text/x-server-parsed-html&nbsp;.html<br>将对所有HTML文档解析SSI指令<br>Netscape&nbsp;WEB服务器直接使用Administration&nbsp;Server(管理服务器)可打开SSI功能。<br>Website使用Server&nbsp;Admin程序中的Mapping标签，扩展名添加内容类型为：wwwserver/html-ssi<br>Cern服务器不支持SSI，可用SSI诈骗法，到<br>[url]http://sw.cse.bris.ac.uk/WebTools/fakessi.html[/url]<br>上下载一个PERL脚本，即可使你的CERN服务器使用一些SSI指令。（不支持exec指令。）<br>二、SSI指令使用详解<br>1.#echo&nbsp;示范<br>作用：<br>将环境变量插入到页面中。<br>语法：<br>&lt;!--#echo&nbsp;var=&#8221;变量名称&#8221;--&gt;<br>示例：<br>本文档名称：&lt;!--#echo&nbsp;var=&#8221;DOCUMENT_NAME&#8221;--&gt;<br>现在时间：&lt;!--#echo&nbsp;var=&#8221;DATE_LOCAL&#8221;--&gt;<br>你的IP地址是：&lt;!--#echo&nbsp;var=&#8221;REMOTE_ADDR&#8221;--&gt;<br>可在SSI中使用的变量：&nbsp;1．只有SSI中能使用的变量。2．标准CGI变量3．某些服务器支持的变量<br>①下面是在标准SSI支持的变量：<br>&gt;&gt;&nbsp;变量名称<br>作用<br>示例<br>1<br>DOCUMENT_NAME<br>当前文档名<br>echo.html<br>2<br>DOCUMENT_URL<br>或DOCUMENT_URI<br>当前文档相对URL<br>/ssi/echo.html<br>3<br>QUERY_STRING_UNESCAPED<br>或QUERY_STRING<br>所发送的查询字符串<br>sample<br>4<br>DATE_LOCAL<br>服务器中当前日期<br>Sun,&nbsp;23&nbsp;May&nbsp;1999&nbsp;21:54:30<br>5<br>DATE_GMT<br>以格林威冶时间设置的服务器时间<br>Sun,&nbsp;23&nbsp;May&nbsp;1999&nbsp;13:54:30<br>6<br>LAST_MODIFIED<br>当前文档最后修改时间<br>23-May-1999&nbsp;PST<br>&gt;&gt;<br>②标准的CGI变量<br>WEB上关于CGI环境变量测试的示例：<br>LINUX下Apache：http://hoyi.zb169.net/cgi-bin/hiecho.cgi?sample<br>Freebsd下Apache:&nbsp;[url]http://hoyi.onlineexpress.net/cgi-bin/hiecho.cgi?sample[/url]<br>&gt;&gt;&nbsp;CGI环境变量名称<br>作用<br>示例<br>1<br>AUTH_TYPE<br>用户所使用的身份验证类型<br>&gt;&gt;&nbsp;<br>2<br>CONTENT_LENGTH<br>服务器输出文本长度<br>0<br>3<br>HTTP_ACCEPT<br>客户机可接受的MIME类型<br>application/vnd.ms-excel,&nbsp;application/msword,&nbsp;*/*<br>4<br>HTTP_USER_AGENT<br>客户机浏览器配置状况<br>Mozilla/4.0&nbsp;(compatible;&nbsp;MSIE&nbsp;4.01;&nbsp;Windows&nbsp;98)<br>5<br>GATEWARY_INTERFACE<br>服务器所使用的&nbsp;CGI&nbsp;规范的修正版<br>CGI/1.1<br>6<br>PATH_INFO<br>客户端给出附加路径信息<br>&gt;&gt;&nbsp;<br>7<br>PATH_TRANSLATED<br>PATH_INFO&nbsp;的值，但带有扩展为某个目录规范的虚拟路径<br>/v/spool/webadm/html<br>8<br>QUERY_STRING<br>在引用该脚本的&nbsp;URL&nbsp;中跟在问号&nbsp;(?)&nbsp;后面的信息<br>Sample<br>9<br>REMOTE_ADDR<br>客户机IP地址<br>202.103.27.103<br>10<br>REMOTE_HOST<br>客户机名称<br>&gt;&gt;&nbsp;<br>11<br>REQUEST_METHOD<br>HTTP请求方法<br>GET<br>12<br>SCRIPT_NAME<br>当前脚本名称<br>/cgi-main/cgiwrap/hoyi/hiecho.cgi<br>13<br>SERVER_NAME<br>服务器名称或IP地址<br>hoyi.zb169.net<br>14<br>SERVER_PORT<br>服务器接请求的TCP/IP端口<br>80<br>15<br>SERVER_PROTOCOL<br>与请求有关的信息检索协议的名称与版本，通常为&nbsp;HTTP/1.0<br>HTTP/1.1<br>16<br>SERVER_SOFTWARE<br>响应请求的&nbsp;Web&nbsp;服务器软件的名称和版本<br>Apache/1.3.6&nbsp;(Unix)<br>&gt;&gt;2、#include&nbsp;示范<br>作用：<br>将文本文件的内容直接插入到文档页面中。<br>语法：<br>&lt;!--#include&nbsp;file=&#8221;文件名称&#8221;--&gt;<br>&lt;!--#include&nbsp;virtual=&#8221;文件名称&#8221;--&gt;<br>file&nbsp;文件且桓鱿喽月肪叮寐肪断喽杂谑褂?nbsp;#include&nbsp;指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中，但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档，则为file=&#8221;nav_head.htm&#8221;。<br>virtual&nbsp;文件名是&nbsp;Web&nbsp;站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件；则为file=&#8221;/hoyi/nav_head.htm&#8221;<br>参数：<br>file&nbsp;指定包含文件相对于本文档的位置<br>virtual&nbsp;指定相对于服务器文档根目录的位置<br>注意：<br>1、文件名称必须带有扩展名。<br>2、被包含的文件可以具有任何文件扩展名，我觉得直接使用htm扩展名最方便，微软公司推荐使用&nbsp;.inc&nbsp;扩展名（这就看你的爱好了）。<br>示例：<br>&lt;!--#include&nbsp;file=&#8221;nav_head.htm&#8221;--&gt;将头文件插入到当前页面<br>&lt;!--#include&nbsp;file=&#8221;nav_foot.htm&#8221;--&gt;将尾文件插入到当前页面<br>3.&nbsp;#flastmod&nbsp;和#fsize&nbsp;示范<br>作用：<br>#flastmod&nbsp;文件最近更新日期<br>#fsize&nbsp;文件的长度<br>语法：<br>&lt;!--#flastmod&nbsp;file=&#8221;文件名称&#8221;--&gt;<br>&lt;!--#fsize&nbsp;file=&#8221;文件名称&#8221;--&gt;<br>参数：<br>file&nbsp;指定包含文件相对于本文档的位置&nbsp;如&nbsp;info.txt&nbsp;表示当前目录下的的info.txt文档<br>virtual&nbsp;指定相对于服务器文档根目录的位置&nbsp;如&nbsp;/hoyi/info.txt&nbsp;表示<br>注意：<br>文件名称必须带有扩展名。<br>&gt;&gt;<br>&gt;&gt;<br>示例：<br>&lt;!--#flastmod&nbsp;file=&#8221;news.htm&#8221;--&gt;<br>将当前目录下news.htm文件的最近更新日期插插入到当前页面<br>&lt;!--#fsize&nbsp;file=&#8221;news.htm&#8221;--&gt;<br>将当前目录下news.htm的文件大小入到当前页面<br>4.#exec&nbsp;示范<br>作用：<br>将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入，这取决于使用的参数是cmd还是cgi。<br>语法：<br>语法：<br>&lt;!--#exec&nbsp;cmd=&#8221;文件名称&#8221;--&gt;<br>&lt;!--#exec&nbsp;cgi=&#8221;文件名称&#8221;--&gt;<br>参数：<br>cmd&nbsp;常规应用程序<br>cgi&nbsp;CGI脚本程序<br>示例：<br>&lt;!--#exec&nbsp;cmd=&#8221;cat&nbsp;/etc/passwd&#8221;--&gt;将会显示密码文件<br>&lt;!--#exec&nbsp;cmd=&#8221;dir&nbsp;/b&#8221;--&gt;将会显示当前目录下文件列表<br>&gt;&gt;<br>&lt;!--#exec&nbsp;cgi=&#8221;/cgi-bin/gb.cgi&#8221;--&gt;将会执行CGI程序gb.cgi。<br>&lt;!--#exec&nbsp;cgi=&#8221;/cgi-bin/access_log.cgi&#8221;--&gt;将会执行CGI程序access_log.cgi。<br>注意：<br>从上面的示例可以看出，这个指令相当方便，但是也存在安全问题。<br>禁止方法：<br>．Apache，将access.conf中的&#8221;Options&nbsp;Includes&nbsp;ExecCGI&#8221;这行代码删除；<br>．在IIS中，要禁用&nbsp;#exec&nbsp;命令，可修改&nbsp;SSIExecDisable&nbsp;元数据库；<br>5.#config<br>作用：<br>指定返回给客户端浏览器的错误信息、日期和文件大小的格式。<br>
<h4>[转载]什么是SSI</h4>
<br>语法：<br>&lt;!--#config&nbsp;errmsg=&#8221;自定义错误信息&#8221;--&gt;<br>&lt;!--#config&nbsp;sizefmt=&#8221;显示单位&#8221;--&gt;<br>&lt;!--#config&nbsp;timefmt=&#8221;显示格式&#8221;--&gt;<br>参数：<br>errmsg&nbsp;自定义SSI执行错误信息，可以为任何你喜欢的方式。<br>sizefmt&nbsp;文件大小显示方式，默认为字节方式(&#8220;bytes&#8221;)可以改为千字节方式(&#8220;abbrev&#8221;)<br>timefmt&nbsp;时间显示方式，最灵活的配置属性。<br>代码<br>示例<br>作用<br>代码<br>示例<br>作用<br>%a<br>Mon<br>缩写的星期几<br>%m<br>05<br>月份数<br>%A<br>Monday<br>星期几<br>%M<br>55<br>分<br>%b<br>%h<br>Aug<br>缩写的月份名<br>%p<br>AM<br>上、下午(AM或PM)<br>%r<br>10:20:20&nbsp;AM<br>12小制时间<br>%B<br>Auguest<br>月份名<br>%s<br>40<br>秒<br>%d<br>01<br>当月第几天<br>%T<br>20:20:30<br>24小制时间<br>%D<br>05/28/99<br>数字日期<br>%U<br>%W<br>21<br>一年中的星期<br>%e<br>1<br>当月第几天，前面不放0<br>%w<br>2<br>从星期天至今天数<br>%H<br>20<br>小时(24小时制)<br>%y<br>99<br>2位数格式的年号<br>%I<br>08<br>小时(12小时制)<br>%Y<br>1999<br>4位数表示的年号<br>%j<br>320<br>一年中的天数<br>%z<br>PDT<br>时区位置<br>&gt;&gt;<br>示例：<br>显示一个不存在文件的大小<br>&lt;!--#config&nbsp;errmsg=&#8221;服务器执行错误，请联系管理员&nbsp;[email]yiho@126.com[/email]，谢谢?gt;&gt;?-&gt;<br>&lt;!--#fsize&nbsp;file=&#8221;不存在的文件.htm&#8221;--&gt;<br>以千字节方式显示文件大小<br>&lt;!--#config&nbsp;sizefmt=&#8221;abbrev&#8221;--&gt;<br>&lt;!--#fsizefile=&#8221;news.htm&#8221;--&gt;<br>以特定的时间格式显示时间<br>&lt;!--#config&nbsp;timefmt=&#8221;%Y年/%m月%d日&nbsp;星期%W&nbsp;北京时间%H:%M:%s，%Y年已过去了%j天&nbsp;今天是%Y年的第%U个星期&#8221;--&gt;<br>&lt;!--#echo&nbsp;var=&#8221;DATE_LOCAL&#8221;--&gt;<br>显示今天是星期几,几月,时区<br>&lt;!--#config&nbsp;timefmt=&#8221;今天%A,&nbsp;%B&nbsp;,服务器时区是&nbsp;%z，是&#8221;--&gt;<br>&lt;!--#echo&nbsp;var=&#8221;DATE_LOCAL&#8221;--&gt;<br>★&nbsp;163镜像&nbsp;<br>★&nbsp;回&nbsp;全易主页&nbsp;<br>★&nbsp;全易CGI软件&nbsp;<br>■&nbsp;加入邮件列表&nbsp;<br>■&nbsp;全易网上商店&nbsp;◆&nbsp;<br>◆&nbsp;虚拟域名系统&nbsp;<br>◆&nbsp;域名注册系统&nbsp;<br>◆&nbsp;在线定单处理&nbsp;<br>◆&nbsp;会员管理系统&nbsp;<br>◆&nbsp;邮件列表管家&nbsp;<br>◆&nbsp;全易数据库&nbsp;<br>◆&nbsp;免费提醒(插件)&nbsp;<br>◆&nbsp;免费贺卡(插件)&nbsp;<br>■&nbsp;产品支持&nbsp;<br>■&nbsp;订购产品<br>■&nbsp;意见反馈&nbsp;<br>■&nbsp;友情链结&nbsp;<br>◆&nbsp;网络安全&nbsp;<br>◆&nbsp;SSI全攻略&nbsp;<br>■&nbsp;最新免费主机&nbsp;<br>■&nbsp;联系我们&nbsp;<br>合作网站<br>◆&nbsp;消费导航站按此&gt;&gt;<br>很容易赢的&nbsp;Iwin<br>◆玩呗，按此&gt;&gt;<br>◆&nbsp;Iwin我得奖<br>◆&nbsp;加入有2美元&nbsp;<br>加入全易邮件列表&nbsp;<br>邮件:&nbsp;<br>姓名:&nbsp;<br>称呼:先生小姐&nbsp;<br>&gt;&gt;<br>6.XSSI<br>XSSI（Extended&nbsp;SSI）是一组高级SSI指令，内置于Apache&nbsp;1.2或更高版本的mod-include模块之中。<br>其中可利用的的指令有：<br>#printenv<br>#set<br>#if<br>#printenv<br>作用：<br>显示当前存在于WEB服务器环境中的所有环境变量。<br>语法：&lt;!--#printenv--&gt;<br>参数：无<br>示例：<br>&lt;!--#printenv--&gt;<br>#set<br>作用：可给变量赋值，以用于后面的if语句。<br>语法：&lt;!--#set&nbsp;var=&#8221;变量名&#8221;value=&#8221;变量值&#8221;--&gt;<br>参数：无<br>示例：<br>&lt;!--#set&nbsp;var=&#8221;color&#8221;value=&#8221;红色&#8221;--&gt;<br>#if<br>作用：<br>创建可以改变数据的页面，这些数据根据使用if语句时计算的要求予以显示。<br>语法：<br>&lt;!--#if&nbsp;expr=&#8221;$变量名=\&#8221;变量值A\&#8221;&#8221;--&gt;<br>显示内容<br>&lt;!--#elif&nbsp;expr=&#8221;$变量名=\&#8221;变量值B\&#8221;&#8221;--&gt;<br>显示内容<br>&lt;!--#else--&gt;<br>显示内容<br>&lt;!--#endif&#8221;--&gt;<br>参数：<br>关于XSSI的条件表达式<br>表达式<br>作用<br>(string)<br>如果string存在，就返回真<br>string1=string2<br>如果两个字符串相等，就返回真<br>string1!=string2<br>如果两个字符串不等，就返回真<br>string1&lt;string2<br>如果string1小于string2，就返回真<br>string1&lt;=string2<br>如果string1小于等于string2，就返回真<br>string1&gt;string2<br>如果string1大于string2，就返回真<br>string1&gt;=string2<br>如果string1大于等于string2，就返回真<br>!string<br>！为&#8221;非&#8221;操作符；若string存在，就返回真<br>(string1)&amp;&amp;(string2)<br>&amp;&amp;为&#8221;与&#8221;操作符；string1、string2都存在，就返回真<br>(string1)!!(string2)<br>!!&nbsp;为&#8221;或&#8221;操作符；string1、string2有一个存在，就返回真<br>示例：<br>&lt;!--#if&nbsp;expr=&#8221;$SERVER_NAME=\&#8221;hoyi.zb169.net\&#8221;&#8221;--&gt;<br>欢迎光临好易CGI工厂在淄博热线的分站[url]http://hoyi.zb169.net[/url]。<br>&lt;!--#elif&nbsp;expr=&#8221;$SERVER_NAME=\&#8221;linux.cqi.com.cn\&#8221;&#8221;&nbsp;--&gt;<br>欢迎光临好易CGI工厂在太阳城的分站[url]http://linux.cqi.com.cn/~hoyi[/url]。<br>&lt;!--#else--&gt;<br>欢迎光临好易CGI工厂！<br>&lt;!--#endif&#8221;--&gt;<br>注意：<br>用于前面指令中的反斜杠，是用来代换内部的引号，以便它们不会被解释为结束表达式。不可省略。 
<img src ="http://www.phpweblog.net/killjin/aggbug/2882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-03-04 05:11 <a href="http://www.phpweblog.net/killjin/archive/2008/03/04/2882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈Apache的优化</title><link>http://www.phpweblog.net/killjin/archive/2008/01/17/2698.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 17 Jan 2008 06:11:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/01/17/2698.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2698.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/01/17/2698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2698.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2698.html</trackback:ping><description><![CDATA[<p>今天说说Apache的优化。为什么要优化？因为服务器资源不够用。资源有很多方面，但根据木桶理论，只要有一种资源不够用，整个服务器的性能就会受到影响（所谓瓶颈）。</p>
<p><strong>服务器资源</strong></p>
<p>那么服务器的资源包括哪些？对于网站来说主要是<strong>CPU</strong>、<strong>TCP连接数</strong>这两者。 CPU表现在任务数上，在Linux下使用<strong>平均负载</strong>(loadavg)来衡量。可通过以下命令来查看--------------------------------------------</p>
<p>该文件显示了系统当前的平均负载和进程状况。</p>
<pre>0.20 0.18 0.12 1/80 11206</pre>
<p>前三列分别为前1分钟、5分钟、15分钟内的平均负载。第四列为正在执行的进程数和系统的总进程数。第五列为上次执行的进程id。<br>----------------------------------------</p>
<pre>cat /proc/loadavg</pre>
<p>对于单CPU的服务器，loadavg高于1，表明任务队列出现了等待，CPU忙不过来了。超过2以上就会明显感到性能降低了。</p>
<p>TCP连接数可通过以下命令查看：</p>
<pre>netstat -ant | grep :80 | wc -l </pre>
<p>如果要实时监控服务器资源，可参考<a href="http://www.opennms.org/" rel=nofollow>OpenNMS</a>项目。</p>
<p><span style="COLOR: blue">注1：内存不算，低廉的价格使得网站服务器很少有因为内存不够而down掉的。</span><br><span style="COLOR: blue">注2：CPU%是瞬时的CPU使用率，通常无法反映出整体负载。</span><br></p>
<!-- end Pukiwiki generated code--><span id=more-425></span><!-- begin Pukiwiki generated code-->
<p><strong>Apache配置命令</strong></p>
<p>Apache在资源方面的配置命令主要有以下几条。</p>
<div class=ie5>
<table class=style_table cellSpacing=1 border=0>
    <tbody>
        <tr>
            <td class=style_td>KeepAlive</td>
            <td class=style_td>是否允许持续连接</td>
        </tr>
        <tr>
            <td class=style_td>MaxKeepAliveRequests</td>
            <td class=style_td>允许的持续连接的最大数</td>
        </tr>
        <tr>
            <td class=style_td>KeepAliveTimeout</td>
            <td class=style_td>持续连接在没有请求多少秒后切断</td>
        </tr>
        <tr>
            <td class=style_td>StartServers</td>
            <td class=style_td>最初启动时启动多少个服务器进程</td>
        </tr>
        <tr>
            <td class=style_td>MinSpareServers</td>
            <td class=style_td>空闲服务器进程的最小数</td>
        </tr>
        <tr>
            <td class=style_td>MaxSpareServers</td>
            <td class=style_td>空闲服务器进程的最大数</td>
        </tr>
        <tr>
            <td class=style_td>MaxRequestsPerChild</td>
            <td class=style_td>每个子进程处理的最大请求数</td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>KeepAlive</strong></p>
<p>前三个KeepAlive相关的指令用来设置持续连接。通常都是每个HTTP请求对应一个TCP连接，但对于一个包含许多图片的网页来说，客户端会在瞬间发出多个HTTP请求，此时多次建立TCP连接会大大降低响应速度。此时通过持续连接，可以允许用户在一个TCP连接中发出多个HTTP请求，减少TCP连接建立次数，提高响应速度。</p>
<p>这种情况下，应当通过access_log统计出连续HTTP请求出现的次数、间隔时间、访问量，以确定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用；太大了，持续连接迟迟不断，浪费TCP连接数不说，更糟糕的是系统中的 httpd 进程数目会因此不断增加，使得系统负载升高，甚至会导致服务器失去响应。</p>
<p>但是在处理动态网页请求时，由于用户很少会瞬间请求多个动态网页（一般都是打开页面之后阅读好半天才点下一页），此时打开KeepAlive无异于浪费TCP连接数。</p>
<p>结论就是，放动态网页的就 KeepAlive Off 以提高吞吐量，放静态内容如图片、js代码等就 KeepAlive On 以减少TCP连接建立次数。</p>
<p>但一个Apache只能有一种 KeepAlive 设置，怎么办？很简单，弄两台服务器，一个专门放脚本，一个专门放图片。</p>
<p><strong>服务器进程数</strong></p>
<p>再说说下面的 StartServers、MinSpareServers、MaxSpareServers。 StartServers基本不用修改，因为Apache会自动调节子进程数。 MinSpareServers和MaxSpareServers是空闲子进程数目，何为空闲子进程？假设某一时刻系统中共有30个httpd进程，其中一个是父进程，20个在处理请求，那么空闲子进程数就是9个。</p>
<p>空闲进程少了，大量的突发请求会使服务器疲于进程创建，降低效率；而太多反而会增加系统进程数，增大系统负载。</p>
<p>实际上，默认值已足够处理一般的突发请求，所以除非是流量特别特别巨大的网站，否则不要修改这些设置。</p>
<p><span style="COLOR: blue">就算流量特别特别大，也是通过负载平衡系统来降低每台服务器的访问量，不会修改这几个值。</span></p>
<p><strong>MaxRequestsPerChild</strong></p>
<p>这个值设置子进程在处理多少个请求之后自动结束。这个选项是用来防止进程由于内存泄漏等使用内存过多。一般默认值即可。</p>
<p><strong>总结</strong></p>
<p>说来说去其实最重要的还是 KeepAlive 的设置，而性能调节也就是调整 KeepAlive、KeepAliveTimeout 值。</p>
<!-- end Pukiwiki generated code-->
<img src ="http://www.phpweblog.net/killjin/aggbug/2698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-01-17 14:11 <a href="http://www.phpweblog.net/killjin/archive/2008/01/17/2698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache连接数设置</title><link>http://www.phpweblog.net/killjin/archive/2008/01/17/2697.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 17 Jan 2008 06:07:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/01/17/2697.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2697.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/01/17/2697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2697.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2697.html</trackback:ping><description><![CDATA[　prefork几乎还是目前的唯一MPM,我在下面主要还是讨论它的工作原理和相关指令调整。查看缺省生成的httpd.conf配置文件，会发现里面包含如下的配置段： <br><br>&lt;IfModule prefork.c&gt;<br>StartServers 5<br>MinSpareServers 5<br>MaxSpareServers 10<br>MaxClients 150<br>MaxRequestsPerChild 0<br>&lt;/IfModule&gt;<br><br>　　prefork的工作原理是这样的：控制进程在最初建立StartServers个子进程后, 为了满足MinSpareServers设置的需要，创建一个进程，等待一秒钟，继续创建第二个，等待一秒钟，继而创建四个，如此按指数级增加创建的进程数，最多达到每秒32个，直到满足MinSpareServers设置的值为止，这也就是预派生(prefork)的由来。这种模式可以使得不必在请求到来时再产生新的进程，从而减小了系统开销以增加性能。<br><br>　　MaxSpareServers 设置了最大的空闲进程数，如果空闲进程数大于这个值，Apache会自动kill某些多余进程。这个值一般不要设的过大，但如果设的比MinSpareServers小，Apache会自动把它调整为MinSpareServers+1。如果站点负载较大的话，可考虑同时加大MinSpareServers和MaxSpareServers。<br><br>　　MaxRequestsPerChild设置的是每个子进程可以处理的请求数。每个子进程在处理了MaxRequestsPerChild个请求后将自动销毁。0意味着无限，即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求，但如果设成非零值也有两点重要的好处：<br><br>1． 可防止意外的内存卸漏；<br>2． 在服务器负载下降的时侯会自动减少子进程数。<br><br>　　因此，可根据服务器的负载来调整这个值，如果非零的话，笔者认为10000左右是比较合适的。事实上这个值对Apache的性能影响不是很大。<br><br>　　MaxClients 是这些指令中最为重要的一个，它设定的就是Apache可以同时处理的请求，这是对Apache性能影响最大的参数.在我个人看来，缺省的150是远远不够的，如果请求总数已达到这个值(可通过ps &#8211;ef|grep httpd|wc &#8211;l来确认)，那么下面的请求就要排队，直到某个已处理请求完毕。这就是为什么系统资源还剩下很多，而http访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值,虽然理论上这个值越大，可以处理的请求就越多，但Apache默认的限制是不能大于256。如果把这个值设为大于256那么Apache将无法起动。事实上，256对于负载稍重的站点也是很不够的。在Apache1.3中这是个硬限制，如果要加大这个值，必须在configure前手工修改源代码树下的src/include/httpd.h,查找256，会发现#define HARD_SERVER_LIMIT 256这行，把256改为你要增大的值如4000，然后重新编译Apache即可。我想这个方法稍有些经验的Apache系统管理员都知道，不过我相信在Apache2.0中知道如何加大这个值的人就不会太多了。<br><br>　　在Apache2.0中新加入了ServerLimit指令，使得无须重编译Apache就可以加大MaxClients。下面是笔者的prefork配置段。 <br><br>&lt;IfModule prefork.c&gt;<br>StartServers 10<br>MinSpareServers 10<br>MaxSpareServers 15<br>ServerLimit 2000<br>MaxClients 1500<br>MaxRequestsPerChild 10000<br>&lt;/IfModule&gt;<br><br>　　BTW: ServerLimit的最大值是20000，这对于大多数站点是足够了，但如果你一定要再加大的话，那么这个值位于源代码树下的server/mpm/prefork/prefork.c中。里面的<br><br>#define DEFAULT_SERVER_LIMIT 256<br>#define MAX_SERVER_LIMIT 20000<br><br>这两行就对应着MaxClients和ServerLimit的限制值。但我相信很少有人可以用到20000的并发连接数。<br>
<img src ="http://www.phpweblog.net/killjin/aggbug/2697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-01-17 14:07 <a href="http://www.phpweblog.net/killjin/archive/2008/01/17/2697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看Apache并发请求数及其TCP连接状态</title><link>http://www.phpweblog.net/killjin/archive/2008/01/17/2696.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 17 Jan 2008 06:06:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/01/17/2696.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2696.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/01/17/2696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2696.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2696.html</trackback:ping><description><![CDATA[这两天搭建了一组Apache服务器，每台服务器4G内存，采用的是prefork模式，一开始设置的连接数太少了，需要较长的时间去响应用户的请求，后来修改了一下Apache 2.0.59的配置文件httpd.conf：<br>
<div class=quote>
<div class=quote-title>引用</div>
<div class=quote-content># prefork MPM<br># StartServers: number of server processes to start<br># MinSpareServers: minimum number of server processes which are kept spare<br># MaxSpareServers: maximum number of server processes which are kept spare<br># MaxClients: maximum number of server processes allowed to start<br># MaxRequestsPerChild: maximum number of requests a server process serves<br><ifmodule prefork.c><br>StartServers &nbsp; &nbsp; &nbsp; &nbsp; 10<br>MinSpareServers &nbsp; &nbsp; &nbsp;10<br>MaxSpareServers &nbsp; &nbsp; &nbsp;15<br>ServerLimit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2000<br>MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2000<br>MaxRequestsPerChild &nbsp;10000<br></ifmodule></div>
</div>
<br>
<hr>
<br>　　查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：<br>　　Linux命令：<br>
<div class=quote>
<div class=quote-title>引用</div>
<div class=quote-content>ps -ef | grep httpd | wc -l</div>
</div>
<br>　　返回结果示例：<br>　　1388<br>　　表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整，我这组服务器中每台的峰值曾达到过2002。<br>
<hr>
<br>　　查看Apache的并发请求数及其TCP连接状态：<br>　　Linux命令：<br>
<div class=quote>
<div class=quote-title>引用</div>
<div class=quote-content>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</div>
</div>
<br>　　（这条语句是从
<script language=JavaScript>word1 = "新";word2 = "浪";word3 = "互动社";word4 = "区事";word5 = "业部";document.write(word1 + word2 + word3 + word4 + word5);</script>
新浪互动社区事业部技术总监王老大那儿获得的，非常不错）<br>　　返回结果示例：<br>　　LAST_ACK 5<br>　　SYN_RECV 30<br>　　ESTABLISHED 1597<br>　　FIN_WAIT1 51<br>　　FIN_WAIT2 504<br>　　TIME_WAIT 1057<br>　　其中的SYN_RECV表示正在等待处理的请求数；ESTABLISHED表示正常数据传输状态；TIME_WAIT表示处理完毕，等待超时结束的请求数。<br>
<hr>
<br>　　关于TCP状态的变迁，可以从下图形象地看出：<br>　　<a href="http://blog.s135.com/read.php/attachment/200707/tcps.gif" target=_blank><img class=insertimage title=点击在新窗口中浏览此图片 alt=点击在新窗口中浏览此图片 src="http://www.phpweblog.net/images/phpweblog_net/killjin/tcps.gif" border=0></a>　　<br>　　状态：描述<br>　　CLOSED：无连接是活动的或正在进行<br>　　LISTEN：服务器在等待进入呼叫<br>　　SYN_RECV：一个连接请求已经到达，等待确认<br>　　SYN_SENT：应用已经开始，打开一个连接<br>　　ESTABLISHED：正常数据传输状态<br>　　FIN_WAIT1：应用说它已经完成<br>　　FIN_WAIT2：另一边已同意释放<br>　　ITMED_WAIT：等待所有分组死掉<br>　　CLOSING：两边同时尝试关闭<br>　　TIME_WAIT：另一边已初始化一个释放<br>　　LAST_ACK：等待所有分组死掉<br>
<img src ="http://www.phpweblog.net/killjin/aggbug/2696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-01-17 14:06 <a href="http://www.phpweblog.net/killjin/archive/2008/01/17/2696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二级域名的完美实现</title><link>http://www.phpweblog.net/killjin/archive/2007/12/22/2587.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sat, 22 Dec 2007 14:23:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/12/22/2587.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2587.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/12/22/2587.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2587.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2587.html</trackback:ping><description><![CDATA[<p>首先，你的拥有一个有泛域名解析的顶级域名，例如： domain.com<br>其次，在 httpd.conf 中打开 mod_rewrite</p>
<p>之后，在 httpd.conf 的最后，添加以下内容：</p>
<blockquote>
<p>RewriteEngine on<br>RewriteMap lowercase int:tolower<br>RewriteMap vhost txt:/usr/local/etc/apache/vhost.map<br>RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br>RewriteCond ${vhost:%1} ^(/.*)$<br>RewriteRule ^/(.*)$ %1/$1</p>
</blockquote>
<p>其中的 /usr/local/etc/apache 是你的 apache 服务器配置文件所在路径，根据实际情况更改。<br>然后，在这个所在路径的目录下创建一个文件： <strong>vhost.map</strong><br>内容为：</p>
<blockquote>
<p>www.domain.com /usr/local/www/data-dist/domain<br>bbs.domain.com /usr/local/www/data-dist/bbs<br>anyname.domain.com /usr/local/www/data-dist/anyname</p>
</blockquote>
<p>以上部分都是：&#8221; 域名+空格+绝对路径&#8221; 的形式。</p>
<p>最后，在你的网站根目录 /usr/local/www/data-dist 下，创建对应目录：<br>domain , bbs , anyname 等等，理论上可以无限。</p>
<p>这样，通过浏览器，访问 www.domain.com 时，实际上访问的就是 /usr/local/www/data-dist/domain目录下的文件。同理，访问 bbs.domain.com 实际上访问的就是 /usr/local/www/data-dist/bbs 目录下的文件。而且，你可以<br>随时更改 vhost.map 来增加、删除、修改你的二级域名和所指向的实际路径，不用重启 apache。</p>
<img src ="http://www.phpweblog.net/killjin/aggbug/2587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-12-22 22:23 <a href="http://www.phpweblog.net/killjin/archive/2007/12/22/2587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解析无限个二级域名的方法</title><link>http://www.phpweblog.net/killjin/archive/2007/12/22/2586.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sat, 22 Dec 2007 12:28:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/12/22/2586.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2586.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/12/22/2586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2586.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2586.html</trackback:ping><description><![CDATA[<div class=postText>解析无限个二级域名的方法有三种：<br>无论使用哪种，都必须使用域名泛解析。将*.test.com（此处我们test.com作例子）解析到你指定的服务器上。<br>如：&nbsp;<br>*.test.com&nbsp;222.222.222.222<br><br>注：<br>作域名泛解析前，必须确认域名服务商对你提供域名泛解析服务。否则，后面的工作都是徒劳的。<br><br>方法一：使用Windows自带DNS解析。<br>步骤：<br>1，添加好test.com，如下图<br><img onmousewheel="return bbimg(this)" style="CURSOR: pointer" onclick=javascript:window.open(this.src); height=343 alt="" src="http://www.phpweblog.net/images/phpweblog_net/killjin/y1.jpg" width=347 onload="javascript:if(this.width>screen.width-500)this.style.width=screen.width-500;" border=0 src_cetemp="/images/phpweblog_net/killjin/y1.jpg"><br>2，在test下添加一个名称为&nbsp;*&nbsp;的域&nbsp;(右键，添加域)，添加完如下图<br><img onmousewheel="return bbimg(this)" style="CURSOR: pointer" onclick=javascript:window.open(this.src); height=342 alt="" src="http://www.phpweblog.net/images/phpweblog_net/killjin/y2.jpg" width=343 onload="javascript:if(this.width>screen.width-500)this.style.width=screen.width-500;" border=0 src_cetemp="/images/phpweblog_net/killjin/y2.jpg"><br>3，在*的域下，添加一个主机(右键，新建主机，主机名称为空，IP则填写为您要将域名泛解析的对应IP)，添加完如下图。<br><img onmousewheel="return bbimg(this)" style="CURSOR: pointer; ZOOM: 110%" onclick=javascript:window.open(this.src); height=338 alt="" src="http://www.phpweblog.net/images/phpweblog_net/killjin/y3.jpg" width=524 onload="javascript:if(this.width>screen.width-500)this.style.width=screen.width-500;" border=0 src_cetemp="/images/phpweblog_net/killjin/y3.jpg"><br>方法二：使用程序进行判断调整。<br>步骤：<br>1，iis服务的主机头留空，新建Default.asp文件，并把新建文件的执行优先级设定为最高（IIS设置属性中的文档，将Default.asp移到最上面）。<br>Default.asp文件代码：&nbsp;<br>　　　&nbsp;　　　　&lt;%<br>　　　　&nbsp;　　　　Dim&nbsp;iURL<br>　　　　&nbsp;　　　　iURL&nbsp;=&nbsp;Split(Request.ServerVariables("SERVER_NAME"),".")<br>　　　　&nbsp;　　　　If&nbsp;Lcase(iURL(0))="www"&nbsp;Then<br>　　　　&nbsp;　　　　'此处为网站首页地址，请自行选择<br>　　　　&nbsp;　　　　&nbsp;Response.Redirect("index.asp")<br>　　　　&nbsp;　　　　Else<br>　　　　&nbsp;　　　　'如二级域名所调转地址，请自行更改此处地址<br>　　　　&nbsp;　　　　&nbsp;Response.Write(&nbsp;"&lt;frameset&gt;&lt;frame&nbsp;src=""**.asp?"&amp;iURL(0)&amp;".index.html""&gt;&lt;/frameset&gt;")<br>　　　　&nbsp;　　　　End&nbsp;If<br>　　　　&nbsp;　　　　%&gt;<br><br>方法三：使用&nbsp;ISAPI_Rewrite&nbsp;URL处理引擎<br>先介绍一下ISAPI_Rewrite&nbsp;:<br><br>ISAPI_Rewrite是一个强大的基于正则表达式的URL处理引擎。它非常类似于Apache's&nbsp;mod_Rewrite，但它是专为IIS设计的。<br>ISAPI_Rewrite有两个版本：ISAPI_Rewrite&nbsp;Full与ISAPI_Rewrite&nbsp;Lite。<br>ISAPI_Rewrite&nbsp;Lite是免费版本，但不支持反向代理功能。<br>ISAPI_Rewrite&nbsp;Full只能下载到30天的试用版本。&nbsp;<br>解析二级域名就可以用ISAPI_Rewrite一个规则来实现。<br>如：<br>test.test.com&nbsp;映射成&nbsp;www.test.com/test/&nbsp;<br>规则如下：&nbsp;<br>RewriteCond&nbsp;Host:&nbsp;(?!/.|www|ww)(.*).test.com<br>RewriteRule&nbsp;(.*)&nbsp;http/://www.test.com/$1$2&nbsp;[I,R]&nbsp;<br><br>此三方法比较：<br>偶个人认为，方法一，解析速度会快点，但没有做过验证。只是感觉系统自带的东西会好些。<br>另，方法一和三，一台服务器可以做多域名的泛解析，而方法二，一台服务器只可以做一个域名的泛解析。<br></div>
<img src ="http://www.phpweblog.net/killjin/aggbug/2586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-12-22 20:28 <a href="http://www.phpweblog.net/killjin/archive/2007/12/22/2586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>awstats 日志分析软件 </title><link>http://www.phpweblog.net/killjin/archive/2007/12/19/2572.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 19 Dec 2007 08:29:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/12/19/2572.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2572.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/12/19/2572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2572.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2572.html</trackback:ping><description><![CDATA[<div class=storytext>
<p>一，所用软件及工具 <br>1,Apache服务器 官方网址：<a href="http://www.apache.org/">http://www.apache.org</a> <br>2,awstats 日志分析软件 官方网址：<a href="http://awstats.sourceforge.net/">http://awstats.sourceforge.net/</a> <br>3,cronolog 日志截取软件 官方网址：<a href="http://www.cronolog.org/">http://www.cronolog.org</a> </p>
<br>
<div>一，所用软件及工具 <br>1,Apache服务器 官方网址：<a href="http://www.apache.org/">http://www.apache.org</a> <br>2,awstats 日志分析软件 官方网址：<a href="http://awstats.sourceforge.net/">http://awstats.sourceforge.net/</a> <br>3,cronolog 日志截取软件 官方网址：<a href="http://www.cronolog.org/">http://www.cronolog.org</a> </div>
<div>二 安装<br>2，Apache <br>./configure &#8211;prefix=/usr/local/apache2/ --enable-so <br>make <br>make install <br>3, awstats <br>直接tar到 /usr/local/awstats</div>
<div>安装cronolog<br>./configure &#8211;prefix=/usr/local/cronolog <br>make <br>make install <br>cp /usr/local/cronolog/sbin/*.* /usr/local/sbin<br>三。配置<br>1.修改apache配置文件httpd.conf<br>图片不产生日志<br>#filter image files<br>SetEnvIf Request_URI .gif image-request<br>SetEnvIf Request_URI .GIF image-request<br>SetEnvIf Request_URI .jpg image-request<br>SetEnvIf Request_URI .JPG image-request<br>SetEnvIf Request_URI .png image-request<br>SetEnvIf Request_URI .PNG image-request<br>SetEnvIf Request_URI .swf image-request<br>SetEnvIf Request_URI .SWF image-request<br>SetEnvIf Request_URI .css image-request<br>SetEnvIf Request_URI .CSS image-request<br>SetEnvIf Request_URI .js image-request<br>SetEnvIf Request_URI .JS image-request<br>SetEnvIf Request_URI .ico image-request</div>
<div>虚拟主机日志设置 <br>代码: <br>&lt;VirtualHost 12.34.56.78:80&gt; <br>ServerAdmin <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#101;&#98;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#97;&#98;&#99;&#46;&#110;&#101;&#116;">webmaster@abc.net</a> <br>DocumentRoot /usr/local/apache2/htdocs/ <br>ServerName <a href="http://www.funbsd.net/">www.funbsd.net</a> <br>CustomLog "|/usr/local/sbin/sbin/cronolog /db/logs/access.%Y-%m-%d.log" combined env=!image-request<br>#用cronolog截取存放在/db/logs/下的按日期产生的apache日志文件 <br>&lt;/VirtualHost&gt; </div>
<div>或者直接修改apache日志<br>CustomLog "|/usr/local/sbin/cronolog /opt/apache2/logs/access.%Y-%m-%d.log" combined env=!image-request<br>ErrorLog "|/usr/local/sbin/cronolog /opt/apache2/logs/errors.%Y-%m-%d.log"</div>
<div>注: combined方式为详细的日志输入，普通用common</div>
<div>2.添加主机(可添加多个)<br>cd /usr/local/awstats/tools<br>perl awstats_configure.pl</div>
<div>Config file path ('none' to skip web server setup):<br>&gt; /usr/local/apache2/httpd.conf</div>
<div>Do you want me to build a new AWStats config/profile<br>file (required if first install) [y/N] ? y</div>
<div>Your web site, virtual server or profile name:<br>&gt; <a href="http://www.funbsd.net/">www.funbsd.net</a></div>
<div>Directory path to store config file(s) (Enter for default):<br>&gt; </div>
<div>3。修改awsats配置文件<br>LogFile="/usr/local/apache2/log/httpd/access.%YYYY-4-%MM-2-%DD-2.log"<br>DirData="/var/lib/awstats" <br>需要创建/var/lib/awstats目录<br>跳过本地主机<br>SkipHosts="localhost REGEX[^192.168.]"<br>通过浏览器更新<br>AllowToUpdateStatsFromBrowser=1</div>
<div><br>4。apache上新增的配置文件<br>安装过程会自动在httpd.conf文件中添加下面的配置信息:<br>Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"<br>Alias /awstatscss "/usr/local/awstats/wwwroot/css/"<br>Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"<br>ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"<br>&lt;Directory "/usr/local/awstats/wwwroot"&gt;<br>Options None<br>AllowOverride None<br>Order allow,deny<br>Allow from all<br>&lt;/Directory&gt; </div>
<div><br>5。重启apache</div>
<div><br>6.静态方法统计<br>手工自动统计单个网站<br>/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.funbsd.net <br>或者用crontab自动统计单个网站<br>*/15 * * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.funbsd.net<br>或者用crontab自动统计全部静态页面<br>*/15 * * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=www.funbsd.net -lang=cn -dir=/db/htdocs/www/awstat/ -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl <br>或者定时统计全部网站信息<br>0 * * * * /usr/local/awstats/tools/awstats_updateall.pl now -configdir=/etc/awstats</div>
<div>统计旧的日志<br>/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=www.funbsd.net <br>-update -Logfile=/var/log/httpd/www.funbsd.net.log</div>
<div></div>
<div>7。动态方法统计<br>再在httpd.conf 中添加 <br>代码: <br>LoadModule cgi_module modules/mod_cgi.so <br>增加用访问<a href="http://192.168.1.10/awstats/awstats.pl?config=www.funbsd.com">http://192.168.1.10/awstats/awstats.pl?config=www.funbsd.com</a>的认证</div>
<div><br>8。设定用户认证<br>再在httpd.conf 中添加代码: <br>LoadModule auth_module modules/mod_auth.so </div>
<div>在httpd.conf中添加 <br>代码: <br>&lt;Directory "/var/lib/awstats"&gt; <br>AuthType Basic <br>AuthName "Restricted Files" <br>AuthUserFile /usr/local/apache2/passwd/passwords <br>Require user loguser <br>&lt;/Directory&gt;</div>
<div>其中在 /usr/local/apache2/passwd/下产生passwords 的密码文件 <br>运行如下代码产生用户名为loguser用户及其密码 <br>代码: </div>
<div>/usr/local/apache2/bin/htpasswd -c /usr/local/apache2/passwd/passwords loguser </div>
<div>注意：先要在 /usr/local/apache2/下建passwd目录</div>
<div><br>9.给awstats添加地理显示插件GeoIP<br>从<a href="http://www.maxmind.com/app/perl?rId=awstats">http://www.maxmind.com/app/perl?rId=awstats</a>下载Geo-IP-PurePerl-1.17.tar.gz</div>
<div>解压文件<br>tar -zxvf Geo-IP-PurePerl-1.17.tar.gz<br>进入目录<br>cd Geo-IP-PurePerl-1.17<br>编译<br>perl MakeFile.PL<br>make <br>make test<br>make install</div>
<div>修改/etc/awstats/awstat.www.sxsino.com.conf文件<br>找到<br>LoadPlugin="geoip GEOIP_STANDARD"<br>修改成<br>LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"</div>
<div>再进行统计时，会显示IP是那个国家的</div>
<div>10。更新旧的日志文件<br>需要删除/var/lib/awstats/awstats122005.www.funbsd.com.txt 文件<br>然后用<br>/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=www.funbsd.net <br>-update -Logfile=/var/log/httpd/www.funbsd.net.log</div>
</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/2572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-12-19 16:29 <a href="http://www.phpweblog.net/killjin/archive/2007/12/19/2572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web服务器日志统计分析完全解决方案</title><link>http://www.phpweblog.net/killjin/archive/2007/12/19/2569.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 19 Dec 2007 07:26:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/12/19/2569.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2569.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/12/19/2569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2569.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2569.html</trackback:ping><description><![CDATA[对于所有的ICP来说，除了保证网站稳定正常运行以外，一个重要的问题就是网站访问量的统计和分析报表，这对于了解和监控网站的运行状态，对提高各个网站的服务能力和服务水平是必不可少的。通过对Web服务器的日志文件进行分析和统计，能够有效掌握系统运行情况以及网站内容的受访问情况、加强对整个网站及其内容的维护与管理。本文对Web服务器日志分析的原理和技术进行讨论。<br>　　<br>　　文章相关软件：<br>　　<br>　　webalizer <a class=10 href="http://www.mrunix.net/webalizer/" target=_blank><u><font color=#0000ff>http://www.mrunix.net/webalizer/</font></u></a> <br>　　cronolog <a class=10 href="http://www.cronolog.org/" target=_blank><u><font color=#0000ff>http://www.cronolog.org/</font></u></a> <br>　　Apache <a class=10 href="http://www.apache.org/" target=_blank><u><font color=#0000ff>http://www.apache.org/</font></u></a> <br>　　<br>　　<strong>一、 前言</strong><br>　　<br>　　随着Internet上Web服务的发展，几乎各个政府部门、公司、大专院校、科研院所等都在构建或正在建设自己的网站。而与此同时，在构建网站建设中各个单位都会遇到各种各样的问题，那么对web服务器的运行和访问情况进行详细和周全的分析对于了解网站运行情况，发现网站存在的不足，促进网站的更好发展重要性是不言而喻的。<br>　　<br>　　管理Web网站不只是监视Web的速度和Web的内容传送，它要求不仅仅关注服务器每天的吞吐量，还要了解对这些Web网站的外来访问，了解网站各页面的访问情况，根据各页面的点击频率来改善网页的内容和质量、提高内容的可读性，跟踪包含有商业交易的步骤以及管理Web网站&#8220;幕后&#8221;的数据等。 <br>　　<br>　　为了更好地提供WWW服务，监控WEB服务器的运行情况、了解网站内容的详细访问状况就越来越显得重要和迫切了。而这些要求都可以通过对web服务器的日志文件的统计和分析来做到。<br>　　<br>　　<strong>二、WEB日志分析的原理</strong><br>　　<br>　　网站服务器日志记录了web服务器接收处理请求以及运行时错误等各种原始信息。通过对日志进行统计、分析、综合，就能有效地掌握服务器的运行状况，发现和排除错误原因、了解客户访问分布等，更好的加强系统的维护和管理。<br>　　<br>　　在WWW服务模型是非常简单的（见图1）:<br>　　<br>　　1) 客户端(浏览器)和web服务器建立tcp连接，连接建立以后，向web 服务器发出访问请求（如：get），根据HTTP协议该请求中包含了客户端的IP地址、浏览器的类型、请求的URL等一系列信息。<br>　　<br>　　
<table align=center>
    <tbody>
        <tr>
            <td><img src="http://publish.it168.com/2005/0920/images/444489.bmp" border=1></td>
        </tr>
    </tbody>
</table>
<p align=center><br>　　&nbsp;图1 web访问机制</p>
<p>2) web服务器收到请求后，将客户端要求的页面内容返回到客户端。如果出现错误，那么返回错误代码。<br>　　<br>　　3) 服务器端将访问信息和错误信息纪录到日志文件里。下面是客户端发送给web服务器请求的数据报的内容：<br>　　<br>　　GET /engineer/ideal/list.htm HTTP/1.1<br>　　Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*<br>　　Referer: http://www.linuxaid.com.cn/engineer/ideal/<br>　　Accept-Language: zh-cn<br>　　Accept-Encoding: gzip, deflate<br>　　User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)<br>　　Host: http://www.linuxaid.com.cn/<br>　　Connection: Keep-Alive<br>　　<br>　　可以看到，在客户机的请求里包含了很多有用的信息，例如：客户端类型等等。而web服务器就会将请求的web页内容发送返回给客户机。<br>　　<br>　　目前最常用的web服务器有Apache、Netscape enterprise server、MS IIS等。而目前互联网上最常用的web服务器就是apache，因此我们这里的讨论都以Linux＋apache环境讨论，其他的应用环境类似。对于Apache来说，支持多种日志文件格式，最常见的是common和combined两种模式，其中combined方式比common方式的日志的信息要多Referer（该请求来自于哪里，例如来自于yahoo的搜索引擎）和User-agent（用户客户端类型，如mozilla或IE）。我们这里讨论combined类型。下面是common类型的日志示例：<br>　　<br>　　218.242.102.121 - - [06/Dec/2002:00:00:00 +0000] "GET /2/face/shnew/ad/via20020915logo.gif HTTP/1.1" 304 0 "http://www.mpsoft.net/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"<br>　　61.139.226.47 - - [06/Dec/2002:00:00:00 +0000] "GET /cgi-bin/guanggaotmp.cgi?1 HTTP/1.1" 200 178 "http://www3.beareyes.com.cn/1/index.php" "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)"<br>　　218.75.41.11 - - [06/Dec/2002:00:00:00 +0000] "GET /2/face/shnew/ad/via20020915logo.gif HTTP/1.1" 304 0 "http://www.mpsoft.net/" "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)"<br>　　61.187.207.104 - - [06/Dec/2002:00:00:00 +0000] "GET /images/logolun1.gif HTTP/1.1" 304 0 "http://www2.beareyes.com.cn/bbs/b.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"<br>　　211.150.229.228 - - [06/Dec/2002:00:00:00 +0000] "GET /2/face/pub/image_top_l.gif HTTP/1.1" 200 260 "http://www.beareyes.com/2/lib/200201/12/20020112004.htm" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"<br>　　<br>　　从上面的日志文件可以看出日志记录会记录客户端的IP地址、访问发生的时间、访问请求的页面、web服务器对于该请求返回的状态信息、返回给客户端的内容的大小（以字节为单位）、该请求的引用地址、客户浏览器类型等信息。<br>　　<br>　　<strong>三、apache日志的配置和管理<br>　　</strong><br>　　本文中我们假设我们的apache运行有两个虚拟主机：http://www.secfocus.com/和http://www.tomorrowtel.com/。我们需要对这两个虚拟主机分别进行访问日志分析和统计。<br>　　<br>　　Apache配置文件中，我们需要关心的和日志相关的配置有两个：<br>　　<br>　　CustomLog /www/logs/access_log common<br>　　ErrorLog /www/logs/error_log<br>　　<br>　　CustomLog用来指示apache的访问日志的存放位置（这里保存在/www/logs/access_log中）和格式（这里为common）；ErrorLog用来指示apache错误信息日志的存放位置。<br>　　<br>　　对于不配置虚拟主机的服务器来说，只需要直接在httpd.conf中查找CustomLOg的配置进行修改即可；而对于具有多个虚拟服务器的web服务器来说，需要分离各个虚拟服务器的访问日志，以便对各个虚拟服务器进行访问统计和分析。因此这就需要在虚拟服务器配置中进行独立的日志配置，示例：<br>　　<br>　　NameVirtualHost 75.8.18.19<br>　　<br>　　ServerName http://www.secfocus.com/<br>　　ServerAdmin secfocus@secfocus.com<br>　　DocumentRoot /www/htdocs/secfocus/<br>　　CustomLog "/www/log/secfocus" combined<br>　　Alias /usage/ "/www/log/secfocus/usage/"<br>　　<br>　　ServerName http://www.tomorrowtel.com/<br>　　ServerAdmin tomorrowtel @ tomorrowtel.com<br>　　DocumentRoot /www/htdocs/ tomorrowtel<br>　　CustomLog "/www/log/tomorrowtel " combined<br>　　Alias /usage/ "/www/log/tomorrowtel/usage/"<br>　　<br>　　这里需要注意的是每个虚拟主机的定义都有一个CustomLog命令，用来指定该虚拟主机访问日志的存放文件；而Alias命令用来让日志分析生成的报表能通过www.secfocus.com/usage/的方式来访问。通过上面的配置就完成了日志文件的保存。<br>　　<br>　　但是下来遇到的一个问题就是日志文件的轮循，因为日志是一直在增大的，如果不进行处理那么日志文件会越来越大，会影响web服务器运行效率；速率，还可能过大耗尽服务器硬盘空间，导致服务器无法正常运行，另外如果单个日志文件大于操作系统单文件尺寸的的限制，从而更进一步影响web服务的运行。而且日志文件如果不进行轮循也不变于日志统计分析程序的运行，因为日志统计分析都是以天为单位进行统计分析的，跨越很长时间日志会使得日志统计分析程序运行特别慢。因此这里就需要对web服务器日志文件每天进行轮循。<br>　　<br>　　<strong>四、web服务器日志轮循</strong><br>　　<br>　　web服务器日志轮循比较好的方式有三种：第一种方法是利用Linux系统自身的日志文件轮循机制：logrotate；第二种方法是利用apache自带的日志轮循程序rotatelogs；第三种是使用在apache的FAQ中推荐发展已经比较成熟的一个日志轮循工具cronolog。<br>　　<br>　　对于大型的WEB服务来说，其往往使用实用负载均衡技术提高web站点服务能力，这样后台有多个服务器提供WEB服务，这大大方便了服务的分布规划和扩展性，但多个服务器的分布就需要对日志进行合并统一进行统计分析。因此为了保证统计的精确性就需要严格按照每天的时段来自动生成日志文件。<br>　　<br>　　4．1 logrotate实现日志轮循<br>　　<br>　　首先我们讨论采用Linux系统自身的日志文件轮循机制：logrotate的方法。Logrotate是Linux系统自身带的一个日志轮循程序，是专门对各种系统日志（syslogd，mail）进行轮循的程序。该程序是由运行程序的服务crond来每天凌晨4:02运行的，可以在/etc/cron.daily目录下可以看到logrotate文件，其内容如下：<br>　　<br>　　#!/bin/sh<br>　　/usr/sbin/logrotate /etc/logrotate.conf<br>　　<br>　　可以看到每天清晨crond都会启动/etc/cron.daily目录下的logrotate脚本来进行日志轮循。<br>　　<br>　　而在/etc/logrorate.conf中可以看到内容如下：<br>　　<br>　　# see "man logrotate" for details<br>　　# rotate log files weekly<br>　　weekly<br>　　# keep 4 weeks worth of backlogs<br>　　rotate 4<br>　　# create new (empty) log files after rotating old ones<br>　　create<br>　　# uncomment this if you want your log files compressed<br>　　#compress<br>　　# RPM packages drop log rotation information into this directory<br>　　include /etc/logrotate.d<br>　　# no packages own wtmp -- we'll rotate them here<br>　　/var/log/wtmp {<br>　　monthly<br>　　create 0664 root utmp<br>　　rotate 1<br>　　}<br>　　<br>　　# system-specific logs may be also be configured here.<br>　　<br>　　从logrotate的配置文件中可以看到除了wtmp以外，需要滚动的日志的配置都保存在/etc/logroate.d目录下。因此我们只需要在该目录下创建一个名为apache的配置文件，来指示logrotate如何轮循web服务器的日志文件即可，下面是一个示例：<br>　　<br>　　/www/log/secfocus {<br>　　rotate 2 <br>　　daily<br>　　missingok<br>　　sharedscripts<br>　　postrotate<br>　　/usr/bin/killall -HUP httpd 2&gt; /dev/null || true<br>　　endscript<br>　　}<br>　　/www/log/tomorrowtel {<br>　　rotate 2 <br>　　daily<br>　　missingok<br>　　sharedscripts<br>　　postrotate<br>　　/usr/bin/killall -HUP httpd 2&gt; /dev/null || true<br>　　endscript<br>　　}<br>　　<br>　　这里&#8220;rotate 2&#8221;表示轮循时只包括两个备份文件，也就是只有：access_log、access_log.1、access_log.2三个日志备份文件。就这样就实现了对两个虚拟主机的日志文件的轮循。后面我们会讨论如何使用日志统计分析软件对日志文件进行处理。<br>　　<br>　　这种方法的优点是不需要其他第三方工具就可以实现日志轮循，但是对于重负载的服务器和使用负载均衡技术的web服务器来说这种方法就不是很实用。因为它是对相应服务进程发出一个-HUP重启命令来实现日志的截断归档的，这样会影响服务的连续性。<br>　　<br>　　4．2 使用apache自带的rotatelogs实现日志轮循<br>　　<br>　　apache提供了将不把日志直接写入文件，而是通过管道发送给另外一个程序的能力，这样就大大的加强了对日志进行处理的能力，这个通过管道得到的程序可以是任何程序：如日志分析，压缩日志等。要实现将日志写到管道只需要将配置中日志文件部分的内容替换为&#8220;|程序名&#8220;即可，例如：<br>　　<br>　　# compressed logs<br>　　CustomLog "|/usr/bin/gzip -c &gt;&gt; /var/log/access_log.gz" common<br>　　<br>　　这样就可以实用apache自带的轮循工具：rotatelogs来对日志文件进行轮循。rotatelogs基本是用来按时间或按大小控制日志的。<br>　　<br>　　CustomLog "|/www/bin/rotatelogs /www/logs/secfocus/access_log 86400" common <br>　　<br>　　上面的示例中apache访问日志被发送给程序rotatelogs，rotatelogs将日志写入/www/logs/secfocus/access_log，并每隔86400秒（一天）对日志进行一次轮循。轮循以后的文件名为/www/logs/secfocus/access_log.nnnn，这里nnn是开始记录日志的时间。因此为了将日志按天对齐就需要在凌晨00:00启动服务，使得每天轮循得到的日志刚好是完整一天的日志，以提供给访问统计分析程序进行处理。如果是00:00开始生成新的日志，那么轮循得到的日志就是access_log.0000。<br>　　<br>　　4．3 使用cronolog实现日志轮循<br>　　<br>　　首先需要下载和安装cronolog，可以到http://www.cronolog.org/下载最新版本的cronolog。下载完毕以后，解压安装即可，方法如下所示：<br>　　<br>　　[root@mail root]# tar xvfz cronolog-1.6.2.tar.gz<br>　　[root@mail root]# cd cronolog-1.6.2<br>　　[root@mail cronolog-1.6.2]# ./configure<br>　　[root@mail cronolog-1.6.2]# make<br>　　[root@mail cronolog-1.6.2]# make check<br>　　[root@mail cronolog-1.6.2]# make install<br>　　<br>　　这就完成了cronolog的配置和安装，默认情况下cronolog是安装在/usr/local/sbin下。<br>　　修改apache日志配置命令如下所示：<br>　　<br>　　CustomLog "|/usr/local/sbin/cronolog /www/logs/secfocus/%w/access_log" combined<br>　　<br>　　这里%w表示按照日期星期几在不同的目录下保存日志，这种方式会保存一周的日志。为了进行日志分析，需要每天将该日志文件拷贝（或移动，如果不希望保存一周的日志）到一个固定的位置以方便日志分析统计文件进行处理，实用crontab &#8211;e，如下添加定时任务：<br>　　<br>　　5 0 * * * /bin/mv /www/logs/secfocus/`date -v-1d +\%w`/access_log /www/logs/secfocus/access_log_yesterday<br>　　<br>　　这样再使用日志统计分析程序的对文件access_log_yesterday进行处理。<br>　　<br>　　对于使用负载均衡技术的大型站点，就存在多个服务器的访问日志的合并处理问题.对于这种情况，各个服务器定义或移动日志文件时就不能使用access_log_yesterday了，就应该带上服务器编号了，例如服务器IP地址等信息以区分。然后在各个服务器上运行网站镜像和备份服务rsyncd（参考文章&#8221; 用rsync实现网站镜像和备份&#8221;,ttp://www.linuxaid.com.cn/engineer/ideal/article/rsync.htm），然后将每个服务器每天的安装配置文件通过rsync下载到专门进行访问统计分析的服务器上进行合并。<br>　　<br>　　合并多个服务器的日志文件，例如：log1 log2 log3并输出到log_all中的方法是：<br>　　<br>　　sort -m -t " " -k 4 -o log_all log1 log2 log3<br>　　<br>　　-m: 使用 merge优化算法，-k 4表示根据时间进行排序，-o表示将排序结果存放到指定的文件中。<br>　　<br>　　<strong>五、日志统计分析程序webalizer的安装和配置</strong><br>　　<br>　　webalizer是一个高效的、免费的web服务器日志分析程序。其分析结果是HTML文件格式，从而可以很方便的通过web服务器进行浏览。Internet上的很多站点都使用webalizer进行web服务器日志分析。Webalizer具有以下一些特性：<br>　　<br>　　是用C写的程序，所以其具有很高的运行效率。在主频为200Mhz的机器上，webalizer每秒钟可以分析10000条记录，所以分析一个40M大小的日志文件只需要15秒。 <br>　　<br>　　webalizer支持标准的一般日志文件格式(Common Logfile Format)；除此之外，也支持几种组合日志格式(Combined Logfile Format)的变种，从而可以统计客户情况以及客户操作系统类型。并且现在webalizer已经可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。 <br>　　支持命令行配置以及配置文件。 <br>　　可以支持多种语言，也可以自己进行本地化工作。 <br>　　支持多种平台，比如UNIX、linux、NT, OS/2 和 MacOS等。 　 <br>　　
<table align=center>
    <tbody>
        <tr>
            <td><img src="http://publish.it168.com/2005/0920/images/444490.bmp" border=1></td>
        </tr>
    </tbody>
</table>
<br>　　上图是webalizer生成的访问统计分析报表第一页的内容，这里包含每个月的平均访问量的表格和条形图统计分析情况。点击每个月分，可以得到这个月每天的详细统计信息。<br>　　<br>　　5．1 安装<br>　　<br>　　在安装以前首先需要确保系统已经安装有gd库，可以使用：<br>　　<br>　　[root@mail root]# rpm -qa|grep gd<br>　　gd-devel-1.8.4-4<br>　　gdbm-devel-1.8.0-14<br>　　gdbm-1.8.0-14<br>　　sysklogd-1.4.1-8<br>　　gd-1.8.4-4<br>　　<br>　　来确认系统已经安装有gd-deve和gd两个rpm包。<br>　　<br>　　安装webalizer有两种方式，一种是下载源代码来安装，一种是直接使用rpm包来安装。<br>　　<br>　　使用rpm包方式安装非常简单，从rpmfind.net找到webalizer包，下载以后：<br>　　<br>　　rpm &#8211;ivh webalizer-2.01_10-1.i386.rpm<br>　　<br>　　即可实现安装。<br>　　<br>　　对于源代码方式首先需要从<a class=10 href="http://www.mrunix.net/webalizer/" target=_blank><u><font color=#0000ff>http://www.mrunix.net/webalizer/</font></u></a>下载，然后安装，首先解开源代码包：<br>　　<br>　　tar xvzf webalizer-2.01-10-src.tgz<br>　　<br>　　在生成的目录中有个lang目录，该目录中保存了各种语言文件，但是只有繁体中文版本，可以自己转换成简体，或者自己重新翻译一下。然后进入生成的目录：<br>　　<br>　　cd webalizer-2.01-10<br>　　./configure<br>　　make --with-language=Chinese<br>　　make install<br>　　<br>　　编译成功后，会在/usr/local/bin/目录下安装一个webalizer可执行文件。<br>　　<br>　　5．2 配置和运行<br>　　<br>　　对webalizer运行的控制可以通过配置文件或者在命令行指定参数的两种方式进行。而使用配置文件方式是比较简单和灵活的，适用于自动web服务器日志统计分析的应用环境。<br>　　<br>　　webalizer的默认配置文件为/etc/webalizer.conf，当启动Webalizer时没有使用&#8220;-f&#8220;选项时，Webalizer就会寻找文件/etc/webalizer.conf，也可以使用&#8220;-f&#8221;来指定配置文件（当服务器有虚拟主机时，就需要配置多份不同的webalizer配置文件，不同的虚拟主机的webalizer使用不同的配置文件。Webalizer.conf配置文件中需要修改的配置选项如下：<br>　　<br>　　LogFile /www/logs/secfocus/access_log<br>　　<br>　　用来指示配置文件的路径信息，webalizer会将该日志文件作为输入进行统计分析；<br>　　<br>　　OutputDir /www/htdocs/secfocus/usage<br>　　<br>　　用来指示生成的统计报表的保存目录，在前面我们使用alias，使得用户可以使用http://www.secfocus.com/usage/来访问统计报表。<br>　　<br>　　HostName http://www.secfocus.com/<br>　　<br>　　用来指示主机名，统计报表中会引用该主机名。<br>　　<br>　　其他选项就无需修改，配置文件修改完毕以后，就需要在定时webalizer，每天生成当日的统计分析。<br>　　<br>　　以root身份运行：crontab &#8211;e 进入定时运行任务编辑状态，加入如下任务：<br>　　<br>　　5 0 * * * /usr/local/bin/webalizer &#8211;f /etc/secfocus.webalizer.conf<br>　　15 0 * * * /usr/local/bin/webalizer &#8211;f /etc/tomorrowtel.webalizer.conf<br>　　<br>　　我们这里假设系统运行有两个虚拟主机，并分别定义了日志分析配置文件secfocus.webalizer.conf和tomorrowtel.webalizer.conf。这样我们定义在凌晨00:05对secfocus的日志进行统计分析；在凌晨00:15对tomorrowtel的日志进行统计分析。<br>　　<br>　　然后第二天分别使用http://www.secfocus.com/usage/和http://www.tomorrowtel.com/usage来察看各自的日志分析报表。<br>　　<br>　　<strong>六、保护日志统计分析报告不被未授权用户访问</strong><br>　　<br>　　我们肯定不会希望自己网站访问统计信息随意被别人浏览，因此需要将usage目录保护起来，只允许合法用户访问。这里可以采用apache自带的基本的认证机制，配置以后再连接这个地址就会需要用户提供密码才能访问该页面：<br>　　<br>　　
<table align=center>
    <tbody>
        <tr>
            <td><img src="http://publish.it168.com/2005/0920/images/444491.bmp" border=1></td>
        </tr>
    </tbody>
</table>
<br>　　<br>　　1、条件<br>　　<br>　　在配置文件中对目录"/"应该设置为：<br>　　<br>　　DocumentRoot /www/htdocs/secfocus/<br>　　AccessFileName .htaccess<br>　　AllowOverride All<br>　　<br>　　2、需求<br>　　<br>　　需求：限制对http://www.secfocus.com/usage/的访问，要求用户认证才能访问。这里设置用户为"admin"，口令为"12345678"。<br>　　<br>　　3、使用htpasswd建立用户文件<br>　　<br>　　htpasswd -c /www/.htpasswd admin<br>　　此程序会询问用户"admin"的口令，你输入"12345678"，两次生效。<br>　　<br>　　4、建立.htaccess文件<br>　　<br>　　用vi在/www/logs/secfocus/usage/目录下建立一个文件.htaccess，写入以下几行：<br>　　AuthName admin-only<br>　　AuthType Basic<br>　　AuthUserFile /www/.htpasswd<br>　　require user admin<br>　　<br>　　5、测试<br>　　<br>　　这时候通过浏览器访问http://www.secfocus.com/usage就会弹出框请求输入用户名和口令，这时候输入admin、12345678就可以才可以访问访问日志统计分析报表。</p>
<img src ="http://www.phpweblog.net/killjin/aggbug/2569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-12-19 15:26 <a href="http://www.phpweblog.net/killjin/archive/2007/12/19/2569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache access log，关闭缺省</title><link>http://www.phpweblog.net/killjin/archive/2007/11/22/2376.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 22 Nov 2007 15:30:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/11/22/2376.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2376.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/11/22/2376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2376.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2376.html</trackback:ping><description><![CDATA[关闭 缺省主机的 log<br>&nbsp;#customLog logs/access.log common<br><br>在 virtualhost 中加<br>&nbsp; CustomLog logs/lele_access.log common<br>
<img src ="http://www.phpweblog.net/killjin/aggbug/2376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-11-22 23:30 <a href="http://www.phpweblog.net/killjin/archive/2007/11/22/2376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>centos 5.0 编译安装apache 2.2.6+php5.2.5+mysql5.0.46+Zend Optimizer 3.3.0+eacc</title><link>http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sun, 04 Nov 2007 10:37:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/2169.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/2169.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/2169.html</trackback:ping><description><![CDATA[<div class=t_msgfont id=postmessage_1394>V2.0 2007年10月14日 操作系统更新为<strong><font color=#ff0000>centos</font></strong> <strong><font color=#ff0000>5.0</font></strong>&nbsp;&nbsp;apache 更新为2.2.6版本， php更新为5.2.5,增加集成Suhosin补丁，mysql 更新为<strong><font color=#ff0000>5.0</font></strong>.46, Zend Optimizer 更新为3.3.0。解决新平台下的一些问题。修正文字错误。<br><br>v1.2 2007年2月12日 apache 更新为2.2.4版本，增加mod_ssl和openssl支持，增加apr和apr-util的编译， php更新为5.2.1,增加集成Suhosin补丁，mysql 更新为<strong><font color=#ff0000>5.0</font></strong>.33, Zend Optimizer 更新为3.2.2，增加phpmyadmin。修改一些文字错误。<br><br>v1.0 2007年1月11日<br><br>先声明，我绝对是个Linux的菜鸟，以下的这些文字个人的安装笔记，是参考了网上许多高手的成功经验组合而成的，说实话我自己的东西不多 ：）我想把这些经验写下来，既可以对其他跟我一样摸索的兄弟一个经验，也可以防止以后自己都忘记了，嘿嘿。<br><br>所以如果某个大虾看到我借用了你的资源，请你不要生气。也欢迎大家进行指点。<br><br>1、下载<strong><font color=#ff0000>centos</font></strong> 5<br>我是下载的DVD版本，大家也可以下载服务器CD安装版本，其实都差不多。大家可以到这儿下载，速度很快的。<br><a href="http://ftp.iasi.roedu.net/mirrors/centos.org/5/isos/i386/CentOS-5.0-i386-bin-DVD.iso" target=_blank>http://ftp.iasi.roedu.net/mirror ... .0-i386-bin-DVD.iso</a><br><br>当然也可以在windows下用BT或迅雷下载，速度也很不错的。<br><br>下载后当然就刻录成光盘。我建议你刻录DVD啦，如果是菜鸟，也可以在图形界面进行学习，不会这么抓不住头脑。<br><br>2、（1）安装CentOS 5<br>作为服务器，不安装不需要的组件，所以在选择组件的时候，除了选择FTP SERVER外取消所有组件的选择。也不要选web服务器。因为我们后面要手动<strong><font color=#ff0000>编译安装</font></strong>。<br><br><br>系统约定RPM包和源码包存放位置<br><br>RPM包和源码包存放位置 /usr/local/src<br>源码包<strong><font color=#ff0000>编译安装</font></strong>位置(prefix) /usr/local/xxx<br>脚本以及维护程序存放位置 /usr/local/sbin<br>MySQL 数据库位置 /var/lib/mysql<br>Apache 网站根目录 /home/www<br>Apache 虚拟主机日志根目录 /data/logs/www<br>yum RPM包信息文件 /etc/yum.list<br><br>3、系统环境部署及调整<br><br>（1）. 检查系统是否正常<br># more /var/log/messages //检查有无系统内核级错误信息<br># demesg //检查硬件设备是否有错误信息<br># ifconfig //检查网卡设置是否正确<br># ping <a href="http://www.163.com/" target=_blank>www.163.com</a> // 检查网络是否正常<br><br>（2）. 关闭不需要的服务<br># export LANG='en_US' //设置语言<br># setup //选择启动的服务<br>进入system service 选项。<br>以space 键选定所需服务。<br>以下仅列出需要启动的服务，未列出的服务一律关闭：<br>crond<br>irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时，才需开启，否则关闭。<br>microcode_ctl<br>network<br>vsftpd<br>sshd<br>syslog<br><br>（3）、修改/etc/yum.repos.d/CentOS-Base.repo，将镜象站点地址改为在中国的镜象站点地址。不然我们通过yum安装软件速度会极慢。修改如下：<br><br># CentOS-Base.repo<br>#<br># This file uses a new mirrorlist system developed by Lance Davis for CentOS.<br># The mirror system uses the connecting IP address of the client and the<br># update status of each mirror to pick mirrors that are updated to and<br># geographically close to the client.&nbsp;&nbsp;You should use this for CentOS updates<br># unless you are manually picking other mirrors.<br>#<br># If the mirrorlist= does not work for you, as a fall back you can try the <br># remarked out baseurl= line instead.<br>#<br>#<br><br>[base]<br>name=CentOS-$releasever - Base<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/os/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=1<br><br>#released updates <br>[updates]<br>name=CentOS-$releasever - Updates<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/updates/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=1<br><br>#packages used/produced in the build but not released<br>[addons]<br>name=CentOS-$releasever - Addons<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/addons/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=0<br><br>#additional packages that may be useful<br>[extras]<br>name=CentOS-$releasever - Extras<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/extras/$basearch/<br>gpgcheck=1<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=0<br><br>#additional packages that extend functionality of existing packages<br>[<strong><font color=#ff0000>centos</font></strong>plus]<br>name=CentOS-$releasever - Plus<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/<strong><font color=#ff0000>centos</font></strong>plus/$basearch/<br>gpgcheck=1<br>enabled=0<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br>protect=1<br><br>#contrib - packages by Centos Users<br>[contrib]<br>name=CentOS-$releasever - Contrib<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/$releasever/contrib/$basearch/<br>gpgcheck=1<br>enabled=0<br>protect=0<br>gpgkey=http://mirror.<strong><font color=#ff0000>centos</font></strong>.org/<strong><font color=#ff0000>centos</font></strong>/RPM-GPG-KEY-CentOS-5<br><br>#packages in testing<br>[testing]<br>name=CentOS-5 - Testing<br>baseurl=http://mirror.be10.com/<strong><font color=#ff0000>centos</font></strong>/5/testing/i386/<br><br>gpgcheck=1<br>enabled=0<br>protect=0<br><br><br>保存。<br><br>（2）更新系统，我们使用yum,<br><br>然后执行：<br># yum upgrade<br>建议更新所有列出的程序，rhel 5.X的稳定性还要继续努力呢。<br><br><br>（4）、定时校正服务器时间<br># yum install ntp<br># crontab -e<br>0 23 * * * root /usr/sbin/ntpdate 210.72.145.44 &gt; /dev/null 2&gt;&amp;1<br><br>以上命令设置好后存盘。您的机器将在每天的23:00根据中国国家授时中心的NTP服务器时间自动校准时间。<br><br>(5). 对TCP/IP网络参数进行调整，加强抗SYN Flood能力<br># echo 'net.ipv4.tcp_syncookies = 1' &gt;&gt; /etc/sysctl.conf //将net.ipv4.tcp_syncookies = 1写入sysctl.conf 文件<br># sysctl -p //查看<br><br>（6）、FTP服务器的配置<br>vi /etc/vsftpd/vsftpd.conf<br>把anonymous_enable=YES注释掉不允许匿名登录。<br>把chroot_list_enable=YES<br>chroot_list_file=/etc/vsftpd.chroot_list<br>前的注释去掉。<br>把ftpd_banner=*前的注释去掉。后面改成你的欢迎信息(这样设置可以避免显示ftp服务器的版本信息)<br>然后保存，service vsftpd start就可以了。<br><br>这时应当添加用户，因为root默认不能通过FTP方式登录。<br><br># adduser username<br># passwd userpassword<br><br>这样对于我们上传一些文件到系统中很方便。<br><br><br>4. 重新启动系统<br># init 6<br><br><br>5. 使用 yum 程序安装所需开发包（以下为标准的 RPM 包名称）<br># yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel<br><br>#这里我们将编译GD所必须的一些小软件比如libpng,libtiff,freetype,libjpeg,等先用RPM的方式一并安装好，避免手动编译浪费时间，同时也能避免很多错误，这几个小软件的编译很麻烦。这几个小软件编译错误了，GD当然安装不了，php5的编译当然也没戏了。所以我们抓大放小，对这些小牛鬼蛇神采取快速简洁的方式进行安装。并且对服务器的性能也不能产生什么影响。<br>另外libxml2系统已经默认安装了，所以我们不需要手工编译了，直接安装它的开发包就行了。<br><br>6. 源码<strong><font color=#ff0000>编译安装</font></strong>所需包 (Source)<br>(1) GD2<br># cd /usr/local/src<br># wget <a href="http://www.boutell.com/gd/http/gd-2.0.34.tar.gz" target=_blank>http://www.boutell.com/gd/http/gd-2.0.34.tar.gz</a><br># tar xzvf gd-2.0.34.tar.gz<br># cd gd-2.0.34<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/gd2 --mandir=/usr/share/man //./configure 配置。<br><br># make //make 是用来编译的，它从 Makefile 中读取指令，然后编译。<br># make install //make install 是用来安装的，它也从 Makefile 中读取指令，安装到指定的位置。<br><br>(2) Apache 日志截断程序<br># cd /usr/local/src<br># wget <a href="http://cronolog.org/download/cronolog-1.6.2.tar.gz" target=_blank>http://cronolog.org/download/cronolog-1.6.2.tar.gz</a><br># tar xzvf cronolog-1.6.2.tar.gz<br># cd cronolog-1.6.2<br># ./configure --prefix=/usr/local/cronolog<br># make<br># make install<br><br><br>7、编译mysql <strong><font color=#ff0000>5.0</font></strong>.46<br>mysql <strong><font color=#ff0000>5.0</font></strong>.46是企业版本，貌似双数版本都是企业版本了。个人觉得代码质量要比社区版本要好一些。大家可以下载，免费使用。并不需要向mysql公司交钱。<br><br>cd /usr/local/src<br># wget <a href="http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-5.0.46.tar.gz" target=_blank>http://mirror.provenscaling.com/ ... mysql-<strong><font color=#ff0000>5.0</font></strong>.46.tar.gz</a><br># tar xzvf mysql-<strong><font color=#ff0000>5.0</font></strong>.46.tar.gz<br># cd mysql-<strong><font color=#ff0000>5.0</font></strong>.46<br><br>修改mysql 客户端最大连接数， 默认的只有100,远远达不到我们的要求。<br><br># vi sql/mysqld.cc<br><br>搜索找到下面一行：<br>{"max_connections", OPT_MAX_CONNECTIONS,<br>"The number of simultaneous clients allowed.", (gptr*) &amp;max_connections,<br>(gptr*) &amp;max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,<br>0},<br><br>将其中的100改为1500, 当然小点也可以，根据你的需要来，不建议改的太大。<br><br>{"max_connections", OPT_MAX_CONNECTIONS,<br>"The number of simultaneous clients allowed.", (gptr*) &amp;max_connections,<br>(gptr*) &amp;max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,<br>0},<br><br>保存。<br><br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-comment=Source --with-server-suffix=-enterprise-gpl --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all --with-pthread --enable-static --enable-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-innodb --without-ndb-debug --without-isam<br><br><br>配置成功会提示：<br><br>MySQL has a Web site at <a href="http://www.mysql.com/" target=_blank>http://www.mysql.com/</a> which carries details on the<br>latest release, upcoming features, and other information to make your<br>work or play with MySQL more productive. There you can also find<br>information about mailing lists for MySQL discussion.<br><br>Remember to check the platform specific part of the reference manual for<br>hints about installing MySQL on your platform. Also have a look at the<br>files in the Docs directory.<br><br>Thank you for choosing MySQL!<br><br>// 注意 ，CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" 这个环境参数只针对intel P4 芯片，如果你的CPU是AMD的，注意不能使用。请查看相应的编译优化参数。否则程序会无法编译，即使编译成功也无法运行，嘿嘿。<br><br>关于其他CPU的优化请看我的BLOG的一篇转贴：<br><a href="http://www.cnprint.org/bbs/blogs/1/blog43.html" target=_blank>http://www.cnprint.org/bbs/blogs/1/blog43.html</a><br><br><br># make<br>编译的时间可能会比较长，毕竟优化的比较厉害。<br><br># make install<br><br><strong><font color=#ff0000>编译安装</font></strong>完成后执行后续操作：<br># useradd mysql //添加 mysql 用户<br># cd /usr/local/mysql<br># bin/mysql_install_db --user=mysql<br># chown -R root:mysql . //设置权限，注意后面有一个 "."<br># chown -R mysql /var/lib/mysql //设置 mysql 目录权限<br># chgrp -R mysql . //注意后面有一个 "."<br># cp share/mysql/my-medium.cnf /etc/my.cnf<br># cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld //开机自动启动 mysql。<br># chmod 755 /etc/rc.d/init.d/mysqld<br># chkconfig --add mysqld<br># /etc/rc.d/init.d/mysqld start //启动 MySQL<br># bin/mysqladmin -u root password "password_for_root"<br># service mysqld stop //关闭 MySQL<br><br>8. <strong><font color=#ff0000>编译安装</font></strong> Apache<br># cd /usr/local/src<br># wget <a href="http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz" target=_blank>http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz</a><br># tar zxvf httpd-2.2.6.tar.gz<br># cd httpd-2.2.6<br><br>依次安装apr和apr-util<br><br># cd srclib/apr<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apr --enable-threads --enable-other-child --enable-static<br># make &amp;&amp; make install<br><br># cd ../apr-util<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-mysql=/usr/local/mysql<br># make &amp;&amp; make install<br><br>cd /usr/local/src/httpd-2.2.6<br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --with-mysql=/usr/local/mysql --enable-cache --enable-file-cache --enable-mem-cache --enable-disk-cache --enable-static-support --enable-static-htpasswd --enable-static-htdigest --enable-static-rotatelogs --enable-static-logresolve --enable-static-htdbm --enable-static-ab --enable-static-checkgid --disable-cgid --disable-cgi --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-ssl --with-ssl=/usr/include/openssl<br><br># make<br># make install<br># echo '/usr/local/apache2/bin/apachectl start ' &gt;&gt; /etc/rc.local //将 apachectl 的调用加入到你的系统启动文件中。<br><br>注解：<br>./configure //配置源代码树<br>--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ，也就Apache的安装目录。<br>--enable-module=so //打开 so 模块，so 模块是用来提 DSO 支持的 apache 核心模块<br>--enable-mods-shared=all //编译全部的模板，对于不需要我们可以在httpd.conf去掉。<br>--enable-cache //支持缓存<br>--enable-file-cache //支持文件缓存<br>--enable-mem-cache //支持记忆缓存<br>--enable-disk-cache //支持磁盘缓存<br>--enable-static-support //支持静态连接(默认为动态连接)<br>--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件<br>--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件<br>--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 日志的管道日志程序<br>--enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 日志中的IP地址为主机名<br>--enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库<br>--enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具<br>--enable-static-checkgid //使用静态连接编译 checkgid<br>--disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本<br>--disable-cgi //禁止编译 CGI 版本的 PHP<br>--enable-ssl // 编译 ssl模块。<br><br>我们不再使用worker模式编译apache，worker模式和php貌似有一些不协调不稳定之处。所以使用了默认的perfork模式。<br><br>将apache设置成开机自启动:<br><br>在/etc/rc.d/rc.local文件中加入一行<br>/usr/local/apache2/bin/apachectl start<br>这样每次重新启动系统以后,apache也会随系统一起启动.<br><br>或者<br># cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd<br>然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)<br># chkconfig: 2345 10 90<br># description: Activates/Deactivates Apache Web Server<br>最后，运行chkconfig把Apache添加到系统的启动服务组里面：<br># chkconfig --add httpd<br># chkconfig httpd on<br><br><br>9、编译php 5.2.5-devel。<br>php 5.2.4有点小BUG，无法在<strong><font color=#ff0000>centos</font></strong> 5上正常编译，官方已经在php5.2.5中修复了。所以我们使用php 5.2.5进行编译。<br>Suhosin是php增强型安全补丁，可以编译到静态内核中，也可以编译成php动态扩展。我个人强烈你建议安装成静态内核。Suhosin已经进入freebsd和gentoo的ports。下面的以下先说静态安装步骤。当然你也可以在安装php后将它编译成php的动态扩展。<br><br># cd /usr/local/src<br># wget <a href="http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror" target=_blank>http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror</a><br>wget <a href="http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.2.5-0.9.6.2.patch.gz" target=_blank>http://www.hardened-php.net/suho ... .5-0.9.6.2.patch.gz</a><br># tar zxvf php-5.2.5.tar.gz<br># gunzip suhosin-patch-5.2.1-0.9.6.2.patch.gz<br># cd php-5.2.5<br><br># CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-pear=/usr/share/php --with-zlib-dir --with-bz2 --with-libxml-dir=/usr --with-gd=/usr/local/gd2 --enable-gd-native-ttf --enable-gd-jis-conv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf=shared,/usr --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/etc --with-iconv --disable-ipv6 --enable-static --enable-maintainer-zts --enable-zend-multibyte --enable-inline-optimization --enable-zend-multibyte --enable-sockets --enable-soap --with-openssl<br><br>配置成功会提示：<br><br>+--------------------------------------------------------------------+<br>| License:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;|<br>| This software is subject to the PHP License, available in this&nbsp; &nbsp;&nbsp;&nbsp;|<br>| distribution in the file LICENSE.&nbsp;&nbsp;By continuing this installation |<br>| process, you are bound by the terms of this license agreement.&nbsp; &nbsp;&nbsp;&nbsp;|<br>| If you do not agree with the terms of this license, you must abort |<br>| the installation process at this point.&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; |<br>+--------------------------------------------------------------------+<br><br>Thank you for using PHP.<br><br><br># make<br><br># make install<br><br># cp php.ini-recommended /etc/php.ini<br><br><br>在这里也顺便说一下将suhosin安装成为php的动态扩展的方法。毕竟网上根本不见它的中文安装教程。<br><br>虽然我个人不推荐这种方式。<br><br>wget <a href="http://www.hardened-php.net/suhosin/_media/suhosin-0.9.16.tgz" target=_blank>http://www.hardened-php.net/suhosin/_media/suhosin-0.9.16.tgz</a><br>tar zxvf suhosin-0.9.16.tgz<br>cd suhosin-0.9.16<br>./configure --with-php-config=/usr/local/php/bin/php-config<br>make<br>make install<br><br>会提示编译的模块存在的目录，记住它。<br>Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/<br><br>然后在php.ini中增加一行下列语句。<br>extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/suhosin.so<br><br>10 、整合apache 与php<br># vi /usr/local/apache2/conf/httpd.conf<br>在最后一行加上：<br>AddType application/x-httpd-php .php<br><br>查找：(设置 WEB 默认文件)<br>DirectoryIndex index.html<br>替换为：<br>DirectoryIndex index.php index.html index.htm //在 WEB 目录不到默认文件，httpd 就会执行 /var/www/error/noindex.html<br><br>找到这一段：<br># AllowOverride controls what directives may be placed in .htaccess files.<br># It can be "All", "None", or any combination of the keywords:<br># Options FileInfo AuthConfig Limit<br>#<br>AllowOverride none<br><br>更改为AllowOverride all<br>允许apache rewrite<br><br># 监听443端口,支持https连接<br>取消注释 httpd.conf 中的 Include conf/extra/httpd-ssl.conf<br><br>保存httpd.conf，退出。<br><br># /usr/local/apache2/bin/apachectl restart //重启 Apache<br><br>这时会出现错误：<br><br>/usr/local/apache2/bin/apachectl start<br>httpd: Syntax error on line 107 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied<br><br>不急，我们慢慢解决。<br><br>先重启下机器：<br>reboot<br>这个Permission denied问题，在<strong><font color=#ff0000>centos</font></strong> 5下面一般是Selinux引起的，作为生产用服务器，我建议你千万别草率地关掉Selinux一了百了。就像家里的防盗网，阻碍了你的猫自由进出窗户，你不能为了猫方便，就把防盗网简单拆除是同样的道理。我看见网上许多人建议把Selinux简单关闭来解决这个问题，很不以为然。<br>我们可以这样操作：<br><br># audit2allow -d<br>allow initrc_t usr_t:file execmod;<br>allow mount_t default_t:file execute;<br><br><br># cd /etc/selinux/targeted/modules/<br># audit2allow -M local -d<br><br>屏幕产生如下提示：<br><br>产生类型强制文件：local.te<br>正在编译策略<br>checkmodule -M -m -o local.mod local.te<br>semodule_package -o local.pp -m local.mod<br><br>********************重要 ***********************<br><br>为了在内核中加载这个新创建的策略软件包，<br>您需要执行 <br><br>semodule -i local.pp<br><br>我们运行<br><br># semodule -i local.pp<br><br>这样就让Selinux加载了新的规则。<br><br>更详细的内容请看我在BLOG上的转贴：<br><br><a href="http://www.cnprint.org/bbs/blogs/1/blog48.html" target=_blank>http://www.cnprint.org/bbs/blogs/1/blog48.html</a><br><br>reboot<br><br>哈哈，apache不会再报错了吧？<br>这样我保留了selinux的功能，同时apache也能正常运行。<br><br>11. 查看确认 L.A.M.P 环境信息<br>vi /usr/local/apache2/htdocs/phpinfo.php<br><br>新增加下面一行，并保存。<br><br><br><br># chmod 755 /usr/local/apache2/htdocs/phpinfo.php<br><br>用浏览器打开 <a href="http://127.0.0.1/phpinfo.php" target=_blank>http://127.0.0.1/phpinfo.php</a><br><br><br># echo ' ' &gt; /usr/local/apache2/htdocs/testdb.php<br># chmod 755 /usr/local/apache2/htdocs/testdb.php<br># service mysqld start<br>用浏览器打开 <a href="http://127.0.0.1/testdb.php" target=_blank>http://127.0.0.1/testdb.php</a><br>检查 phpinfo 中的各项信息是否正确。<br><br>12、设置SSL并创建自己的CA<br><br># cd /usr/share/ssl/misc<br><br># ./CA -newca<br><br>屏幕上出现如下的提示:CA certificate filename (or enter to create)<br><br>这是要求输入要创建的CA的证书文件名, 可以直接回车或输入证书文件名。<br><br>Making CA certificate ...<br>Generating a 1024 bit RSA private key<br>.........++++++<br>................................++++++<br>writing new private key to './demoCA/private/./cakey.pem'<br>Enter PEM pass phrase:<br><br>Verifying password - Enter PEM pass phrase:-<br><br>此时要求输入和验证CA的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。<br><br>至此,在当前目录下生成了demoCA的目录,CA的证书就在该目录下,文件名为cacert.pem<br><br>生成服务器的证书请求<br><br># ./CA -newreq<br><br>屏幕上出现如下的提示:<br><br>Generating a 1024 bit RSA private key<br>.....................................................++++++<br>.....++++++<br>writing new private key to 'newreq.pem'<br>Enter PEM pass phrase:<br>Verifying password - Enter PEM pass phrase:<br><br>此时要求输入和验证服务器的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。<br><br>Please enter the following 'extra' attributes<br><br>to be sent with your certificaterequest<br><br>A challenge password []:<br><br>An optional company name []:<br><br>.Request (and private key) is in newreq.pem<br><br>这是要求输入服务器的相关信息。<br><br>此时,在当前目录下生成了一个名为newreq.pem的文件,包含了要生成服务器数字证书的请求。<br><br>签署证书<br><br># ./CA -sign<br><br>屏幕上出现如下的提示:<br><br>Using configuration from /usr/share/ssl/openssl.cnf<br><br>Enter PEM pass phrase:<br><br>此时一样需要输入CA的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。<br><br>Certificate is to be certified until Nov 19 13:46:19 2002 GMT (365 days)<br><br>Sign the certificate? [y/n]:y<br><br>这时显示证书请求文件中的各项信息,并询问是否要签署证书，回答y，进行签署。<br><br>1 out of 1 certificate requests certified, commit? [y/n]y<br><br>回答y,会显示已经签署的证书的信息,并在当前目录下生成服务器的证书文件newcert.pem。<br><br># mkdir /usr/local/apache2/conf/ssl.crt/<br># mkdir /usr/local/apache2/conf/ssl.key/<br># cp newcert.pem /usr/local/apache2/conf/ssl.crt/server.pem<br># cp newreq.pem /usr/local/apache2/conf/ssl.key/server.pem<br><br><br>更改服务器的证书文件的相关配置<br># vi /usr/local/apache2/conf/extra/httpd-ssl.conf<br><br>查找并修改<br><br># Server Certificate:<br># Point SSLCertificateFile at a PEM encoded certificate. If<br># the certificate is encrypted, then you will be prompted for a<br># pass phrase. Note that a kill -HUP will prompt again. Keep<br># in mind that if you have both an RSA and a DSA certificate you<br># can configure both in parallel (to also allow the use of DSA<br># ciphers, etc.)<br>SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.pem<br>#SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt<br><br># Server Private Key:<br># If the key is not combined with the certificate, use this<br># directive to point at the key file. Keep in mind that if<br># you've both a RSA and a DSA private key you can configure<br># both in parallel (to also allow the use of DSA ciphers, etc.)<br>SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.pem<br>#SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key<br><br><br>示例文件<br><br>在SSL的根目录中生成一个index.html,它是如下所示:<br><br>＜html＞<br><br>这是SSL示例!<br><br>＜/html＞<br><br>测试<br><br>假如Web服务器的DNS名称是<a href="http://www.cnprint.org/" target=_blank>www.cnprint.org</a>.<br><br>在浏览器的URL地址栏里输入 <a href="http://www.cnprint.org/%EF%BC%8C%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BE%BF%E4%BC%9A%E6%98%BE%E7%A4%BAAPACHE%E5%AE%89%E8%A3%85%E6%97%B6%E7%A1%AE%E7%9C%81%E7%9A%84Test" target=_blank>http://www.cnprint.org/，浏览器便会显示APACHE安装时确省的Test</a> Page.<br><br>在浏览器的URL地址栏里输入 <a href="https://www.cnprint.org/%EF%BC%8C%E6%B3%A8%E6%84%8F:%E6%98%AF" target=_blank>https://www.cnprint.org/，注意:是</a> https 而不是http !<br><br>浏览器会提示站点已经采用了SSL进行数据的加密传输.由于我们的CA证书不是浏览器缺省的信任的根证书,所以,浏览器会说无法确认服务器的证书可信。暂时不管,一直NEXT,最后,浏览器会显示:这是SSL示例!<br><br>可以把CA的证书放在非SSL的站点上,让浏览器下载并安装CA证书,并将其设置成可信任的根证书,便可解决上面的问题.8 解除HTTPD起动时的口令输入。<br><br>由于安全的原因,Web服务器的私钥是口令加密了的，每次重新起动HTTPD或Linux时,都会要求输入Web服务器的私钥的口令。<br><br>如果要解除HTTPD起动时的口令输入,可以这样:<br><br># cd /usr/local/apache2/conf/ssl.key/<br># cp server.pem server.pem.org<br># openssl rsa -in server.pem.org -out server.pem<br># chmod 400 server.pem<br><br>另外在网上看到一个方法，我没有试。有兴趣的可以试下。<br><br>创建SSL密码自动应答文件，否则每次Apache启动的时候，都会要求你输入SSL的密码.<br>创建 /usr/local/apache2/conf/ssl.key/sendsslpwd ,内容如下.<br>#!/bin/bash<br>SSLpasswd="YOUR PASSPHRASE"<br>echo $SSLpasswd<br>chmod 755 /usr/local/apache2/conf/ssl.key/sendsslpwd<br><br><br>此时，Web服务器的私钥已经没有口令加密,一定要确保server.pem文件除root外,任何用户均无权读取它。<br><br><br>13、安装 Zend Optimizer<br># cd /usr/local/src<br># wget <a href="http://downloads.zend.com/optimizer/3.3.0/ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz" target=_blank>http://downloads.zend.com/optimi ... glibc21-i386.tar.gz</a><br># tar xzvf ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz<br># ./ZendOptimizer-3.3.0-linux-glibc21-i386/install.sh<br>按照它的提示一步步进行就行了。<br>总之一句话。如果你的服务器环境不需要ZendOptimizer，那么能不安就不安装这个。避免和eaccelerator冲突。<br><br>14、安装eaccelerator // eaccelerator是php的加速软件，使用后php的执行效率会有较大幅度的提升。目前eaccelerator 0.9.5.2已经和ZendOptimizer-3.3.0能够基本上兼容啦。不过我个人觉得，ZendOptimizer-3.3.0没有加速的功能，反而使php运行变慢，只是起到了运行zend加密文件的作用而已。闲话不多说了，大家有兴趣的，可以去google下。<br><br># cd /usr/local/src<br># wget <a href="http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2" target=_blank>http://bart.eaccelerator.net/sou ... tor-0.9.5.2.tar.bz2</a><br># tar -jxvf eaccelerator-0.9.5.2.tar.bz2<br># cd eaccelerator-0.9.5.2<br><br>export PHP_PREFIX="/usr/local/php"<br>$PHP_PREFIX/bin/phpize //指定一下php的目录<br><br># ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config // 设置<br><br># make &amp; make install<br><br><strong><font color=#ff0000>编译安装</font></strong>后我们会看到屏幕提示的eaccelerator.so所在的目录，比如我得到的是/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so，记住这个路径，待会要用到。<br><br>修改php.ini（安装完zend之后，php.ini存放于/usr/local/Zend/etc）<br>在文件最后，zend之前，注意，这部分内容务必放在zend之前，不然可能会出现不可预期的服务器问题。添加下列信息：<br><br>[eaccelerator]<br>extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so"<br>eaccelerator.shm_size="32"<br>eaccelerator.cache_dir="/tmp/eaccelerator"<br>eaccelerator.enable="1"<br>eaccelerator.optimizer="1"<br>eaccelerator.check_mtime="1"<br>eaccelerator.debug="0"<br>eaccelerator.filter=""<br>eaccelerator.shm_max="0"<br>eaccelerator.shm_ttl="0"<br>eaccelerator.shm_prune_period="0"<br>eaccelerator.shm_only="0"<br>eaccelerator.compress="1"<br>eaccelerator.compress_level="9"<br><br>解释:<br>zend_extension 是安装完程序自动指示给我们的<br>eaccelerator.shm_size="32" 缓存大小单位MB<br>eaccelerator.cache_dir="/tmp/eaccelerator" 缓存路径<br><br># mkdir /tmp/eaccelerator // 建立目录<br># chmod 0777 /tmp/eaccelerator // 修改目录属性<br><br>最后重新启动apachectl<br><br>重启apache，phpinfo显示：<br>This program makes use of the Zend Scripting Language Engine:<br>Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies<br>with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator<br>with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies<br>with Zend Optimizer v3.3.0, Copyright (c) 1998-2006, by Zend Technologies<br><br>也会有eAccelerator的具体信息。<br><br>15、安装phpmyadmin，管理mysql数据库<br><br># cd /usr/local/apache2/htdocs/<br># wget <a href="http://nchc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz" target=_blank>http://nchc.dl.sourceforge.net/s ... s-utf-8-only.tar.gz</a><br><br># tar zxvf phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz<br># mv phpMyAdmin-2.11.1-all-languages-utf-8-only phpmyadmin<br><br># cd phpmyadmin/libraries<br><br>修改配置文件<br># vi config.default.php<br><br>找到这几行进行修改：<br>$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (valid choices: config, http, HTTP, signon or cookie)<br>$cfg['Servers'][$i]['user'] = 'root'; // MySQL user<br>$cfg['Servers'][$i]['password'] = 'PASSWORD'; // MySQL password (only needed<br><br>经过这几个步骤，我们一个比较安全的LAMP服务器就环境基本建立成功啦。感觉上也不是很难，是吧？</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/2169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2007-11-04 18:37 <a href="http://www.phpweblog.net/killjin/archive/2007/11/04/2169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>