<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>夜行人 &#187; Apache</title>
	<atom:link href="http://www.187299.com/archives/category/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://www.187299.com</link>
	<description>寻觅生命中的那一片浅草......</description>
	<lastBuildDate>Wed, 16 Nov 2011 11:25:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>使用Apache的Rewrite和Proxy实现跨主机透明转发</title>
		<link>http://www.187299.com/archives/1443</link>
		<comments>http://www.187299.com/archives/1443#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:27:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1443</guid>
		<description><![CDATA[PHPChina网友需求：123.badu.com 自动转向www.baidu.com/123 并且保持域名还是123.baidu.com 地址：http://bbs.phpchina.com/thread-169014-1-1.html 经过摸索，终于找到了实现方法，就是通过使用Apache的Rewrite和Proxy实现... ]]></description>
			<content:encoded><![CDATA[<p>PHPChina网友需求：123.badu.com 自动转向www.baidu.com/123 并且保持域名还是123.baidu.com</p>
<p>地址：http://bbs.phpchina.com/thread-169014-1-1.html</p>
<p>经过摸索，终于找到了实现方法，就是通过使用Apache的Rewrite和Proxy实现跨主机透明转发，不改变地址栏的URL网址。</p>
<p>下面是实现步骤：</p>
<p>1. 在123.baidu.com的.htaccess文件中开启重写规则：</p>
<p>RewriteEngine On<br />
RewriteRule ^(.*)$  http://www.baidu.com/123/$1 [P,L]</p>
<p>2. 在Apache的配置文件中开启以下模块：</p>
<p>mod_rewrite.so<br />
mod_proxy.so<br />
mod_proxy_http.so</p>
<p>3. 重启Apache服务器，载入最新的配置。</p>
<p>转载自：http://hi.baidu.com/fising/blog/item/54fa5bafbd1840f0faed507e.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1443/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTTP请求流程（二）----Telnet模拟HTTP请求</title>
		<link>http://www.187299.com/archives/1259</link>
		<comments>http://www.187299.com/archives/1259#comments</comments>
		<pubDate>Sun, 11 Oct 2009 03:03:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.187299.com/archives/1259</guid>
		<description><![CDATA[上一部分"流程简介"， 我们大致了解了下HTTP请求的流程，这一篇我向大家介绍下如何利用Telnet来模拟Http请求---访问百度。 我们直接开始吧！ 1、打开"运行"-&#62;cmd进入命令环境； 2、输入"telnet ... ]]></description>
			<content:encoded><![CDATA[<p>上一部分"<span style="font-family: Verdana;"><a href="http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html"><span style="font-family: Verdana;">流程简介</span></a>"， 我们大致了解了下HTTP请求的流程，这一篇我向大家介绍下如何利用Telnet来模拟Http请求---访问百度。<br />
我们直接开始吧！<br />
1、打开"运行"-&gt;cmd进入命令环境；<br />
2、输入"telnet www.baidu.com 80"，回车后 ,屏幕为全黑，此时我们利用快捷键"Ctrl+](右中括号)"来打开本地回显功能，这样我们就可以看见我们所打的东西了，如图：（注本阶段执行过程和以 下的过程均要求操作时间尽可能短，因为时间一长，便会被认为断开连接。）</p>
<div><img src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp1.jpg" border="0" alt="" width="261" height="125" /></div>
<p>3、单击回车，进行编辑状态。<br />
4、输入："<span style="font-family: Verdana;">GET / HTTP/1.1"后回车,在第二段接着输入："HOST:"然后按回车，这样一个简单的HTTP请求就完成了，接着我人只要再按下回车，便向服务器递交 这个请求了。如图：（我们来看一下这个是什么意思：GET表示请求方式，/表示请求的根目录下的文件，HTTP/1.1表示HTTP协议版本，HOST就 是一个消息头，据某些朋友说1.1的版本一定要加一个"HOST:"可是我实验后发现"HOST :"不加仍旧可以正常发送请求，但是GET HTTP这个必须大写，否则就该请求无法发送）<br />
</span></p>
<div><img style="width: 168px; height: 89px;" src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp2.jpg" border="0" alt="" width="168" height="89" /></div>
<p>5、接收服务器返回，这步其实不需要我们来做，因为当我们发送请求后，只需几秒钟，我们便会收到来自服务器反应.</p>
<div><img src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp3.jpg" border="0" alt="" /></div>
<div>6、这样,请求就算完成了。下面我们在百度中搜一下"1",浏览器中的地址应该是:<span style="font-family: Verdana;">http://www.baidu.com/s?wd=1.</span>看看请求是怎么样的</p>
<div><img src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp4.jpg" border="0" alt="" /></div>
</div>
<p>怎么样，大家会了吗？以上只是用GET方式进行请求，当然还可以用POST方式进行请求，只是POST我这不方便做实验，所以就不写了。大概的格式给大家参考下：<br />
POST /localhost/login.aspx HTTP/1.1<br />
HOST:<br />
Content-Type:application/x-www-form-urlencoded<br />
Content-Length:10</p>
<p>uid=xxxxxx</p>
<p><span style="font-family: Verdana;"><span style="color: #000000;">参考：<br />
</span>1.张孝祥老师的HTTP协议详解<br />
2.关于HTTP的请求头可以参考：<a href="http://hi.baidu.com/%C3%8A%C2%AB%C3%95%C2%B9/blog/item/13c2e3ddb3a133ee77c638cd.html">http://hi.baidu.com/Ê«Õ¹/blog/item/13c2e3ddb3a133ee77c638cd.html</a></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1259/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决TIME_WAIT连接太多</title>
		<link>http://www.187299.com/archives/1230</link>
		<comments>http://www.187299.com/archives/1230#comments</comments>
		<pubDate>Wed, 16 Sep 2009 15:45:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1230</guid>
		<description><![CDATA[小转一篇，出处未知。 前言：经常检查Apache的连接数，同样会发现很多无用的Time_Wait连接。有人说这是正常的，是因为一个请求中途中断造成的;还有人说微 软的 IE连接时产生的Time_wait会比用Fi... ]]></description>
			<content:encoded><![CDATA[<div>
<p>小转一篇，出处未知。</p>
<p>前言：经常检查Apache的连接数，同样会发现很多无用的Time_Wait连接。有人说这是正常的，是因为一个请求中途中断造成的;还有人说微 软的  IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的，如果超过了连接数的比例就不是很  正常，所以还是找来方法解决一下。</p>
<p>检查net.ipv4.tcp_tw当前值，将当前的值更改为1分钟：<br />
[root@aaa1  ~]# sysctl -a|grep net.ipv4.tcp_tw<br />
net.ipv4.tcp_tw_reuse =  0<br />
net.ipv4.tcp_tw_recycle = 0<br />
[root@aaa1 ~]#</p>
<p>vi  /etc/sysctl<br />
增加或修改net.ipv4.tcp_tw值：<br />
net.ipv4.tcp_tw_reuse =  1<br />
net.ipv4.tcp_tw_recycle = 1</p>
<p>使内核参数生效：<br />
[root@aaa1 ~]# sysctl  -p</p>
<p>[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw<br />
net.ipv4.tcp_tw_reuse  = 1<br />
net.ipv4.tcp_tw_recycle = 1</p>
<p>设置这两个参数：  reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接； recyse是加速TIME-WAIT  sockets回收</p>
<p>用netstat再观察正常<br />
这里解决问题的关键是如何能够重复利用time_wait的值，我们可以设置时检查一下time和wait的值<br />
#sysctl  -a | grep time | grep  wait<br />
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait =  120<br />
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait =  60<br />
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait =  120</p>
<p>这样的现象实际是正常的，有时和访问量大有关，设置这两个参数：  reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接； recyse是加速TIME-WAIT  sockets回收</p>
<p>说明：<br />
net.ipv4.tcp_syncookies = 1 表示开启SYN  Cookies。当出现SYN等待队列溢出时，</p>
<div>启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br />
net.ipv4.tcp_tw_reuse  = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br />
net.ipv4.tcp_tw_recycle  = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭。<br />
net.ipv4.tcp_fin_timeout = 30  表示如果套接字由本端要求关闭，这个参数决定了它保持在FIN-WAIT-2状态的时间。<br />
net.ipv4.tcp_keepalive_time = 1200  表示当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时，改为20分钟。<br />
net.ipv4.ip_local_port_range  = 1024 65000  表示用于向外连接的端口范围。缺省情况下很小：32768到61000，改为1024到65000。<br />
net.ipv4.tcp_max_syn_backlog  = 8192 表示SYN队列的长度，默认为1024，加大队列长度为8192，可以容纳更多等待连接的网络连接数。<br />
net.ipv4.tcp_max_tw_buckets = 5000  表示系统同时保持TIME_WAIT套接字的最大数量，如果超过这个数字，TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000，改  为5000。对于Apache、Nginx等服务器，上几行的参数可以很好地减少TIME_WAIT套接字数量，但是对于Squid，效果却不大。此项参  数可以控制TIME_WAIT套接字的最大数量，避免Squid服务器被大量的TIME_WAIT套接字拖死。</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1230/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>查看Apache并发请求数及其TCP连接状态</title>
		<link>http://www.187299.com/archives/1112</link>
		<comments>http://www.187299.com/archives/1112#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:45:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1112</guid>
		<description><![CDATA[[文章作者：张宴 本文版本：v1.1 最后修改：2007.07.27 转载请注明出处：http://blog.s135.com] 这两天搭建了一组Apache服务器，每台服务器4G内存，采用的是prefork模式，一开始设置的连接数太少了，需... ]]></description>
			<content:encoded><![CDATA[<p>[文章作者：张宴 本文版本：v1.1 最后修改：2007.07.27 转载请注明出处：http://blog.s135.com]</p>
<p>这两天搭建了一组Apache服务器，每台服务器4G内存，采用的是prefork模式，一开始设置的连接数太少了，需要较长的时间去响应用户的请求，后来修改了一下Apache 2.0.59的配置文件httpd.conf：<br />
引用<br />
# 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</p>
<p>StartServers         10<br />
MinSpareServers      10<br />
MaxSpareServers      15<br />
ServerLimit          2000<br />
MaxClients           2000<br />
MaxRequestsPerChild  10000</p>
<p>查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：<br />
Linux命令：<br />
引用<br />
ps -ef | grep httpd | wc -l</p>
<p>返回结果示例：<br />
1388<br />
表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整，我这组服务器中每台的峰值曾达到过2002。</p>
<p>查看Apache的并发请求数及其TCP连接状态：<br />
Linux命令：<br />
引用<br />
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</p>
<p>（这条语句是从新浪互动社区事业部技术总监王老大那儿获得的，非常不错）<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表示处理完毕，等待超时结束的请求数。</p>
<p>关于TCP状态的变迁，可以从下图形象地看出：<br />
点击在新窗口中浏览此图片<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：等待所有分组死掉</p>
<p>转载自：<a href="http://blog.s135.com/post/269/" target="_blank">http://blog.s135.com/post/269/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webserver维护常用命令</title>
		<link>http://www.187299.com/archives/1108</link>
		<comments>http://www.187299.com/archives/1108#comments</comments>
		<pubDate>Fri, 24 Jul 2009 13:25:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1108</guid>
		<description><![CDATA[实时查看正在执行的sql语句 1./usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 &#124; strings &#124; egrep -i 'SELECT&#124;UPDATE&#124;DELETE&#124;INSERT&#124;SET&#124;COMMIT&#124;ROLLBACK&#124;CREATE &#124;DROP&#124;ALTER&#124;CALL' 查看h... ]]></description>
			<content:encoded><![CDATA[<p>实时查看正在执行的sql语句<br />
1./usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i</p>
<p>'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE</p>
<p>|DROP|ALTER|CALL'</p>
<p>查看http连接</p>
<p>1.netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'</p>
<p>查看SYN状态的http连接</p>
<p>1.netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more</p>
<p>查看TIME_WAIT状态的http连接</p>
<p>1.netstat -tna | cut -b 49- |grep TIME_WAIT | sort |more<br />
2.netstat -an | grep TIME_WAIT | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more</p>
<p>查看ESTABLISHED状态的http连接</p>
<p>1.netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more<br />
2.netstat -an | grep ":80" | grep ESTABLISHED | sort | more</p>
<p>批量kill进程</p>
<p>1.ps -efww|grep sqlr-listener|grep -v grep|cut -c 9-15|xargs kill -9</p>
<p>查看活动的php-cgi连接数</p>
<p>1.netstat -anpo|grep php-cgi|wc -l</p>
<p>按ip查看httpd连接数</p>
<p>1.netstat -anlp | grep 80 | grep tcp | awk {'print $5'} | awk -F: {'print $1'}| sort |uniq -c | sort -nr</p>
<p>禁IP</p>
<p>1.iptables -A INPUT -s IP地址 -j REJECT<br />
2.iptables -A INPUT -s IP地址/24 -j REJECT<br />
3.<br />
4.route add -net IP地址 netmask 255.255.255.0 reject</p>
<p>调试命令</p>
<p>1.strace -p pid</p>
<p>跟踪指定的进程pid.</p>
<p>1.gdb -p pid</p>
<p>跟踪指定的进程pid.</p>
<p>批量查找文件并删除</p>
<p>1.find . -name test.php -exec rm {} \;<br />
2.find . -name test.php | xargs rm -rf</p>
<p>更改某一目录下所有目录的权限, 不包括文件, aaa 是目录名</p>
<p>1.find aaa -type d -exec chmod 755 {} \;</p>
<p>替换文件内容</p>
<p>1.sed -i 's/b/strong/g' index.html</p>
<p>此命令搜索 index.html 文件中的 b 并将其替换为 strong。</p>
<p>转载自：<a href="www.lostk.com/blog/linux_webserver_cmd/" target="_blank">www.lostk.com/blog/linux_webserver_cmd/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1108/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP程序页面打开空白</title>
		<link>http://www.187299.com/archives/1090</link>
		<comments>http://www.187299.com/archives/1090#comments</comments>
		<pubDate>Sat, 27 Jun 2009 05:35:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1090</guid>
		<description><![CDATA[已经遇到过两次了，打开一片空白，没有任何提示。 1次是Discuz！首页打开时一片空白，但UCenter又可以打开，登录进后台stat index.php，发现文件的修改日期有问题，被修改日期是6月16日，论坛改... ]]></description>
			<content:encoded><![CDATA[<p>已经遇到过两次了，打开一片空白，没有任何提示。</p>
<p>1次是Discuz！首页打开时一片空白，但UCenter又可以打开，登录进后台stat index.php，发现文件的修改日期有问题，被修改日期是6月16日，论坛改版做好后，很久没有修改过这些文件了。估计是被人入侵了！网上有说是编码问题。难道别人把我文件的编码修改了？查看了下备份目录，刚好在6月13日有个备份，把它解压缩出来，覆盖掉原来的，一切恢复正常。</p>
<p>2次是朋友的一个很简单的站，打开是一个空白页面，对比过配置文件，发现跟其他站点的配置一样，怀疑会不会是程序不能在二级目录下运行，就把该主机的根目录设置为那二级目录，结果打开还是不行，又改回来，查看了Nginx的日志，没有错。最后去程序官方，重新下载了一个，直接在服务器上解压缩，再访问，一切正常。注意啊！估计是从Windows传文件上去时，文件出现的问题。无论是SFTP还是FTP，都记得要用binary（二进制）方式上传。这样是最保险的！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1090/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>同时连接数需求量计算公式</title>
		<link>http://www.187299.com/archives/1063</link>
		<comments>http://www.187299.com/archives/1063#comments</comments>
		<pubDate>Thu, 25 Jun 2009 07:07:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1063</guid>
		<description><![CDATA[记不清是从那位兄弟伙的blog中看到这个公式，觉得很有用 每日PV数 / 86400秒 * 10个派生连接数 * 5秒内响应 * 5倍峰值) / Web服务器台数 = 同时连接数 转载自：http://www.ynog.com/index.php/archives/29... ]]></description>
			<content:encoded><![CDATA[<p>记不清是从那位兄弟伙的blog中看到这个公式，觉得很有用</p>
<p>每日PV数 / 86400秒 * 10个派生连接数 * 5秒内响应 * 5倍峰值) / Web服务器台数 = 同时连接数</p>
<p>转载自：<a href="http://www.ynog.com/index.php/archives/296" target="_blank">http://www.ynog.com/index.php/archives/296</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1063/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Awstats注意问题</title>
		<link>http://www.187299.com/archives/1041</link>
		<comments>http://www.187299.com/archives/1041#comments</comments>
		<pubDate>Wed, 24 Jun 2009 13:47:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[MS]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1041</guid>
		<description><![CDATA[很久以前把Apache的日志下载回来用awstats分析，先分析前天的日志，然后分析昨天的， 执行以下命令： C:\Program Files\AWStats\wwwroot\cgi-bin>awstats.pl -config=localhost 刷新浏览器页面，发现还是前天的数... ]]></description>
			<content:encoded><![CDATA[<p>很久以前把Apache的日志下载回来用awstats分析，先分析前天的日志，然后分析昨天的，</p>
<p>执行以下命令：</p>
<p>C:\Program Files\AWStats\wwwroot\cgi-bin>awstats.pl -config=localhost</p>
<p>刷新浏览器页面，发现还是前天的数据</p>
<p>经过一番查找，发现</p>
<p>C:\Program Files\AWStats\wwwroot\cgi-bin>awstats.pl -config=localhost</p>
<p>当运行此命令后，命令会生成一个txt文件，C:\Program Files\AWStats\wwwroot\cgi-bin\awstats112008.localhost.txt<br />
如果修改了access_log，需要先删除该awstats112008.localhost.txt（如果需要保留，则将其改名），再运行awstats.pl -config=localhost，这样，通过浏览器才能查看最新的日志</p>
<p>以上说法未必对，有待求证，有可能是awstats只允许按月来分析，而不允许整年地分析，才会导致无法update，试下加全年参数？</p>
<p>另外，要修改awstats.pl里perl命令的路径，因为它默认是类nix的路径，所以要把它修改为Windows下perl的安装路径</p>
<p>当然也用awstats来分析maillog，要先运行一个转换程序，忘了，太久了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1041/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apache2关于libphp5.so的permission denied的解决方法</title>
		<link>http://www.187299.com/archives/993</link>
		<comments>http://www.187299.com/archives/993#comments</comments>
		<pubDate>Thu, 18 Jun 2009 17:07:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=993</guid>
		<description><![CDATA[今天弄一个CentOS,安装httpd-2.2.8 和php-5.2.5，一切顺利。 最后一步重新启动apache报如下错误: httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/... ]]></description>
			<content:encoded><![CDATA[<p>今天弄一个CentOS,安装httpd-2.2.8 和php-5.2.5，一切顺利。<br />
最后一步重新启动apache报如下错误:<br />
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied</p>
<p>原因：是Linux有一个SELinux保护模式引起的。</p>
<p>解决办法：</p>
<p>1关闭SELINUX的方法:<br />
vi /etc/selinux/config 将SELINUX=enforcing 改成SELINUX=disabled 需要重启<br />
这个方法可能会对服务器带来风险。</p>
<p>2不关闭SELINUX的方法:<br />
# setenforce 0<br />
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so<br />
# service httpd restart<br />
# setenforce 1</p>
<p>转载自：<a href="http://hi.baidu.com/shengit/blog/item/9d4da12b3b682993033bf6a2.html" target="_blank">http://hi.baidu.com/shengit/blog/item/9d4da12b3b682993033bf6a2.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/993/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache的prefork模式和worker模式</title>
		<link>http://www.187299.com/archives/935</link>
		<comments>http://www.187299.com/archives/935#comments</comments>
		<pubDate>Sun, 24 May 2009 15:27:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=935</guid>
		<description><![CDATA[prefork模式 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器，它的工作方式类似于Apache 1.3。它适合于没有线程安全库，需要避免线程兼容性问题的系统。它是要求将每个请求相... ]]></description>
			<content:encoded><![CDATA[<p>prefork模式<br />
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器，它的工作方式类似于Apache 1.3。它适合于没有线程安全库，需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM，这样若一个请求出现问题就不会影响到其他请求。</p>
<p>这个MPM具有很强的自我调节能力，只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰，同时又不能太大，以致需要使用的内存超出物理内存的大小。</p>
<p>worker模式<br />
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求，所以可以处理海量请求，而系统资源的开销小于基于进程的MPM。但是，它也使用了多进程，每个进程又有多个线程，以获得基于进程的MPM的稳定性。</p>
<p>控制这个MPM的最重要的指令是，控制每个子进程允许建立的线程数的ThreadsPerChild指令，和控制允许建立的总线程数的MaxClients指令。<br />
<span id="more-935"></span>prefork和worker模式的切换<br />
1.将当前的prefork模式启动文件改名<br />
mv httpd httpd.prefork<br />
2.将worker模式的启动文件改名<br />
mv httpd.worker httpd<br />
3.修改Apache配置文件<br />
vi /usr/local/apache2/conf/extra/httpd-mpm.conf<br />
找到里边的如下一段，可适当修改负载等参数：<br />
&lt;IfModule mpm_worker_module&gt;<br />
StartServers 2<br />
MaxClients 150<br />
MinSpareThreads 25<br />
MaxSpareThreads 75<br />
ThreadsPerChild 25<br />
MaxRequestsPerChild 0<br />
&lt;/IfModule&gt;<br />
4.重新启动服务<br />
/usr/local/apache2/bin/apachectl restart<br />
即可换成worker方式启动apache2</p>
<p>处于稳定性和安全性考虑，不建议更换apache2的运行方式，使用系统默认prefork即可。另外很多php模块不能工作在worker模式下，例如redhat linux自带的php也不能支持线程安全。所以最好不要切换工作模式。</p>
<p>prefork和worker模式的比较<br />
prefork模式使用多个子进程，每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上，Prefork MPM在效率上要比Worker MPM要高，但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势：它可以使用那些没有处理好线程安全的第三方模块，并且对于那些线程调试困难的平台而言，它也更容易调试一些。</p>
<p>worker模式使用多个子进程，每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说，在一个高流量的HTTP服务器上，Worker MPM是个比较好的选择，因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方，如果一个线程崩溃，整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间，所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。</p>
<p>总的来说，prefork方式速度要稍高于worker，然而它需要的cpu和memory资源也稍多于woker。</p>
<p>prefork模式配置详解<br />
&lt;IfModule mpm_prefork_module&gt;<br />
ServerLimit 256<br />
StartServers 5<br />
MinSpareServers 5<br />
MaxSpareServers 10<br />
MaxClients 256<br />
MaxRequestsPerChild 0<br />
&lt;/IfModule&gt;<br />
ServerLimit<br />
默认的MaxClient最大是256个线程,如果想设置更大的值，就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大，则必须编译apache,此前都是不需要重新编译Apache。<br />
生效前提：必须放在其他指令的前面</p>
<p>StartServers<br />
指定服务器启动时建立的子进程数量，prefork默认为5。</p>
<p>MinSpareServers<br />
指定空闲子进程的最小数量，默认为5。如果当前空闲子进程数少于MinSpareServers ，那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。</p>
<p>MaxSpareServers<br />
设置空闲子进程的最大数量，默认为10。如果当前有超过MaxSpareServers数量的空闲子进程，那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小，Apache将会自动将其修改成”MinSpareServers+1″。</p>
<p>MaxClients<br />
限定同一时间客户端最大接入请求的数量(单个进程并发线程数)，默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放，队列中的请求将得到服务。要增大这个值，你必须同时增大ServerLimit。</p>
<p>MaxRequestsPerChild<br />
每个子进程在其生存期内允许伺服的最大请求数量，默认为10000.到达MaxRequestsPerChild的限制后，子进程将会结束。如果MaxRequestsPerChild为”0″，子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处：<br />
1.可以防止(偶然的)内存泄漏无限进行，从而耗尽内存。<br />
2.给进程一个有限寿命，从而有助于当服务器负载减轻的时候减少活动进程的数量。</p>
<p>worker模式配置详解<br />
&lt;IfModule mpm_worker_module&gt;<br />
StartServers 2<br />
MaxClients 150<br />
MinSpareThreads 25<br />
MaxSpareThreads 75<br />
ThreadsPerChild 25<br />
MaxRequestsPerChild 0<br />
&lt;/IfModule&gt;</p>
<p>StartServers<br />
服务器启动时建立的子进程数，默认值是”3″。</p>
<p>MaxClients<br />
允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是”400″,16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候，你必须同时增加ServerLimit的值。</p>
<p>MinSpareThreads<br />
最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少，子进程将产生新的空闲线程。</p>
<p>MaxSpareThreads<br />
设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多，子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值：worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。</p>
<p>ThreadsPerChild<br />
每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。</p>
<p>MaxRequestsPerChild<br />
设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后，子进程将会结束。如果MaxRequestsPerChild为”0″，子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处：<br />
1.可以防止(偶然的)内存泄漏无限进行，从而耗尽内存。<br />
2.给进程一个有限寿命，从而有助于当服务器负载减轻的时候减少活动进程的数量。<br />
注意对于KeepAlive链接，只有第一个请求会被计数。事实上，它改变了每个子进程限制最大链接数量的行为。</p>
<p>Tag: Apache, 调优, 优化</p>
<p>kimi at 2008-08-21 01:16:21 in Apache</p>
<p>版权声明：原创作品，欢迎转载，转载时请务必以超链接形式标明文章原始地址、作者信息和本声明。</p>
<p>转载自：<a href="http://www.ccvita.com/339.html" target="_blank">http://www.ccvita.com/339.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/935/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

