<?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>GzV8.com &#187; Apache</title>
	<atom:link href="http://www.gzv8.com/archives/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gzv8.com</link>
	<description>互联网引擎</description>
	<lastBuildDate>Thu, 06 Jan 2011 04:08:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Apache CPU 无端端卡住在 100%</title>
		<link>http://www.gzv8.com/archives/229</link>
		<comments>http://www.gzv8.com/archives/229#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:35:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[100%]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[eaccelerator]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[卡]]></category>
		<category><![CDATA[慢]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=229</guid>
		<description><![CDATA[这个问题实在好怪，折腾了的一个多月。
情况是这样的：
新配了一台服务器，全新 RedHat 5.4 X64 的OS ，Intel 5500系列的CPU
Apache 2.2.14  + PHP 5.2.6 + Zend 3.3.x + eaccelerator 0.9.4
每到了一段时间，八核CPU就会有2核 始终恒定在 100% 占用进程是 httpd 即 apache
由于还有其他6核的资源，所以访问没有任何影响。
找了好久原因，一度怀疑是 mod_mpm 的问题，调整了无数次参数。
后来由于流量越来越高，出现的频率越来越频繁，差不多2天就又变成这样了。
查看 error_log 看到不断有提示：
child pid ***** exit signal Segmentation fault (11)
child pid ***** exit signal Segmentation fault (11)
child pid ***** exit signal Segmentation fault (11)
重启 Apache 的时候还更会一堆过来。
好不容易找到原因，原来是因为 PHP 加速器 eaccelerator 0.9.4 跟 [...]]]></description>
			<content:encoded><![CDATA[<p>这个问题实在好怪，折腾了的一个多月。<br />
情况是这样的：</p>
<p>新配了一台服务器，全新 RedHat 5.4 X64 的OS ，Intel 5500系列的CPU<br />
Apache 2.2.14  + PHP 5.2.6 + Zend 3.3.x + eaccelerator 0.9.4</p>
<p>每到了一段时间，八核CPU就会有2核 始终恒定在 100% 占用进程是 httpd 即 apache<br />
由于还有其他6核的资源，所以访问没有任何影响。<br />
找了好久原因，一度怀疑是 mod_mpm 的问题，调整了无数次参数。<br />
后来由于流量越来越高，出现的频率越来越频繁，差不多2天就又变成这样了。<br />
查看 error_log 看到不断有提示：</p>
<p>child pid ***** exit signal Segmentation fault (11)<br />
child pid ***** exit signal Segmentation fault (11)<br />
child pid ***** exit signal Segmentation fault (11)</p>
<p>重启 Apache 的时候还更会一堆过来。<br />
好不容易找到原因，原来是因为 PHP 加速器 eaccelerator 0.9.4 跟 As5.4 X64 内核的兼容有问题。<br />
之前在 As5.3 X64 上是完全正常的</p>
<p>于是下载了最新的 eaccelerator V0.9.6<br />
重新编译 eaccelerator 升级覆盖，问题解决！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/229/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>合理设置apache httpd的最大连接数</title>
		<link>http://www.gzv8.com/archives/218</link>
		<comments>http://www.gzv8.com/archives/218#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:29:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[MaxClients]]></category>
		<category><![CDATA[MaxRequestsPerChild]]></category>
		<category><![CDATA[MinSpareServers]]></category>
		<category><![CDATA[mpm]]></category>
		<category><![CDATA[ServerLimit]]></category>
		<category><![CDATA[StartServers]]></category>
		<category><![CDATA[最大]]></category>
		<category><![CDATA[连接数]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=218</guid>
		<description><![CDATA[合理设置apache httpd的最大连接数
转载自：http://hi.baidu.com/rainchen/blog/item/095f0a551fa802c5b645ae46.html





手头有一个网站在线人数增多，访问时很慢。初步认为是服务器资源不足了，但经反复测试，一旦连接上，不断点击同一个页面上不同的链接，都能迅速打开，这种现象就是说明apache最大连接数已经满了，新的访客只能排队等待有空闲的链接，而如果一旦连接上，在keeyalive 的存活时间内（KeepAliveTimeout，默认5秒）都不用重新打开连接，因此解决的方法就是加大apache的最大连接数。
1.在哪里设置？
服务器的为FreeBSD 6.2 ，apache 2.24，使用默认配置（FreeBSD 默认不加载自定义MPM配置），默认最大连接数是250
在/usr/local/etc/apache22/httpd.conf中加载MPM配置（去掉前面的注释）：
# Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf
可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf，但里面根据httpd的工作模式分了很多块，哪一部才是当前httpd的工作模式呢？可通过执行 apachectl -l 来查看：
Compiled in modules:
              core.c
              prefork.c
              http_core.c
              mod_so.c
看到prefork 字眼，因此可见当前httpd应该是工作在prefork模式，prefork模式的默认配置是：
&#60;IfModule mpm_prefork_module&#62;
                StartServers                      5
                MinSpareServers                   5
                MaxSpareServers                  10
                MaxClients                      150
                MaxRequestsPerChild               0
&#60;/IfModule&#62;
2.要加到多少？
连接数理论上当然是支持越大越好，但要在服务器的能力范围内，这跟服务器的CPU、内存、带宽等都有关系。
查看当前的连接数可以用：
ps aux &#124; grep httpd &#124; wc -l
或：
pgrep httpd&#124;wc -l
计算httpd占用内存的平均数:
ps aux&#124;grep -v grep&#124;awk &#8216;/httpd/{sum+=$6;n++};END{print sum/n}&#8217;
由于基本都是静态页面，CPU消耗很低，每进程占用内存也不算多，大约200K。
服务器内存有2G，除去常规启动的服务大约需要500M（保守估计），还剩1.5G可用，那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368
约8K个进程，支持2W人同时访问应该是没有问题的（能保证其中8K的人访问很快，其他的可能需要等待1、2秒才能连上，而一旦连上就会很流畅）
控制最大连接数的MaxClients ，因此可以尝试配置为：
&#60;IfModule mpm_prefork_module&#62;
                StartServers                      5
                MinSpareServers                   5
                [...]]]></description>
			<content:encoded><![CDATA[<div>合理设置<a onclick="tagshow(event, 'apache');" href="javascript:;" target="_self"><strong>apache</strong></a> httpd的最大连接数</div>
<div><a onclick="tagshow(event, '%D7%AA%D4%D8');" href="javascript:;" target="_self"><strong>转载</strong></a>自：<a href="http://hi.baidu.com/rainchen/blog/item/095f0a551fa802c5b645ae46.html">http://hi.baidu.com/rainchen/blog/item/095f0a551fa802c5b645ae46.html</a></div>
<table border="0">
<tbody>
<tr>
<td>
<div id="blog_text">
<p>手头有一个网站在线人数增多，访问时很慢。初步认为是服务器资源不足了，但经反复<a onclick="tagshow(event, '%B2%E2%CA%D4');" href="javascript:;" target="_self"><strong>测试</strong></a>，一旦连接上，不断点击同一个页面上不同的链接，都能迅速打开，这种现象就是说明apache最大连接数已经满了，新的访客只能排队等待有空闲的链接，而如果一旦连接上，在keeyalive 的存活时间内（KeepAliveTimeout，默认5秒）都不用重新打开连接，因此解决的方法就是加大apache的最大连接数。</p>
<p>1.在哪里设置？</p>
<p>服务器的为FreeBSD 6.2 ，apache 2.24，使用默认配置（FreeBSD 默认不加载<a href="http://httpd.apache.org/docs/2.2/mod/mpm_common.html" target="_blank">自定义MPM配置</a>），默认最大连接数是250</p>
<p>在/usr/local/etc/apache22/httpd.conf中加载MPM配置（去掉前面的注释）：<br />
# Server-pool management (MPM specific)<br />
Include etc/apache22/extra/httpd-mpm.conf</p>
<p>可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf，但里面根据httpd的<a onclick="tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target="_self"><strong>工作</strong></a>模式分了很多块，哪一部才是当前httpd的工作模式呢？可通过执行 apachectl -l 来查看：<br />
Compiled in modules:<br />
              core.c<br />
              prefork.c<br />
              http_core.c<br />
              mod_so.c</p>
<p>看到prefork 字眼，因此可见当前httpd应该是工作在prefork模式，prefork模式的默认配置是：<br />
&lt;IfModule mpm_prefork_module&gt;<br />
                StartServers                      5<br />
                MinSpareServers                   5<br />
                MaxSpareServers                  10<br />
                MaxClients                      150<br />
                MaxRequestsPerChild               0<br />
&lt;/IfModule&gt;</p>
<p>2.要加到多少？</p>
<p>连接数理论上当然是支持越大越好，但要在服务器的能力范围内，这跟服务器的CPU、内存、带宽等都有关系。</p>
<p>查看当前的连接数可以用：<br />
ps aux | grep httpd | wc -l</p>
<p>或：<br />
pgrep httpd|wc -l</p>
<p>计算httpd占用内存的平均数:<br />
ps aux|grep -v grep|awk &#8216;/httpd/{sum+=$6;n++};END{print sum/n}&#8217;</p>
<p>由于基本都是静态页面，CPU消耗很低，每进程占用内存也不算多，大约200K。</p>
<p>服务器内存有2G，除去常规启动的服务大约需要500M（保守估计），还剩1.5G可用，那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368</p>
<p>约8K个进程，支持2W人同时访问应该是没有问题的（能保证其中8K的人访问很快，<a onclick="tagshow(event, '%C6%E4%CB%FB');" href="javascript:;" target="_self"><strong>其他</strong></a>的可能需要等待1、2秒才能连上，而一旦连上就会很流畅）</p>
<p>控制最大连接数的MaxClients ，因此可以尝试配置为：<br />
&lt;IfModule mpm_prefork_module&gt;<br />
                StartServers                      5<br />
                MinSpareServers                   5<br />
                MaxSpareServers                  10<br />
                ServerLimit                    5500<br />
                MaxClients                     5000<br />
                MaxRequestsPerChild               100<br />
&lt;/IfModule&gt;</p>
<p>注意，MaxClients默认最大为250，若要超过这个值就要显式设置ServerLimit，且ServerLimit要放在MaxClients之前，值要不小于MaxClients，不然重启httpd时会有提示。</p>
<p>重启httpd后，通过反复执行pgrep httpd|wc -l 来观察连接数，可以看到连接数在达到MaxClients的设值后不再增加，但此时访问网站也很流畅，那就不用贪心再设置更高的值了，不然以后如果网站访问突增不小心就会耗光服务器内存，可根据以后访问压力趋势及内存的占用变化再逐渐调整，直到找到一个最优的设置值。</p>
<p>(MaxRequestsPerChild不能设置为0，可能会因内存泄露导致服务器崩溃）</p>
<p><a href="http://www.chedong.com/tech/apache_install.html#scale" target="_blank">更佳最大值计算的公式</a>：</p>
<p>apache_max_process_with_good_perfermance &lt; (total_hardware_memory / apache_memory_per_process ) * 2<br />
apache_max_process = apache_max_process_with_good_perfermance * 1.5</p>
</div>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/218/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>分享一个 Nginx + Apache 公用 80 端口的配置方案。</title>
		<link>http://www.gzv8.com/archives/181</link>
		<comments>http://www.gzv8.com/archives/181#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:10:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[80 端口]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=181</guid>
		<description><![CDATA[一个典型的 Nginx + Apache 应用方案可以是
Nginx 占用 80 端口，过滤静态请求，然后动态请求即 Proxy 到 Apache 的 8080 端口。
Proxy 反向代理的好处是访问的时候，始终就是 80 端口，来访者不会觉察到有任何的区别。
但有的应用确非常“聪明”，识别到 Apache 所位于的端口是 8080 ，就会把相关的超链接都一并加上 :8080 的后续。这么就死定了，还能有正常访问麽？！
有个方法可以解决这事，就是把 apache 也运行在80端口上。
同一台服务器，有Nginx 也有 Apache，2个httpd服务，都是80，不会冲突麽？
下边就是举例方法。
Nginx.conf 的配置中
server {
listen 80;
server_name www.ABC.com;
}
修改一下。
server {
listen 192.168.3.3:80;       #指定Nginx只占用某个IP的80端口。
listen 192.168.10.3:80;           #如果你服务器中有多个IP，还可以指定多个。
server_name www.ABC.com;
}
如果你在Nginx有多个虚拟主机，每一个都需要这么修改。
然后轮到 apache 的 httpd.conf
把原来的
Listen 80
改为
Listen 127.0.0.1:80
跟Nginx一样，指定apache所占用的IP及端口。
保存退出，重启apache即可生效。
如果你 apache 上也有多个虚拟主机。无需好像Nginx那样逐一修改，只要都是 80 端口既可。
如：
NameVirtualHost *:80
&#60;VirtualHost *:80&#62;
    ServerAdmin hello@abc.com
    DocumentRoot /data/web_server/admin
    ServerName www.ABC.com
&#60;/VirtualHost&#62;
这样，Nginx 跟 Apache [...]]]></description>
			<content:encoded><![CDATA[<p>一个典型的 Nginx + Apache 应用方案可以是</p>
<p>Nginx 占用 80 端口，过滤静态请求，然后动态请求即 Proxy 到 Apache 的 8080 端口。<br />
Proxy 反向代理的好处是访问的时候，始终就是 80 端口，来访者不会觉察到有任何的区别。</p>
<p>但有的应用确非常“聪明”，识别到 Apache 所位于的端口是 8080 ，就会把相关的超链接都一并加上 :8080 的后续。这么就死定了，还能有正常访问麽？！</p>
<p>有个方法可以解决这事，就是把 apache 也运行在80端口上。<br />
同一台服务器，有Nginx 也有 Apache，2个httpd服务，都是80，不会冲突麽？</p>
<p>下边就是举例方法。</p>
<p>Nginx.conf 的配置中</p>
<p>server {</p>
<p>listen 80;<br />
server_name <a href="http://www.abc.com/">www.ABC.com</a>;</p>
<p>}</p>
<p>修改一下。</p>
<p>server {</p>
<p>listen 192.168.3.3:80;       #指定Nginx只占用某个IP的80端口。<br />
listen 192.168.10.3:80;           #如果你服务器中有多个IP，还可以指定多个。<br />
server_name <a href="http://www.abc.com/">www.ABC.com</a>;</p>
<p>}</p>
<p>如果你在Nginx有多个虚拟主机，每一个都需要这么修改。</p>
<p>然后轮到 apache 的 httpd.conf</p>
<p>把原来的</p>
<p>Listen 80</p>
<p>改为</p>
<p>Listen 127.0.0.1:80</p>
<p>跟Nginx一样，指定apache所占用的IP及端口。<br />
保存退出，重启apache即可生效。<br />
如果你 apache 上也有多个虚拟主机。无需好像Nginx那样逐一修改，只要都是 80 端口既可。</p>
<p>如：</p>
<p>NameVirtualHost *:80</p>
<p>&lt;VirtualHost *:80&gt;<br />
    ServerAdmin <a href="mailto:hello@abc.com">hello@abc.com</a><br />
    DocumentRoot /data/web_server/admin<br />
    ServerName <a href="http://www.abc.com/">www.ABC.com</a><br />
&lt;/VirtualHost&gt;</p>
<p>这样，Nginx 跟 Apache 就仅会占用指定IP的80端口，不会冲突。<br />
只要调整一下 Nginx proxy 的参数。<br />
“聪明”应用问题就能解决了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/181/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache + JK + Tomcat + 虚拟主机 架构的整合配置方式。</title>
		<link>http://www.gzv8.com/archives/158</link>
		<comments>http://www.gzv8.com/archives/158#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:00:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[jk]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=158</guid>
		<description><![CDATA[关于有虚拟主机 Apache + JK +（ tomcat1 / tomcat 2） 这么一个架构的配置方式
之前发过在回帖中，发现的人不多，现在开主题发。
步骤不多，也把各个配置的细节，用途都写出来了，新手们认真看。
首先配的是 httpd.conf 的虚拟主机配置
如下：httpd.conf 找到 #NameVirtualHost 去掉前边的 # 然后配置如下
NameVirtualHost *:80
#########################################
&#60;VirtualHost *:80&#62;
    ServerAdmin xxx@xxx.com
    DocumentRoot &#8220;/opt/webroot&#8221;
    ServerName localhost
    #ErrorLog logs/error.log
    JkMountFile conf/localhost.properties
&#60;/VirtualHost&#62;
#########################################
&#60;VirtualHost *:80&#62;
    ServerAdmin xxx@xxx.com
    DocumentRoot &#8220;/opt/web1&#8243;
    ServerAlias www.web1.com
    #ErrorLog logs/error.log
    JkMountFile conf/web1.properties   #加载mod_jk配置路径
&#60;/VirtualHost&#62;
#########################################
&#60;VirtualHost *:80&#62;
    ServerAdmin xxx@xxx.com
    DocumentRoot &#8220;/opt/web2&#8243;
    ServerAlias www.web2.com
    #ErrorLog logs/error.log
    JkMountFile conf/web2.properties  #加载mod_jk配置路径
&#60;/VirtualHost&#62;
##################################
以上配置的前提是你已经顺利编译安装好 mod_jk 模块
然后修改 mod_jk 的全局配置 httpd-jk.conf
vim conf/extra/httpd-jk.conf
LoadModule      [...]]]></description>
			<content:encoded><![CDATA[<p>关于有虚拟主机 Apache + JK +（ tomcat1 / tomcat 2） 这么一个架构的配置方式</p>
<p>之前发过在回帖中，发现的人不多，现在开主题发。</p>
<p>步骤不多，也把各个配置的细节，用途都写出来了，新手们认真看。</p>
<p>首先配的是 httpd.conf 的虚拟主机配置</p>
<p>如下：httpd.conf 找到 #NameVirtualHost 去掉前边的 # 然后配置如下</p>
<p>NameVirtualHost *:80</p>
<p>#########################################</p>
<p>&lt;VirtualHost *:80&gt;<br />
    ServerAdmin xxx@xxx.com<br />
    DocumentRoot &#8220;/opt/webroot&#8221;<br />
    ServerName localhost<br />
    #ErrorLog logs/error.log<br />
    JkMountFile conf/localhost.properties<br />
&lt;/VirtualHost&gt;</p>
<p>#########################################</p>
<p>&lt;VirtualHost *:80&gt;<br />
    ServerAdmin xxx@xxx.com<br />
    DocumentRoot &#8220;/opt/web1&#8243;<br />
    ServerAlias <a href="http://www.web1.com/">www.web1.com</a><br />
    #ErrorLog logs/error.log<br />
    JkMountFile conf/web1.properties   #加载mod_jk配置路径<br />
&lt;/VirtualHost&gt;</p>
<p>#########################################</p>
<p>&lt;VirtualHost *:80&gt;<br />
    ServerAdmin xxx@xxx.com<br />
    DocumentRoot &#8220;/opt/web2&#8243;<br />
    ServerAlias <a href="http://www.web2.com/">www.web2.com</a><br />
    #ErrorLog logs/error.log<br />
    JkMountFile conf/web2.properties  #加载mod_jk配置路径<br />
&lt;/VirtualHost&gt;</p>
<p>##################################</p>
<p>以上配置的前提是你已经顺利编译安装好 mod_jk 模块</p>
<p>然后修改 mod_jk 的全局配置 httpd-jk.conf</p>
<p>vim conf/extra/httpd-jk.conf</p>
<p>LoadModule      jk_module       modules/mod_jk.so</p>
<p>JkWorkersFile   conf/workers.properties   #指定各个配置文件路径<br />
JkMountFile     conf/urimap.properties<br />
JkLogFile       logs/mod_jk.log<br />
JkLogLevel      warn</p>
<p>&lt;Location /jkstatus&gt;    #管理页面<br />
    JkMount status<br />
&lt;/Location&gt;<br />
:wq 保存退出</p>
<p>#########################</p>
<p>然后创建各自的 web1.properties ，web2.properties 配置文件，目录路径跟 httpd.conf 相同</p>
<p># vim conf/web1.properties</p>
<p>/*=tomcat_web1 </p>
<p>!/*.gif=web1 <br />
!/*.jpg=web1<br />
!/*.png=web1<br />
!/*.html=web1<br />
!/*.htm=web1</p>
<p>#第一行的意思是把请求转往代号为 tomcat_web1(命名可与虚拟主机无关) 的 tomcat 端, 一会我们需要在 workers.properties 配置中设置。<br />
#而剩下的是不需要转往 tomcat 的请求类型, 因为 tomcat 处理静态文件性能很差, 所以这里的规则就是过滤，把静态文件处理留给apache。<br />
:wq 保存退出</p>
<p>web2.properties 的配置方式跟 web1 相同。</p>
<p>#################################</p>
<p> 编辑 jk 全局配置</p>
<p># Vim workers.properties</p>
<p>worker.list=tomcat_web1,tomcat_web2,status     #告诉 jk 你需要他统管的 tomcat 名(代号) 最后一个&#8221;status&#8221; 是jk 的管理页面</p>
<p>worker.status.type=status  #为 status 路径设置属性为管理页面。</p>
<p>############# 先配置好每个 tomcat 与 JK 的链接参数 ################<br />
worker.s1.type=ajp13    #协议类型<br />
worker.s1.host=127.0.0.1 #tomcat所在服务器的ip，如果是本机就是 127.0.0.1<br />
worker.s1.port=8108 #tomcat的端口<br />
worker.s1.lbfactor=1 #如果是均衡负载状态,多个tomcat的负载比例。</p>
<p>worker.s2.type=ajp13<br />
worker.s2.host=127.0.0.1<br />
worker.s2.port=8109<br />
worker.s2.lbfactor=1</p>
<p>############## 再配置 tomcat 与 jk 的调度 ###############</p>
<p>worker.tomcat_web1.type=lb    #lb 的意思是可集成多个tomcat均衡负载，但只有一个tomcat 的时候也可以使用。<br />
worker.tomcat_web1.balance_workers=s1  #开头的&#8221;worker.tomcat_web1&#8243;对应web1.properties的配置。这里配置群组的tomcat成员。&#8221;s1&#8243; 是成员代号。对应上边tomcat的链接参数。<br />
worker.tomcat_web1.sticky_session=True #是否打开session 粘贴。</p>
<p>worker.tomcat_web2.type=lb #意义同上<br />
worker.tomcat_web2.balance_workers=s2<br />
worker.tomcat_web2.sticky_session=True</p>
<p>:wq 配置完成后保存退出</p>
<p> ###########################</p>
<p>配置路径名：</p>
<p>编辑或创建 urimap.properties</p>
<p># vim urimap.properties</p>
<p>/*=lb         # 把请求发往 lb<br />
/jkstatus=status  # 把JK管理页面的连接定为 <a href="http://www.web1.com/jkstatus">http://www.web1.com/jkstatus</a> 或者 <a href="http://www.web2.com/jkstatus">http://www.web2.com/jkstatus</a> </p>
<p>:wq 保存退出</p>
<p>你也可以修改或创建相同目录里localhost.properties 把 管理页面链接加到里边。这么链接地址就为 <a href="http://localhost/jkstatus">http://localhost/jkstatus</a><br />
#####################</p>
<p>然后就剩下 tomcat 了</p>
<p>修改端口号对应tomcat 组这个不用说了吧？</p>
<p>最重要说的是既然在各自的 web1.properties 跟 workers.properties中配置了 tomcat 名, 这么除了告诉jk tomcat的IP地址以及端口号, 还必须告诉 tomcat 他的名字。</p>
<p>Engine jvmRoute=&#8221;tomcat_web1&#8243;</p>
<p>分别在 tomcat1 跟 tomcat2 的  server.xml 中找到相应的配置. 改上相应的参数！</p>
<p>到此，即完成整个 Apache + JK + tomcat 的配置过程。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/158/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache 防 DDOS模块mod_evasive的使用说明</title>
		<link>http://www.gzv8.com/archives/123</link>
		<comments>http://www.gzv8.com/archives/123#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:45:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[DDOS]]></category>
		<category><![CDATA[mod_evasive]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=123</guid>
		<description><![CDATA[1、 mod_evasive 介绍；

mod_evasive 是Apache（httpd)服务器的防DDOS的一个模块。对于WEB服务器来说，是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御DDOS攻击，但在一定条件下，还是起到缓服Apache（httpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用，可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙，所以是否这种组合效果有更好的效果，我没办法验证。
mod_evasive 的官方地址： http://www.zdziarski.com/projects/mod_evasive 

2、 mod_evasive 的安装和配置；


2.1 mod_evasive 的下载地址；

mod_evasive_1.10.1.tar.gz

2.2 mod_evasive 的安装；

安装 mod_evasive 之前，你要用安装Apache(httpd)服务器软件包，还要安装httpd-devel或 apache-dev。在Slackware 12.0中，安装httpd软件即可；
对于Apache 1.x 请用下面的编译方法；
#/usr/sbin/apxs -iac mod_evasive.c
 
对于Apache 2.x 可以用下面的办法；
#tar zxvf mod_evasive_1.10.1.tar.gz
#cd mod_evasive
#/usr/sbin/apxs -i -a -c mod_evasive20.c 
 
注：apxs 用于编译模块工具；如果是用系统自带的软件包，一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的，你应该自己来指定路径；
我们然后修改/etc/ld.so.conf 文件，把编译出来的动态模块的所在位置指定在 ld.so.conf中；比如我用的是Aapche 2.x ，编译完成后，模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中；那我们就要把 这个目录写入到ld.so.conf中。
#echo "/usr/lib/httpd/modules" &#62;&#62; /etc/ld.so.conf
#ldconfig 
 
注： 具体要与你的系统环境为准，不要照搬照抄，如果你对Linux不太熟的话；

2.3 mod_evasive 的配置；

在编译安装完成后，会自动插入一行到Apache 配置文件中，对于Apache 2.x 版本中，应该在其配置文件中有类似下面的一行；
LoadModule evasive20_module   lib/httpd/modules/mod_evasive20.so
 
对于Apache 1.x来说，也应该差不多，大体只是路径不同罢了；
然后我们再修改 Apache [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1、 mod_evasive 介绍；<br />
</strong></p>
<p>mod_evasive 是Apache（httpd)服务器的防DDOS的一个模块。对于WEB服务器来说，是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御DDOS攻击，但在一定条件下，还是起到缓服Apache（httpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用，可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙，所以是否这种组合效果有更好的效果，我没办法验证。</p>
<p><strong>mod_evasive 的官方地址：</strong> <a href="http://www.zdziarski.com/projects/mod_evasive/" target="_blank">http://www.zdziarski.com/projects/mod_evasive </a></p>
<p><strong><br />
2、 mod_evasive 的安装和配置；<br />
</strong></p>
<p><strong><br />
2.1 mod_evasive 的下载地址；<br />
</strong></p>
<p><a href="http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz" target="_blank">mod_evasive_1.10.1.tar.gz</a></p>
<p><strong><br />
2.2 mod_evasive 的安装；<br />
</strong></p>
<p>安装 mod_evasive 之前，你要用安装Apache(httpd)服务器软件包，还要安装httpd-devel或 apache-dev。在Slackware 12.0中，安装httpd软件即可；</p>
<p>对于Apache 1.x 请用下面的编译方法；</p>
<div><code>#/usr/sbin/apxs -iac mod_evasive.c</code></div>
<p> </p>
<p>对于Apache 2.x 可以用下面的办法；</p>
<div><code>#tar zxvf mod_evasive_1.10.1.tar.gz<br />
#cd mod_evasive<br />
#/usr/sbin/apxs -i -a -c mod_evasive20.c </code></div>
<p> </p>
<p>注：apxs 用于编译模块工具；如果是用系统自带的软件包，一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的，你应该自己来指定路径；</p>
<p>我们然后修改/etc/ld.so.conf 文件，把编译出来的动态模块的所在位置指定在 ld.so.conf中；比如我用的是Aapche 2.x ，编译完成后，模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中；那我们就要把 这个目录写入到ld.so.conf中。</p>
<div><code>#echo "/usr/lib/httpd/modules" &gt;&gt; /etc/ld.so.conf<br />
#ldconfig </code></div>
<p> </p>
<p><strong>注：</strong> 具体要与你的系统环境为准，不要照搬照抄，如果你对Linux不太熟的话；</p>
<p><strong><br />
2.3 mod_evasive 的配置；<br />
</strong></p>
<p>在编译安装完成后，会自动插入一行到Apache 配置文件中，对于Apache 2.x 版本中，应该在其配置文件中有类似下面的一行；</p>
<div><code>LoadModule evasive20_module   lib/httpd/modules/mod_evasive20.so</code></div>
<p> </p>
<p>对于Apache 1.x来说，也应该差不多，大体只是路径不同罢了；</p>
<p>然后我们再修改 Apache 的配置文件，配置文件名为httpd.conf；</p>
<p>在Apache v1.x 版本中，要加入；</p>
<div><code>&lt;IfModule mod_evasive.c&gt;<br />
    DOSHashTableSize    3097<br />
    DOSPageCount        2<br />
    DOSSiteCount        50<br />
    DOSPageInterval     1<br />
    DOSSiteInterval     1<br />
    DOSBlockingPeriod   10<br />
&lt;/IfModule&gt;</code></div>
<p> </p>
<p>在Apache v2.x加入；</p>
<div><code>&lt;IfModule mod_evasive20.c&gt;<br />
    DOSHashTableSize    3097<br />
    DOSPageCount        2<br />
    DOSSiteCount        50<br />
    DOSPageInterval     1<br />
    DOSSiteInterval     1<br />
    DOSBlockingPeriod   10<br />
&lt;/IfModule&gt;</code></div>
<p> </p>
<p>如果您不知道把这些插入到哪，用下面的办法做也是可以的；</p>
<p>在/etc目录中创建一个文件，比如mod_evasive.conf；</p>
<div><code>#touch /etc/mod_evasive.conf </code></div>
<p> </p>
<p>然后把根据自己的Apache版本来加入相应的内容；</p>
<p>接着我们再修改 httpd.conf ，在最后一行加入</p>
<div><code>Include /etc/mod_evasive.conf </code></div>
<p> </p>
<p>修改完成后，我们要重启Apache服务器；</p>
<p>比如在Slackware 12.0中，Apache 2.x的重启，我们要用到</p>
<div><code>#/etc/rc.d/rc.httpd restart</code></div>
<p> </p>
<p>在Redhat、Fededora、Debian、Ubuntu、CentOS中的Apache，可以用；</p>
<div><code>#/etc/init.d/httpd restart<br />
或<br />
#/etc/init.d/apache restart</code></div>
<p> </p>
<p>大体上差不多是这样的……</p>
<p><strong><br />
2.4 对mod_evasive测试验证 ；<br />
</strong></p>
<p>防DDOS的模块做好后，我们可以要验证，可以用Apache 自带的ab工具，系统默认安装在/usr/sbin目录中；比如；</p>
<div><code>#/usr/sbin/ab -n 1000 -c 50 http://www.google.com:80/</code></div>
<p> </p>
<p>注：上面的例子的意思是，如果您的服务器是google的WEB服务器，我们要发送数据请求包，总共1000个，每次并发50个；</p>
<p>另外一个测试工具就是mod_evasive的解压包的目录中，有个test.pl ，你可以修改IP地址，然后用</p>
<div><code>#perl test.pl </code></div>
<p> </p>
<p>是不是有效果，请根据 ab工具或 测试脚本出来的结果来查看；</p>
<p>因为我们编译mod_evasive时，用的是默认配置，所以日志被存放在/tmp目录中。如果有DDOS攻击，会在/tmp产生日志。日志的文件是以 dos-开头的；</p>
<p><strong><br />
3、mod_evasive 的高级配置；<br />
</strong></p>
<p>如果想更改一些适合自己的参数，有些必要的参数，并不是通过配置文件修改就一下起作用的，我们要修改源码包中的 mod_evasive.c（Apache 1.x用之） 或 mod_evasive20.c （Apache 2.x用之）；</p>
<div><code>#define DEFAULT_HASH_TBL_SIZE   3097ul  // Default hash table size<br />
#define DEFAULT_PAGE_COUNT      2       // Default maximum page hit count per interval<br />
#define DEFAULT_SITE_COUNT      50      // Default maximum site hit count per interval<br />
#define DEFAULT_PAGE_INTERVAL   1       // Default 1 Second page interval<br />
#define DEFAULT_SITE_INTERVAL   1       // Default 1 Second site interval<br />
#define DEFAULT_BLOCKING_PERIOD 10      // Default for Detected IPs; blocked for 10 seconds<br />
#define DEFAULT_LOG_DIR         "/tmp"  // Default temp directory</code></div>
<p> </p>
<p>比如我们改改其中的数字，根据英文很容易理解。比如修改日志存放目录，就把/tmp改成别的目录。如果您不知道放在哪好，还是用默认的吧；</p>
<p>如果您在这里更改了参数，不要忘记修改Apache 配置文件中关于mod_evasive 的参数；</p>
<p>如果您想加入一些其它的参数，请查阅源码包中的README，里面有详细说明，大多来说没太大的必要……</p>
<p>这个文件相当重要，如果您想更改某些设置，就要修改这个文件……　</p>
<p><strong><br />
4、关于本文；<br />
</strong></p>
<p>mod_evasive 还是有点用的，安装也不费力气。如果你需要的时候，会想到这个模块的 …… mod_evasive 是否有更高级的用法，也不是在这篇文章里能说的清楚的。如果不懂怎么办？请查看源码包中的README。</p>
<p>本文权当做软件说明 ……</p>
<p>北南 记之</p>
<p>From LinuxSir.Org</p>
<p><strong><br />
5、参考文档；<br />
</strong></p>
<p>参考 mod_evasive 源码包中的README ……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx + Apache KeepAlive 的优化例子一则</title>
		<link>http://www.gzv8.com/archives/121</link>
		<comments>http://www.gzv8.com/archives/121#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:45:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[KeepAlive]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=121</guid>
		<description><![CDATA[现在惯常使用的 Http 服务器配搭是 nginx + apache ，前者负责静态文件的读取，后者负责动态页面的处理。
以往只有 Apache 单独运行的时候，优化往往是一律的，可现在有了 Nginx 的加入，再稍微调整原来 apache 配置的细则，能更加发挥出这2个配搭的性能。
首先是 Apache 参数 KeepAlive
2.x 版本的 Apache 配置该参数需要先启用以下外联配置文件
在httpd.conf 中找到
# Various default settings
Include conf/extra/httpd-default.conf
把第二行前边的“#”去掉。
然后 KeepAlive 的参数就在以上路径的配置文件中。
下边是关于该参数的说明：
KeepAlive 是否允许持续连接
MaxKeepAliveRequests 允许的持续连接的最大数
KeepAliveTimeout 持续连接在没有请求多少秒后切断 
前三个KeepAlive相关的指令用来设置持续连接。通常都是每个HTTP请求对应一个TCP连接，但对于一个包含许多图片的网页来说，客户端会在瞬间发出多个HTTP请求，此时多次建立TCP连接会大大降低响应速度。此时通过持续连接，可以允许用户在一个TCP连接中发出多个HTTP请求，减少TCP连接建立次数，提高响应速度。
这种情况下，应当通过access_log统计出连续HTTP请求出现的次数、间隔时间、访问量，以确定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用；太大了，持续连接迟迟不断，浪费TCP连接数不说，更糟糕的是系统中的 httpd 进程数目会因此不断增加，使得系统负载升高，甚至会导致服务器失去响应。
但是在处理动态网页请求时，由于用户很少会瞬间请求多个动态网页（一般都是打开页面之后阅读好半天才点下一页），此时打开KeepAlive无异于浪费TCP连接数。
结论就是，放动态网页的就 KeepAlive Off 以提高吞吐量，放静态内容如图片、js代码等就 KeepAlive On 以减少TCP连接建立次数。
但一个Apache只能有一种 KeepAlive 设置，怎么办？很简单，现在不就有 Nginx 了吗？ 由它负责所有静态文件的处理，后端的Apache就只需要专心动态应用得了。
大家知道怎么设了吧？
查看 KeepAlive 是否有效，可以通过 curl -I 获取HTTP报头查看。
如下边2个不同的结果：
HTTP/1.1 200 OK
Date: [...]]]></description>
			<content:encoded><![CDATA[<p>现在惯常使用的 Http 服务器配搭是 nginx + apache ，前者负责静态文件的读取，后者负责动态页面的处理。</p>
<p>以往只有 Apache 单独运行的时候，优化往往是一律的，可现在有了 Nginx 的加入，再稍微调整原来 apache 配置的细则，能更加发挥出这2个配搭的性能。</p>
<p>首先是 Apache 参数 KeepAlive</p>
<p>2.x 版本的 Apache 配置该参数需要先启用以下外联配置文件</p>
<p>在httpd.conf 中找到<br />
# Various default settings<br />
Include conf/extra/httpd-default.conf</p>
<p>把第二行前边的“#”去掉。<br />
然后 KeepAlive 的参数就在以上路径的配置文件中。<br />
下边是关于该参数的说明：</p>
<p>KeepAlive 是否允许持续连接</p>
<p>MaxKeepAliveRequests 允许的持续连接的最大数</p>
<p>KeepAliveTimeout 持续连接在没有请求多少秒后切断 </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 设置，怎么办？很简单，现在不就有 Nginx 了吗？ 由它负责所有静态文件的处理，后端的Apache就只需要专心动态应用得了。</p>
<p>大家知道怎么设了吧？</p>
<p>查看 KeepAlive 是否有效，可以通过 curl -I 获取HTTP报头查看。<br />
如下边2个不同的结果：</p>
<p>HTTP/1.1 200 OK<br />
Date: Thu, 09 Jul 2009 06:58:13 GMT<br />
Server: Apache/2.2.11 (Unix) PHP/5.2.6<br />
Last-Modified: Fri, 03 Jul 2009 10:40:03 GMT<br />
ETag: &#8220;163e8b2-d87-46dcac765c6c0&#8243;<br />
Accept-Ranges: bytes<br />
Content-Length: 3463<br />
<strong>Connection: close     连接断开, KeepAlive 为 off</strong><br />
Content-Type: text/html</p>
<p>#################################</p>
<p>HTTP/1.1 200 OK<br />
Server: nginx/0.6.35<br />
Date: Thu, 09 Jul 2009 06:59:49 GMT<br />
Content-Type: text/html<br />
Content-Length: 1034<br />
Last-Modified: Thu, 28 Aug 2008 17:07:40 GMT<br />
<strong>Connection: keep-alive    持续连接, KeepAlive 为 on</strong><br />
Accept-Ranges: bytes</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/121/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>什么是MPM？</title>
		<link>http://www.gzv8.com/archives/91</link>
		<comments>http://www.gzv8.com/archives/91#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:25:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[mpm]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=91</guid>
		<description><![CDATA[MPM（Multi -Processing Modules，多路处理模块）是Apache2.0中影响性能的最核心特性。是Apache 2.x才支持的一个可插入的并发模型，在编译的时候，我们只可以选择一个并发模型
格式
–with-mpm=MPM Choose the process model for Apache to use.
MPM={beos&#124;worker&#124;prefork&#124;mpmt_os2&#124; perchild&#124;leader&#124;threadpool}
1、Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM
2、perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程.这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好.
3、leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用.
4、prefork如果不用“–with-mpm”显式指定某种MPM,prefork就是LInux/Unix平台上缺省的MPM.它所采用的预派生子 进程方式也是 Apache 1.3中采用的模式.prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不 同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一.
prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进 程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止.这就是预派生（prefork）的由来.这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销 以增加性能.
5、worker相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM.由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器.但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性.这种MPM的工作方式将是Apache 2.0的发展趋势.
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求.同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最 多的空闲线程数;而MaxClients设置了所有子进程中的线程总数.如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程.
]]></description>
			<content:encoded><![CDATA[<p>MPM（Multi -Processing Modules，多路处理模块）是Apache2.0中影响性能的最核心特性。是Apache 2.x才支持的一个可插入的并发模型，在编译的时候，我们只可以选择一个并发模型</p>
<p>格式<br />
–with-mpm=MPM Choose the process model for Apache to use.<br />
MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}</p>
<p>1、Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM</p>
<p>2、perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程.这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好.</p>
<p>3、leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用.</p>
<p>4、prefork如果不用“–with-mpm”显式指定某种MPM,prefork就是LInux/Unix平台上缺省的MPM.它所采用的预派生子 进程方式也是 Apache 1.3中采用的模式.prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不 同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一.<br />
prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进 程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止.这就是预派生（prefork）的由来.这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销 以增加性能.</p>
<p>5、worker相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM.由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器.但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性.这种MPM的工作方式将是Apache 2.0的发展趋势.<br />
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求.同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最 多的空闲线程数;而MaxClients设置了所有子进程中的线程总数.如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/91/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache 配置文件的含义(值得收藏)</title>
		<link>http://www.gzv8.com/archives/68</link>
		<comments>http://www.gzv8.com/archives/68#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:02:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[httpd.conf]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=68</guid>
		<description><![CDATA[/etc/apache/httpd.conf :
ServerRoot &#8220;/usr&#8221;
#因为安装到/usr下，所以ServerRoot是/usr。在以下配置中，以相对路径写的就是对于相对/usr
PidFile /var/run/httpd.pid
#httpd启动时的pid存放位置,用于start/stop apache
Timeout 300
#连接超时时间
KeepAlive On
#允许持续连接，一个连接多个请求.
MaxKeepAliveRequests 200
#持续连接中最大连接数，推荐大一些获得最佳性能
KeepAliveTimeout 15
#Client 在15秒内没有下次请求则断线
MinSpareServers      5
MaxSpareServers      10
httpd服务进程的数量，ps aux 可以看到
MaxClients         150
最大连接人数
Listen 80
#监听端口
#ExtendedStatus On
#使用/server-status查询服务器状态时给予完全信息(ON)或基本信息(OFF) 默认为OFF
User apache
Group apache
#httpd进程的user,group
ServerAdmin BlueSilence.xin@gmail.com
#admin的E-mail
ServerName 127.0.0.1
#服务器名称，需要是合法的DNS NAME 或者设置成IP
DocumentRoot &#8220;/srv/www/htdocs&#8221;
#主页存放目录
UserDir public_html
#每个用户的主页目录 (例如:/home/blue/public_html)
DirectoryIndex index.php index.html index.html.var
#当输入http://localhost 就会在主页根目录下搜索以上几个文件名做为首页显示
HostnameLookups Off
#记录log时，Client以主机名(On)或以IP(Off)记录，以IP记录更快些.
ErrorLog /var/log/apache/error_log
#错误日志位置
LogLevel warn
#日志记录等级,由信息多-&#62;少记录等级：debug, info, notice, warn, error, crit,alert,emerg
CustomLog /var/log/apache/access_log common
#访问日志位置
ServerTokens Prod
#当client访问到不存在的网页时提供信息的多少。少点好些 
#由多&#8211;&#62;少 :Full &#124; OS &#124; Minor &#124; Minimal &#124; Major &#124; Prod
LanguagePriority zh-CN [...]]]></description>
			<content:encoded><![CDATA[<p>/etc/apache/httpd.conf :</p>
<p>ServerRoot &#8220;/usr&#8221;<br />
#因为安装到/usr下，所以ServerRoot是/usr。在以下配置中，以相对路径写的就是对于相对/usr<br />
PidFile /var/run/httpd.pid<br />
#httpd启动时的pid存放位置,用于start/stop apache<br />
Timeout 300<br />
#连接超时时间<br />
KeepAlive On<br />
#允许持续连接，一个连接多个请求.<br />
MaxKeepAliveRequests 200<br />
#持续连接中最大连接数，推荐大一些获得最佳性能<br />
KeepAliveTimeout 15<br />
#Client 在15秒内没有下次请求则断线<br />
MinSpareServers      5<br />
MaxSpareServers      10<br />
httpd服务进程的数量，ps aux 可以看到<br />
MaxClients         150<br />
最大连接人数<br />
Listen 80<br />
#监听端口<br />
#ExtendedStatus On<br />
#使用/server-status查询服务器状态时给予完全信息(ON)或基本信息(OFF) 默认为OFF<br />
User apache<br />
Group apache<br />
#httpd进程的user,group<br />
ServerAdmin BlueSilence.xin@gmail.com<br />
#admin的E-mail<br />
ServerName 127.0.0.1<br />
#服务器名称，需要是合法的DNS NAME 或者设置成IP</p>
<p>DocumentRoot &#8220;/srv/www/htdocs&#8221;<br />
#主页存放目录<br />
UserDir public_html<br />
#每个用户的主页目录 (例如:/home/blue/public_html)<br />
DirectoryIndex index.php index.html index.html.var<br />
#当输入http://localhost 就会在主页根目录下搜索以上几个文件名做为首页显示<br />
HostnameLookups Off<br />
#记录log时，Client以主机名(On)或以IP(Off)记录，以IP记录更快些.<br />
ErrorLog /var/log/apache/error_log<br />
#错误日志位置<br />
LogLevel warn<br />
#日志记录等级,由信息多-&gt;少记录等级：debug, info, notice, warn, error, crit,alert,emerg<br />
CustomLog /var/log/apache/access_log common<br />
#访问日志位置<br />
ServerTokens Prod<br />
#当client访问到不存在的网页时提供信息的多少。少点好些 <img src='http://www.gzv8.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
#由多&#8211;&gt;少 :Full | OS | Minor | Minimal | Major | Prod<br />
LanguagePriority zh-CN en ca cs da de &#8230;&#8230;&#8230;.<br />
#语言优先级<br />
ErrorDocument 404 /missing.html<br />
#错误网页处理，当出现404(找不到该页)则会显示/missing.html</p>
<p>目录设定:<br />
设定根目录属性：</p>
<p>    Options FollowSymLinks<br />
    AllowOverride None</p>
<p>Options 属性:<br />
Indexes         当该目录下没有index.*时则以ftp-style列出该目录下所有文件<br />
Includes        Allow server-wide includes<br />
FollowSymLinks 当该目录下软连接的文件/目录链接到外部目录时，仍然可以正常显示。<br />
MultiViews     由一个*.var管理同一网页的多种语言版本,如apache默认主页多种语言的index.html<br />
ExecCGI         允许执行CGI程序<br />
ALL             开启除MultiViews之外的属性<br />
None            禁止所有属性</p>
<p>AllowOverride 是否允许使用.htaccess覆盖某些设定(All None FileInfo AuthConfig Limit)</p>
<p>设定/srv/www/htdocs/ 目录(根目录)属性:</p>
<p>Options Indexes FollowSymLinks<br />
AllowOverride None<br />
Order allow,deny<br />
    Allow from all</p>
<p>Order allow,deny : 控制访问权限<br />
Order deny,allow<br />
deny from test.org 拒绝test.org访问<br />
deny from 192.168.0.100 拒绝192.168.0.100访问<br />
allow from 192.168.0.1 允许192.168.0.1 访问<br />
  <br />
Alias /icons/ &#8220;/srv/www/icons/&#8221;  <br />
语法： Alias fakename realname<br />
设置目录的别名，这样当输入http://localhost/icons/ 就可以访问到/srv/www/icons/<br />
注意icons结尾的&#8221;/&#8221; 应在fakename realname 成对出现,要么全有,要么全没有.<br />
有&#8221;/&#8221;时需要输入http://localhost/icons/ 才可以正常访问</p>
<p>ScriptAlias /cgi-bin/ &#8220;/srv/www/cgi-bin/&#8221;<br />
设置可执行程序别名,与Alias类似。<br />
当Client请求Alias realname时，server直接以document形式传送Client<br />
而ScroptAlias则是server执行realname的script程序后将结果传送给Client</p>
<p>服务器的状态，信息:<br />
通过http://localhost/server-status 访问</p>
<p>    SetHandler server-status<br />
    Order deny,allow<br />
    Deny from all<br />
    Allow from 127.0.0.1</p>
<p>通过http://localhost/server-info 访问</p>
<p>    SetHandler server-info<br />
    Order deny,allow<br />
    Deny from all<br />
    Allow from 127.0.0.1</p>
<p>.cgi .pl程序可执行的三种方法：<br />
1：使用ScriptAlias，httpd.conf中加入：<br />
ScriptAlias /my-cgi/ &#8220;/srv/www/cgi&#8221;<br />
这样就可以以http://localhost/my-cgi/xxx.cgi xxx.pl执行/srv/www/cgi/下的.cgi,.pl程序了。</p>
<p>2: 使用sethandler cgi-scripts，httpd.conf中加入：<br />
Alias /my-cgi/ &#8220;/srv/www/cgi&#8221;</p>
<p>   Options ExecCGI<br />
   Sethandler cgi-script</p>
<p>3:使用Options的ExecCGI属性 :<br />
将httpd.conf中的AddHandler cgi-script .cgi .pl 注释拿掉，加上.pl<br />
给予/srv/www/cgi/ 执行CGI权限:<br />
Alias /my-cgi/ &#8220;/srv/www/cgi&#8221;</p>
<p>   Options ExecCGI<br />
   Allowoverride none<br />
   Order allow,deny<br />
   allow from all</p>
<p>认证网页：</p>
<p>   Options FollowSymlinks Indexes ExecCGI<br />
   AllowOverride None<br />
   Order Allow,Deny<br />
   Allow From all<br />
   AuthName &#8220;private directory &#8221;<br />
   AuthType Basic<br />
   AuthUserFile /etc/apace/apache.passwd<br />
   Require valid-user</p>
<p>AuthNmae :      认证窗口上的标题<br />
AuthType :      认证类型,apache有几种认证方式，Basic为最基本的。<br />
AuthUserFIle : 认证密码存放位置<br />
Require : 认证档案中允许使用的用户<br />
valid-user :   认证档案中所有的用户都可以使用通过认证进入该目录<br />
如只想允许某个用户则使用 Require user username1 username2</p>
<p>建立认证密码文件：<br />
#cd /etc/apache/<br />
#htpasswd -c apache.passwd blue<br />
New password:<br />
Re-type new password:<br />
Adding password for user blue<br />
#<br />
-c : 如果没有apache.passwd则创建它<br />
增加认证用户：<br />
#htpasswd apache.passwd silence<br />
&#8230;.<br />
#apachectl restart<br />
#firefox http://localhost/my-cgi/<br />
要求密码才可以进入喽 <img src='http://www.gzv8.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>.htaccess 和 allowoverride :</p>
<p>.htaccess : 取代httpd.conf中对.htaccess所在目录的设定。<br />
AllowOverride :允许覆盖设定的类型(All None FileInfo AuthConfig Limit)</p>
<p>设定每个用户都可以建立自己的认证网页：</p>
<p>1.确定httpd.conf中AccessFileName .htaccess 没有被注释掉<br />
2.编辑httpd.conf加入AllowOverride AuthConfig,允许每个用户通过.htaccess建立自己的认证网页</p>
<p>   AllowOverride AuthConfig<br />
    Order Allow,Deny<br />
     Allow from all</p>
<p>3.用户建立认证目录，编写.htaccess :<br />
mkdir private<br />
cd private/<br />
echo &#8221; private page &#8221; &gt;test.html<br />
vi .htaccess<br />
AuthName &#8220;private&#8221;<br />
AuthType basic<br />
AuthUserFIle /home/blue/blue.passwd<br />
Require valid-user<br />
建立密码文件：<br />
htpasswd -c blue.passwd blue<br />
&#8230;&#8230;<br />
firefox http://localhost/~blue/private/test.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/68/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

