<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿权的书房]]></title> 
<link>http://www.aslibra.com/blog/index.php</link> 
<description><![CDATA[技术经验分享，资料收集，偶尔晾几张相片，感言生活]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿权的书房]]></copyright>
<item>
<link>http://www.aslibra.com/blog/post/apache-ProxyPassMatch.php</link>
<title><![CDATA[apache2.2.5以上可以正则匹配代理]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Fri, 06 Aug 2010 03:51:38 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/apache-ProxyPassMatch.php</guid> 
<description>
<![CDATA[ 
	<div class="quote"><div class="quote-title">引用</div><div class="quote-content">ProxyPassMatch Directive<br/>Description: Maps remote servers into the local server URL-space using regular expressions <br/>Syntax: ProxyPassMatch [regex] !&#124;url [key=value [key=value ...]] <br/>Context: server config, virtual host, directory <br/>Status: Extension <br/>Module: mod_proxy <br/>Compatibility: available in Apache 2.2.5 and later </div></div><br/><br/>比如，把asp的请求放到8080端口的服务器<br/><br/><div class="code">&lt;VirtualHost *:80&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin webmaster@aslibra.com<br/>&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot &quot;E:/webapps/www.aslibra.com&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ServerName www.aslibra.com<br/>&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog &quot;logs/test.localhost-error.log&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;CustomLog &quot;logs/test.localhost-access.log&quot; common<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ProxyRequests Off<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Proxy *&gt;<br/>&nbsp;&nbsp;Order deny,allow<br/>&nbsp;&nbsp;Allow from all<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Proxy&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProxyPassMatch .*&#92;.asp http://127.0.0.1:8080/<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProxyPassReverse / http://127.0.0.1:8080/<br/>&lt;/VirtualHost&gt;</div><br/><br/>这个会对给proxy带来很大的灵活性，参考官方介绍：<br/><a href="http://httpd.apache.org/docs/current/mod/mod_proxy.html" target="_blank">http://httpd.apache.org/docs/current/mod/mod_proxy.html</a><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a> , <a href="http://www.aslibra.com/blog/go.php/tags/proxy/" rel="tag">proxy</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/post/apache_htaccess_detail.php</link>
<title><![CDATA[htaccess可以做啥]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Thu, 28 May 2009 15:50:11 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/apache_htaccess_detail.php</guid> 
<description>
<![CDATA[ 
	这个是属于apache的设置，虽然我已经基本上没有用apache了，可发现此说明，还是记录一下，以后备用，很多知识还是通用的，碰到问题可以参考。<br/><br/>以下是整理过的<a href="http://www.100u.com/admin/manager/vhost/htaccess.asp" target="_blank">原文</a>：<br/><br/>.htaccess可以做大量范围的事情，包括：文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户IP地址、只允许特定的IP地址、停止目录表以及使用其他文件作为index文件，等等...... <br/><br/><strong>1. Introduction 介绍</strong> <br/><br/>文件名 .htaccess 属性 644 (RW-R–R–) <br/>htaccess会影响它所在目录下的所有子目录 <br/>注意大多数内容都要求保持在一行之内，不要换行，否则会引起错误 <br/><br/><strong>2. Error Documents 错误文档 </strong><br/><br/>Official document: ErrorDocument Directive <br/>ErrorDocument code document <br/>例子 <br/>ErrorDocument 400 /errors/badrequest.html <br/>ErrorDocument 404 http://yoursite/errors/notfound.html <br/>ErrorDocument 401 “Authorization Required” <br/>(注意之后内容如果出现的双引号需要转义为 &#92;”) <br/><br/><strong>常见HTTP状态码</strong> <br/><br/><div class="code">Successful Client Requests <br/>200 OK <br/>201 Created <br/>202 Accepted <br/>203 Non-Authorative Information <br/>204 No Content <br/>205 Reset Content <br/>206 Partial Content <br/><br/>Client Request Redirected <br/>300 Multiple Choices <br/>301 Moved Permanently <br/>302 Moved Temporarily <br/>303 See Other <br/>304 Not Modified <br/>305 Use Proxy <br/><br/>Client Request Errors <br/>400 Bad Request <br/>401 Authorization Required <br/>402 Payment Required (not used yet) <br/>403 Forbidden <br/>404 Not Found <br/>405 Method Not Allowed <br/>406 Not Acceptable (encoding) <br/>407 Proxy Authentication Required <br/>408 Request Timed Out <br/>409 Conflicting Request <br/>410 Gone <br/>411 Content Length Required <br/>412 Precondition Failed <br/>413 Request Entity Too Long <br/>414 Request URI Too Long <br/>415 Unsupported Media Type <br/><br/>Server Errors <br/>500 Internal Server Error <br/>501 Not Implemented <br/>502 Bad Gateway <br/>503 Service Unavailable <br/>504 Gateway Timeout <br/>505 HTTP Version Not Supported</div><br/><br/><strong>3. Password Protection 密码保护</strong> <br/><br/>Official document: Authentication, Authorization and Access Control <br/>假设密码文件为.htpasswd <br/>AuthUserFile /usr/local/safedir/.htpasswd (这里必须使用全路径名) <br/>AuthName EnterPassword <br/>AuthType Basic <br/>两种常见验证方式: <br/>Require user windix <br/>(仅允许用户windix登陆) <br/>Require valid-user <br/>(所有合法用户都可登陆) <br/>Tip: 如何生成密码文件 <br/>使用htpasswd命令(apache自带) <br/>第一次生成需要创建密码文件 <br/>htpasswd -c .htpasswd user1 <br/>之后增加新用户 <br/>htpasswd .htpasswd user2 <br/><br/><strong>4. Enabling SSI Via htaccess 通过htaccess允许SSI(Server Side Including)功能 </strong><br/><br/>AddType text/html .shtml <br/>AddHandler server-parsed .shtml <br/>Options Indexes FollowSymLinks Includes <br/>DirectoryIndex index.shtml index.html <br/><br/><strong>5. Blocking users by IP 根据IP阻止用户访问</strong> <br/><br/>order allow,deny <br/>deny from 123.45.6.7 <br/>deny from 12.34.5. (整个C类地址) <br/>allow from all <br/><br/><strong>6. Blocking users/sites by referrer 根据referrer阻止用户/站点访问</strong> <br/><br/>需要mod_rewrite模块 <br/>例1. 阻止单一referrer: badsite.com <br/>RewriteEngine on <br/># Options +FollowSymlinks <br/>RewriteCond %&#123;HTTP_REFERER&#125; badsite&#92;.com [NC] <br/>RewriteRule .* - [F] <br/>例2. 阻止多个referrer: badsite1.com, badsite2.com <br/>RewriteEngine on <br/># Options +FollowSymlinks <br/>RewriteCond %&#123;HTTP_REFERER&#125; badsite1&#92;.com [NC,OR] <br/>RewriteCond %&#123;HTTP_REFERER&#125; badsite2&#92;.com <br/>RewriteRule .* - [F] <br/>[NC] - 大小写不敏感(Case-insensite) <br/>[F] - 403 Forbidden <br/>注意以上代码注释掉了”Options +FollowSymlinks”这个语句。如果服务器未在 httpd.conf 的 段落设置 FollowSymLinks, 则需要加上这句，否则会得到”500 Internal Server error”错误。 <br/><br/><strong>7. Blocking bad bots and site rippers (aka offline browsers) 阻止坏爬虫和离线浏览器</strong> <br/><br/>需要mod_rewrite模块 <br/>坏爬虫? 比如一些抓垃圾email地址的爬虫和不遵守robots.txt的爬虫(如baidu?) <br/>可以根据 HTTP_USER_AGENT 来判断它们 <br/>(但是还有更无耻的如”中搜 zhongsou.com”之流把自己的agent设置为 “Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)” 太流氓了，就无能为力了) <br/>RewriteEngine On <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^BlackWidow [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Bot&#92; mailto:craftbot@yahoo.com [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^ChinaClaw [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Custo [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^DISCo [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Download&#92; Demon [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^eCatch [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^EirGrabber [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^EmailSiphon [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^EmailWolf [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Express&#92; WebPictures [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^ExtractorPro [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^EyeNetIE [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^FlashGet [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^GetRight [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^GetWeb! [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Go!Zilla [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Go-Ahead-Got-It [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^GrabNet [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Grafula [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^HMView [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; HTTrack [NC,OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Image&#92; Stripper [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Image&#92; Sucker [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; Indy&#92; Library [NC,OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^InterGET [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Internet&#92; Ninja [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^JetCar [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^JOC&#92; Web&#92; Spider [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^larbin [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^LeechFTP [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Mass&#92; Downloader [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^MIDown&#92; tool [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Mister&#92; PiX [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Navroad [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^NearSite [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^NetAnts [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^NetSpider [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Net&#92; Vampire [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^NetZIP [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Octopus [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Offline&#92; Explorer [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Offline&#92; Navigator [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^PageGrabber [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Papa&#92; Foto [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^pavuk [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^pcBrowser [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^RealDownload [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^ReGet [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^SiteSnagger [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^SmartDownload [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^SuperBot [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^SuperHTTP [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Surfbot [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^tAkeOut [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Teleport&#92; Pro [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^VoidEYE [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Web&#92; Image&#92; Collector [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Web&#92; Sucker [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebAuto [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebCopier [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebFetch [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebGo&#92; IS [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebLeacher [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebReaper [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebSauger [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Website&#92; eXtractor [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Website&#92; Quester [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebStripper [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebWhacker [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WebZIP [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Wget [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Widow [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^WWWOFFLE [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Xaldon&#92; WebSpider [OR] <br/>RewriteCond %&#123;HTTP_USER_AGENT&#125; ^Zeus <br/>RewriteRule ^.* - [F,L] <br/>[F] - 403 Forbidden <br/>[L] - 连接(Link)<br/><br/><strong>8. Change your default directory page 改变缺省目录页面 </strong><br/><br/>DirectoryIndex index.html index.php index.cgi index.pl <br/><br/><strong>9. Redirects 转向</strong> <br/><br/>单个文件 <br/>Redirect /old_dir/old_file.html http://yoursite.com/new_dir/new_file.html <br/>整个目录 <br/>Redirect /old_dir http://yoursite.com/new_dir <br/>效果: 如同将目录移动位置一样 <br/>http://yoursite.com/old_dir -> http://yoursite.com/new_dir <br/>http://yoursite.com/old_dir/dir1/test.html -> http://yoursite.com/new_dir/dir1/test.html <br/>Tip: 使用用户目录时Redirect不能转向的解决方法 <br/>当你使用Apache默认的用户目录，如 http://mysite.com/~windix，当你想转向 http://mysite.com/~windix/jump时，你会发现下面这个Redirect不工作: <br/>Redirect /jump http://www.google.com <br/>正确的方法是改成 <br/>Redirect /~windix/jump http://www.google.com <br/>(source: .htaccess Redirect in “Sites” not redirecting: why? <br/>) <br/><br/><strong>10. Prevent viewing of .htaccess file 防止.htaccess文件被查看</strong><br/> <br/>order allow,deny <br/>deny from all <br/><br/><strong>11. Adding MIME Types 添加 MIME 类型</strong> <br/><br/>AddType application/x-shockwave-flash swf <br/>Tips: 设置类型为 application/octet-stream 将提示下载 <br/><br/><strong>12. Preventing hot linking of images and other file types 防盗链</strong><br/> <br/>需要mod_rewrite模块 <br/>RewriteEngine on <br/>RewriteCond %&#123;HTTP_REFERER&#125; !^$ <br/>RewriteCond %&#123;HTTP_REFERER&#125; !^http://(www/&#92;.)?mydomain.com/.*$ [NC] <br/>RewriteRule &#92;.(gif&#124;jpg&#124;js&#124;css)$ - [F] <br/>解析: <br/>若 HTTP_REFERER 非空 (来源为其他站点，非直接连接) 并且 <br/>若 HTTP_REFERER 非(www.)mydomain.com开头(忽略大小写[NC]) (来源非本站) <br/>对于所有含有 .gif/.jpg/.js/.css 结尾的文件给出 403 Forbidden 错误[F] <br/>也可指定响应，如下例显示替换图片 <br/>RewriteRule &#92;.(gif&#124;jpg)$ [R,L] <br/>[R] - 转向(Redirect) <br/>[L] - 连接(Link) <br/><br/><strong>13. Preventing Directory Listing 防止目录列表时显示 </strong><br/><br/>IndexIgnore * <br/>IndexIgnore *.jpg *.gif <br/>Tips: <br/>允许目录列表显示: Options +Indexes <br/>禁止目录列表显示: Options -Indexes <br/>显示提示信息: 页首 文件HEADER, 页尾 文件README <br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a> , <a href="http://www.aslibra.com/blog/go.php/tags/htaccess/" rel="tag">htaccess</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1054.htm</link>
<title><![CDATA[apache的mpm模式的影响]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Sat, 17 May 2008 03:48:31 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1054.htm</guid> 
<description>
<![CDATA[ 
	<br/><img src="http://www.aslibra.com/blog/template/EleganX2/images/viewimage.gif" alt=""/><a href="http://pic.yupoo.com/hqlulu/48924591c67c/5i0uwvi1.jpg" target="_blank">点击在新窗口中浏览此图片</a><br/><a href="http://pic.yupoo.com/hqlulu/48924591c67c/5i0uwvi1.jpg" target="_blank">http://pic.yupoo.com/hqlulu/48924591c67c/5i0uwvi1.jpg</a><br/><br/><br/>几天前阿权和陕兄调整服务器，陕兄和我一样头晕，他居然把一个机器的ssh远程登录服务去掉，然后重启了，结果直接叫机房帮忙开服务了。而我却忘记把apache的mpm模式的注释打开了，但我们找问题找了快一个小时，我还以为是服务器硬盘很有问题，差点去找另外一个服务器做尝试，陕兄也差点希望把原先的环境复制一份过来，后来发现了mpm没打开。<br/><br/>看看apache手册的说明：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。不同的平台和不同的环境经常产生不同的需求，或是为了达到同样的最佳效果而采用不同的方法。Apache凭借它的模块化设计很好的适应了大量不同的环境。这一设计使得网站管理员能够在编译时和运行时凭借载入不同的模块来决定服务器的不同附加功能。<br/><br/>Apache2.0将这种模块化的设计延伸到了web服务器的基础功能上。这个版本带有多路处理模块(MPM)的选择以处理网络端口绑定、接受请求并指派子进程来处理这些请求。<br/><br/>将模块化设计延伸到这一层次主要有以下两大好处：<br/><br/>Apache可以更简洁、更有效地支持各种操作系统。尤其是在mpm_winnt中使用本地网络特性代替Apache1.3中使用的POSIX模拟层后，Windows版本的Apache现在具有更好的性能。这个优势借助特定的MPM同样延伸到了其他各种操作系统。 <br/>服务器可以为某些特定的站点进行定制。比如，需要更好伸缩性的站点可以选择象worker或event这样线程化的MPM，而需要更好的稳定性和兼容性以适应一些旧的软件的站点可以用prefork 。 <br/>从用户角度来看，MPM更像其他的Apache模块。主要的不同在于：不论何时，必须有且仅有一个MPM被载入到服务器中。现有的MPM列表可以在模块索引中找到。</div></div><br/><br/>linux下默认安装是 prefork 模式：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器，它的工作方式类似于Apache 1.3。它适合于没有线程安全库，需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM，这样若一个请求出现问题就不会影响到其他请求。<br/><br/>这个MPM具有很强的自我调节能力，只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰，同时又不能太大，以致需要使用的内存超出物理内存的大小。</div></div><br/><br/>如果没有打开，默认的连接数量是很小的，所以一般不能满足正常的服务器需求。可以看到第一个图片的变化，连接数一定的情况下，包含了图片的访问，所以带宽占用比后段要多，把图片访问转移，则余下网页，带宽变小，但连接数还没变化，所以持续在一定的带宽占用而无法上涨。后来打开了mpm的设置，设置好StartServers, MinSpareServers, MaxSpareServers, MaxClients就正常了，代码也是从别的地方参考的，自行调节：<br/><br/><div class="code">&lt;IfModule mpm_prefork_module&gt;<br/> &nbsp; &nbsp;StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5<br/> &nbsp; &nbsp;MinSpareServers &nbsp; &nbsp; &nbsp; 5<br/> &nbsp; &nbsp;MaxSpareServers &nbsp; &nbsp; &nbsp;10<br/> &nbsp; &nbsp;ServerLimit &nbsp; &nbsp; &nbsp; &nbsp;4000<br/> &nbsp; &nbsp;MaxClients &nbsp; &nbsp; &nbsp; &nbsp; 4000 <br/> &nbsp; &nbsp;MaxRequestsPerChild &nbsp; 0<br/>&lt;/IfModule&gt;</div><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1051.htm</link>
<title><![CDATA[apache的压缩和防盗链]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Tue, 13 May 2008 13:43:14 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1051.htm</guid> 
<description>
<![CDATA[ 
	最近做apache优化，希望跟大家分享一下阿权的心得。<br/><br/><br/><img src="http://www.aslibra.com/blog/template/EleganX2/images/viewimage.gif" alt=""/><a href="http://pic.yupoo.com/hqlulu/3689358d0d1b/5hwfknvr.jpg" target="_blank">点击在新窗口中浏览此图片</a><br/><a href="http://pic.yupoo.com/hqlulu/3689358d0d1b/5hwfknvr.jpg" target="_blank">http://pic.yupoo.com/hqlulu/3689358d0d1b/5hwfknvr.jpg</a><br/><br/><br/><strong>1 apache可以用redirect方式，把图片定义到别的服务器</strong><br/><br/><div class="code">RedirectMatch /aslibra_pic/(.*) &nbsp; &nbsp; http://1.2.3.4/www.aslibra.com/pic/$1<br/><br/>#request http://www.aslibra.com/aslibra_pic/abc.jpg<br/>#send to http://1.2.3.4/www.aslibra.com/pic/abc.jpg</div><br/><br/>如上图第一个红色框所示，流量变化就是图片切换的结果<br/>图片交给另外的服务器处理会更加好，不用redirect更好，直接就引用<br/><br/><strong>2 apache的deflate选项需要打开</strong><br/><br/><div class="code">############# gzip ############<br/><br/>&lt;Location /&gt;<br/> &nbsp; SetOutputFilter DEFLATE<br/> &nbsp; BrowserMatch ^Mozilla/4 gzip-only-text/html<br/> &nbsp; BrowserMatch ^Mozilla/4&#92;.0&#91;678&#93; no-gzip<br/> &nbsp; BrowserMatch &#92;bMSIE !no-gzip !gzip-only-text/html<br/> &nbsp; SetEnvIfNoCase Request_URI &#92;.(?:gif&#124;jpe?g&#124;png&#124;swf&#124;exe&#124;ico)$ no-gzip dont-vary<br/> &nbsp; Header append Vary User-Agent env=!dont-vary<br/>&lt;/Location&gt;<br/><br/>## www.aslibra.com ##</div><br/><br/>以上其实是apache手册的代码，大家可以参考第一个图片的第二个红色框，可以减少大概四分之一的流量，虽然会对服务器cpu有一点提高，但是还是值得的。<br/><br/><strong>3 apache的expire要打开</strong><br/><br/>详情参考 《<a href="http://www.aslibra.com/blog/read.php?1047" target="_blank">最近的Apache安装参数</a>》<br/><br/><strong>4 apache的防盗链的重要性</strong><br/><br/><br/><img src="http://www.aslibra.com/blog/template/EleganX2/images/viewimage.gif" alt=""/><a href="http://pic.yupoo.com/hqlulu/0850058d0d1c/gimfd5d7.jpg" target="_blank">点击在新窗口中浏览此图片</a><br/><a href="http://pic.yupoo.com/hqlulu/0850058d0d1c/gimfd5d7.jpg" target="_blank">http://pic.yupoo.com/hqlulu/0850058d0d1c/gimfd5d7.jpg</a><br/><br/><br/>如果你不是做相册服务公司，比如flickr或者yupoo之类的，那一般还是得做防盗链，如上图所示，机器都跑到100M带宽，把服务器带宽都用完了，很是可恶，特别是哪些所谓的网盟，一下子就可以带来巨大的访问量，自己可就亏了。<br/><br/><div class="code">&lt;VirtualHost *:80&gt;<br/> &nbsp; &nbsp;DocumentRoot /Data/webapps/www.aslibra.com<br/> &nbsp; &nbsp;ServerName www.aslibra.com<br/> &nbsp; &nbsp;#可以记录日志查看哪些来源使用了图片，这里可能还记录了网页<br/> &nbsp; &nbsp;#CustomLog &quot;&#124;/Data/apps/cronolog/sbin/cronolog /Data/logs/%Y/%m/%d/show.%m%d%H&quot; combined env=!local_referal<br/><br/> &nbsp; &nbsp;SetEnvIf Referer &quot;^http://(.*).aslibra.com/&quot; local_referal<br/> &nbsp; &nbsp;SetEnvIf Referer &quot;^$&quot; local_referal<br/> &nbsp; &nbsp;&lt;Directory /Data/webapps/www.aslibra.com/pic&gt;<br/> &nbsp; &nbsp; &nbsp;Order Deny,Allow<br/> &nbsp; &nbsp; &nbsp;Deny from all<br/> &nbsp; &nbsp; &nbsp;Allow from env=local_referal<br/> &nbsp; &nbsp;&lt;/Directory&gt;<br/>&lt;/VirtualHost&gt;</div><br/><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1047.htm</link>
<title><![CDATA[最近的Apache安装参数]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Sat, 10 May 2008 09:50:28 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1047.htm</guid> 
<description>
<![CDATA[ 
	最近阿权细看了一下apache的编译选项，特觉得这个就比较合适：<br/><br/><div class="code">./configure &#92;<br/>--prefix=/Data/apps/apache &nbsp;&#92;<br/>--enable-expires &#92;<br/>--enable-proxy &#92;<br/>--enable-deflate &#92;<br/>--enable-rewrite &#92;<br/>--enable-headers &#92;<br/>&amp;&amp; make &amp;&amp; make install</div><br/><br/>尝试这样的代码的过程可以小说明一下，文章后有相应的配置参考<br/><br/>1 默认安装，仅指定prefix<br/>然后查看一下已经加载的模块<br/><br/><div class="code">/Data/apps/apache/bin/apachectl -t -D DUMP_MODULES</div><br/><br/>2 其实安装一般都是对模块的选择会有所需求，上面的命令可以知道已经安装了默认的模块，还需要哪些模块呢？也许得先摘抄一下apache手册的说明：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">模块选项<br/>有两种使用模块的方法：一是静态连接进核心，二是作为DSO模块动态加载；如果编译中包含任何DSO模块，则mod_so会被自动包含进核心。如果希望核心能够装载DSO，但不实际编译任何DSO模块，则需明确指定&quot;--enable-so=static&quot;。<br/><br/>一般语法<br/>一般情况下你可以使用如下语法启用或者禁用某个模块：<br/><br/>--disable-MODULE <br/>禁用MODULE模块(仅用于基本模块) <br/>--enable-MODULE=shared <br/>将MODULE编译为DSO(可用于所有模块) <br/>--enable-MODULE=static <br/>将MODULE静态连接进核心(仅用于扩展和实验模块) <br/>--enable-mods-shared=MODULE-LIST <br/>将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块) <br/>--enable-modules=MODULE-LIST <br/>将MODULE-LIST静态连接进核心(可用于所有模块) <br/><br/>上述 MODULE-LIST 可以是：<br/>(1)用引号界定并且用空格分隔的模块名列表<br/><br/>--enable-mods-shared=&#039;headers rewrite dav&#039; <br/><br/>(2)&quot;most&quot;(大多数模块) &nbsp; (3)&quot;all&quot;(所有模块)<br/><br/>--enable-mods-shared=most </div></div><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">模块列表<br/>基本(B)模块默认包含，必须明确禁用；扩展(E)/实验(X)模块默认不包含，必须明确启用。<br/><br/>（省略模块列表）</div></div><br/><br/>默认不选择模块，那就会安装好基本的模块，一般都需要的，如果是选择most，则包含基本模块和扩展模块，如果选择all，则真的是全部 ^_^<br/><br/>选择DSO方式到时候会有一堆的loadmodule，自己不需要的就可以注释掉<br/><br/><strong>那其实我们一般都是选择安装哪些扩展模块就好了，哪些有用呢？</strong><br/><br/>--enable-expires &#92;<br/>（可以添加文件过期的限制，有效减轻服务器压力，缓存在用户端，有效期内不会再次访问服务器，除非按f5刷新，但也导致文件更新不及时）<br/>--enable-proxy &#92;<br/>（代理功能有必要，因为可以处理跨域问题以及可以分离一些其它的请求处理）<br/>--enable-deflate &#92;<br/>（压缩功能，网页可以达到40%的压缩，节省带宽成本，但会对cpu压力有一点提高）<br/>--enable-rewrite &#92;<br/>（可以做重新，比较实用，文件有变化时很好）<br/>--enable-headers &#92;<br/>（文件头信息改写，压缩功能需要）<br/><br/>其它的扩展功能就可以参考手册了，这里不一一描述，仅描述阿权觉得比较实用的几个扩展模块，下面是摘录的配置方法(仅供参考)：<br/><br/><div class="code">## www.aslibra.com<br/>## code by hqlulu<br/><br/>############# gzip ############<br/><br/>&lt;Location /&gt;<br/> &nbsp; SetOutputFilter DEFLATE<br/> &nbsp; BrowserMatch ^Mozilla/4 gzip-only-text/html<br/> &nbsp; BrowserMatch ^Mozilla/4&#92;.0&#91;678&#93; no-gzip<br/> &nbsp; BrowserMatch &#92;bMSIE !no-gzip !gzip-only-text/html<br/> &nbsp; SetEnvIfNoCase Request_URI &#92;.(?:gif&#124;jpe?g&#124;png&#124;swf&#124;exe&#124;ico)$ no-gzip dont-vary<br/> &nbsp; Header append Vary User-Agent env=!dont-vary<br/>&lt;/Location&gt;<br/><br/>############# expire ############<br/><br/>&lt;IfModule expires_module&gt;<br/> &nbsp;ExpiresActive On<br/> &nbsp;ExpiresDefault &quot;access plus 1 day&quot;<br/> &nbsp;ExpiresByType image/gif &quot;access plus 1 month&quot;<br/> &nbsp;ExpiresByType image/jpeg &quot;access plus 1 month&quot;<br/> &nbsp;ExpiresByType image/png &quot;access plus 1 month&quot;<br/> &nbsp;ExpiresByType text/html &quot;access plus 12 hours&quot;<br/> &nbsp;ExpiresByType text/css &quot;access plus 12 hours&quot;<br/> &nbsp;ExpiresByType text/javascript &quot;access plus 12 hours&quot;<br/>&lt;/IfModule&gt;<br/><br/>############ proxy<br/><br/>#ProxyPass &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/aslibra http://aslibra.com/blog<br/>#ProxyPassReverse &nbsp; &nbsp; /aslibra http://aslibra.com/blog<br/><br/>############ rewrite<br/><br/> &nbsp; &nbsp;RewriteEngine On<br/> &nbsp; &nbsp;RewriteRule ^/blog/test&#91;0-9&#93;&#123;1,&#125;&#92;.htm$ /blog/index.php<br/></div><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1013.htm</link>
<title><![CDATA[版本控制：Subversion和Apache的配置]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Sun, 09 Mar 2008 13:58:55 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1013.htm</guid> 
<description>
<![CDATA[ 
	最近一直在发现自己的很多知识盲点 ^_^ ，其中之一就是cvs或者svn的知识。这个是多人工作的有效方式，曾经一次是处理后台程序的时候，两个人都不知道是什么情况下修改的，所以，如果有一个版本控制的软件，那其实非常棒，也知道每次修改是出于什么原因。<br/><br/>先解读一下基础知识然后再继续笔记内容：<br/><br/><strong>1 什么是版本控制？</strong><br/><br/>参考一下《<a href="http://www.ibm.com/developerworks/cn/java/j-subversion/" target="_blank">Subversion 简介</a>》：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">版本控制之于程序员，就好比安全网之于高空秋千表演者。知道安全网就在那里，万一自己摔落它能够提供保护，高空秋千表演者才能放心大胆地在空中飞跃。同样，版本控制使您有能力去冒以往想都不敢想的风险。如果哪儿出了错，您总是可以使自己的代码回复到一个已知的、工作正常的版本。您可以在不触及主干的分支中进行试验，而不会影响到其他小组成员。在已经发布的产品的较老版本中发现 bug 时，您可以轻松检出特定版本，以确认、修订，并生成该 bug 的修补程序。如果没有版本控制，您必须极为慎之又慎，缓慢地推进，总而言之，生产力会更低。<br/><br/>Subversion 是一种开放源码的全新版本控制系统，支持可在本地访问或通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、回复和分支功能性，Subversion 还增加了追踪移动和删除的能力。此外，它支持非 ASCII 文本和二进制数据，所有这一切都使 Subversion 不仅对传统的编程任务非常有用，同时也适于 Web 开发、图书创作和其他在传统方式下未采纳版本控制功能的领域。</div></div><br/><br/><strong>2 版本控制流程是怎么样的？</strong><br/><br/>版本控制一般是本机客户端从服务器上更新得到最新的一份文件，然后修改具体的文件，再更新到服务器，服务器管理好每个更新。如果文件同时分配到两个客户端，两个客户端提交更改，那只有一个可以更新，另外一个只能从新的版本修改提交更新，或者返回两个版本的文件，给你参考。<br/><br/>Subversion 可以使用基于http协议的WebDAV/DeltaV协议进行网络通讯，并由Apache服务器提供源码仓库方的网络浏览服务。这为 Subversion提供了比CVS更好的协同工作能力，并提供了各式各样的自由的关键特性：授权，基于路径的授权，线性压缩，以及基本源码仓库浏览。<br/><br/><strong>3 如何重新编译软件？</strong><br/><br/>首先是apache的配置，如果现有apache了，那就可以考虑更新了，但是问题来了，不能影响现有服务怎么办？我以前一头雾水，担心操作失误。那其实要添加模块文件的编译方法已经实践过了，见《<a href="http://www.aslibra.com/blog/read.php?1011" target="_blank">如何向已经安装好的apache添加一个模块</a>》<br/><br/>还有一个方法给已经编译的软件做修改，configure程序的参数是会被记录起来，放置到同目录的config.nice文件中，我是从apache的文档里面发现的：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">小幅度的版本升级(例如：2.2.55→2.2.57)很容易。make install 的过程不会改写任何已经存在的文档、日志、配置文件。此外，开发者也会尽量兼容上一版本的configure选项、运行时配置、模块API 。大多数情况下，你将能够使用与上一版本完全相同的configure命令行和运行时配置，而你原来的所有模块也将正常工作。<br/><br/>如果你保存了上一次安装后build子目录中的config.nice文件，升级将更加平滑。这个文件精确地保存了所有对目录树进行配置的configure命令行。你只需要将config.nice文件复制到新的源代码目录树的根文件夹并进行你希望的修改后。。。。。</div></div><br/><br/>所以，直接从文件里面就可以知道上次的参数，这样就不用担心重新编译会把某些功能丢失了，但至少你保留了源文件的情况哦。<br/><br/><strong>4 如何配置apache和subversion？</strong><br/><br/>人都是学习知道的，我参考了一下别人的方法，发现这篇文章不错：《<a href="http://fred.webcan.cn/weblog/tag/svn/" target="_blank">SVN服务器搭建完全手册</a>》，这个是看了很多文章知道的，因为我按照别的安装过程碰到问题在这里似乎都想到了。<br/><br/>阿权的服务器没有什么特别的，所以简单来讲，需要两个内容：<br/>1 apache需要支持so，同时加载相应的svn模块<br/>2 安装subversion时才会生成该模块，同时自动添加到apache的配置里，需要声明apr等的路径，否则不正常<br/><br/><strong>apache的配置：</strong><br/><br/>./configure --enable-dav --enable-so --enable-maintainer-mode<br/>这个是subversion的INSTALL文件说明的参数，这个是跟subversion有关的，dav是验证模块，另外一个可以参考apache的手册，自行选择了：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">--enable-maintainer-mode <br/>使用所有警告和调试符号编译源代码，请勿用于正式服务器，它会影响性能。</div></div><br/><br/><div class="code"> &nbsp; &nbsp; &nbsp;LoadModule dav_module &nbsp; &nbsp; &nbsp; &nbsp; modules/mod_dav.so<br/> &nbsp; &nbsp; &nbsp;LoadModule dav_fs_module &nbsp; &nbsp; &nbsp;modules/mod_dav_fs.so</div><br/><br/>上面是dav产生的两个模块，其实如果已经有这两个模块加载了，就不用重新编译apache，怎么看呢？phpinfo也可以简单的知道，有一个栏目是“apache2handler”，显示 Loaded Modules ，有这些模块就可以免得重新编译了。<br/><br/><strong>subversion的安装：</strong><br/><br/>./configure --with-apxs=/usr/local/apache2/bin/apxs &#92;<br/>--with-apr=/home/src/server/httpd-2.2.2/srclib/apr &#92;<br/>--with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-util <br/><br/>这个是一个参考的参数，后面两个要添加，是指向apache源文件的目录的相关文件，如果没有指定，就会出现这样的错误：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">–with-apr 和 –with-apr-util 如果没有加上的话，即使编译成功了也会出现 <br/>Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument </div></div><br/><br/>阿权也碰到这样的问题，所以大家可以放心的这样做了。<br/><br/><strong>5 如何开始简单的使用？</strong><br/><br/>简单的使用可以参考更多的教程了，不细说了。<br/>1 服务器上创建新项目<br/># su daemon #(apache是以daemon用户运行的,所以要切换身份，否则可能会报目录访问权限错误)<br/># svnadmin create --fs-type fsfs /home/svn/Lair <br/>（如果用别的用户创建的项目，懒人可以把文件都改777 ^_^ ）<br/><br/>2 给apache添加应用<br/><br/><div class="code">&lt;VirtualHost *:80&gt;<br/> &nbsp; &nbsp;DocumentRoot &quot;/Data/webapps/default&quot;<br/> &nbsp; &nbsp;ServerName www.aslibra.com<br/> &nbsp;&lt;Location /svn/Lair&gt;<br/> &nbsp; &nbsp;DAV svn<br/> &nbsp; &nbsp;SVNPath /svn/Lair<br/> &nbsp; &nbsp;AuthType Basic<br/> &nbsp; &nbsp;AuthName &quot;Subversion repository&quot;<br/> &nbsp; &nbsp;AuthUserFile /etc/svn-auth-file<br/> &nbsp; &nbsp;Require valid-user<br/> &nbsp;&lt;/Location&gt;<br/>&lt;/VirtualHost&gt;</div><br/><br/>3 新建和修改授权文件<br/>htpasswd -c /etc/svn-auth-file aslibra<br/>输入密码就可以了，另外，root创建的这个文件，默认组和其他都无法读取的，所以需要修改权限哦<br/><br/>4 重启apache后就可以访问了<br/>http://www.aslibra.com/svn/Lair<br/><br/>简单就介绍到这里，本笔记也算至少可以把环境处理完毕，剩下是怎么利用好svn的问题了，以后再说。<br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.aslibra.com/blog/go.php/tags/svn/" rel="tag">svn</a> , <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1011.htm</link>
<title><![CDATA[如何向已经安装好的apache添加一个模块]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Sat, 08 Mar 2008 04:33:45 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1011.htm</guid> 
<description>
<![CDATA[ 
	以前一直有这样的需求，是说apache缺少我需要的模块，可是如何在不影响现有程序的基础上，直接添加一个loadModule呢，但是模块文件从哪里来？从另外一个系统复制一份过来是否可行？虽然只是一个 foo.so 文件，放到module文件夹就可以了，但我还是查了一下资料，找到合适的方法，并且尝试过了。<br/><br/>这个是<a href="http://hi.baidu.com/howard_2008/blog/item/33cda0c71e9794d8d10060d5.html" target="_blank">原文</a>：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><strong>apache 添加 mod_rewrite 模块</strong><br/><br/>我使用的是httpd 2.0.55 注意配置httpd.conf 时 是 rewrite_module 而不是 mod_rewrite<br/><br/>1、Apache安装rewrite模块的时候需要DBM支持，否则无法编译。使用rpm -qa gdbm 查询，如果没有，需要先下载并安装gdbm：<br/>下载地址：ftp://ftp.gnu.org/gnu/gdbm/<br/><br/>安装步骤: <br/>./configure<br/>make<br/>make install<br/>make install-compat (如果不执行此步,无法编译出ndbm.h头文件)<br/><br/>2、安装<br/>#cd /root/src/httpd-2.0.55/modules/mappers<br/>#/usr/local/apache/bin/apxs -c mod_rewrite.c <br/>#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm<br/>#/usr/local/apache/bin/apxs -i -A -n mod_rewrite mod_rewrite.so <br/><br/>/usr/local/apache/bin/ 是我正在使用的apahce的目录<br/><br/>3、配置httpd.conf<br/>加入 LoadModule rewrite_module modules/mod_rewrite.so <br/><br/>注意是 rewrite_module 而不是 mod_rewrite </div></div><br/><br/>过程其实很容易理解：<br/>1 在httpd的源文件里面找到 foo.c<br/>2 运行程序编译出 foo.so<br/>3 在httpd.conf添加进来<br/><br/>这里面要注意的两点：<br/>1 foo.c是按功能放置在modules目录的，自己找到相应目录<br/>2 loadModule命令默认是注释的，要去掉后还要改一下名称<br/><br/><strong>下面是尝试expires功能的添加：</strong><br/><br/>cd modules/metadata/<br/>（expires属于metadata功能部分的）<br/>/Data/apps/apache/bin/apxs -c mod_expires.c<br/>gcc -shared -o mod_expires.so mod_expires.o -lgdbm<br/>/Data/apps/apache/bin/apxs -i -A -n mod_expires mod_expires.so<br/><br/>编辑httpd.conf文件<br/>LoadModule expires_module modules/mod_expires.so<br/><br/>然后测试一下：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>[root@localhost apache]# ./bin/apachectl -t<br/>Syntax OK<br/>[root@localhost apache]# ./bin/apachectl graceful<br/></div></div><br/><br/>这个模块很实用，可以给你带来带宽的节省<br/>比如如下配置：<br/><br/><div class="code"> &nbsp; &nbsp;&lt;IfModule mod_expires.c&gt;<br/> &nbsp; &nbsp; &nbsp; &nbsp;ExpiresActive On<br/> &nbsp; &nbsp; &nbsp; &nbsp;ExpiresDefault &quot;access plus 6 hours&quot;<br/> &nbsp; &nbsp; &nbsp; &nbsp;ExpiresByType text/html &quot;access plus 0 hours&quot;<br/> &nbsp; &nbsp;&lt;/IfModule&gt;</div><br/><br/>启用expires，默认缓存6小时，但不缓存 text/html<br/>也就是访问阿权的网页<br/>http://www.aslibra.com/blog/read.php?132 不会缓存网页<br/>http://www.aslibra.com/blog/up/1158240093.jpg 缓存图片和脚本等<br/><br/>意思就是这样了<br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a> , <a href="http://www.aslibra.com/blog/go.php/tags/linux/" rel="tag">linux</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/post/apache-log.php</link>
<title><![CDATA[apache配置和日志]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Tue, 06 Nov 2007 15:02:21 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/apache-log.php</guid> 
<description>
<![CDATA[ 
	阿权今天处理了apache的配置问题：<br/>1 设置环境变量<br/>2 处理盗链方法<br/>3 日志分割保存<br/><br/><strong>1 设置环境变量</strong><br/><br/>在apache里面，你可以用正则来判断很多变量，然后设定另外一个变量以便后面的配置使用<br/>比如你要判断用户是否访问某个文件夹，然后设定一个变量记录一下：<br/><div class="code">SetEnvIfNoCase Request_URI &quot;^&#92;/aslibra&quot; ISSTART=1</div><br/><br/>SetEnvIfNoCase 是指不区分大小写<br/>Request_URI匹配一下 &quot;^&#92;/aslibra&quot;<br/>如果是的话，那ISSTART=1，否则就不是1<br/><br/>另外，不记录图片的日志可以是找一下文件路径，然后设定变量供后面使用：<br/><div class="code">&lt;FilesMatch &quot;&#92;.(ico&#124;gif&#124;jpg&#124;png&#124;swf)&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;SetEnv NOFILES 1 <br/>&lt;/FilesMatch&gt; <br/><br/>CustomLog logs/access_log combined env=!NOFILES</div><br/><br/><strong>2 处理盗链</strong><br/><br/>处理盗链一般是在referrer上做判断，见下面这个例子：<br/><br/><div class="code">SetEnvIfNoCase Referer &quot;^http://www&#92;.aslibra&#92;.com/&quot; local_ref=1<br/>&lt;FilesMatch &quot;&#92;.(rar&#124;zip&#124;iso&#124;dmg&#124;exe&#124;rmvb)&quot;&gt;<br/>Order Allow,Deny<br/>Allow from env=local_ref<br/>Allow from 127.0.0.1<br/>&lt;/FilesMatch&gt;</div><br/><br/>上面是判断来源是上面域名，然后设定为允许访问<br/><br/><div class="code">&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIfNoCase Referer &quot;^http://notpermit&#92;.aslibra&#92;.com/&quot; aaa<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;FilesMatch &quot;&#92;.(rar&#124;zip&#124;iso&#124;dmg&#124;exe&#124;rmvb&#124;gif&#124;jpg)&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order Allow,Deny<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deny from env=aaa<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/FilesMatch&gt;</div><br/><br/>上面是判断来源，然后不允许该域名<br/><br/>3 日志分割<br/><br/>日志分割可以使用 <a href="http://www.cronolog.org/" target="_blank">cronolog</a> 来处理<br/>安装就比较容易了，跟一般软件一样安装<br/><br/><strong>安装过程介绍：</strong><br/>1 获取文件<br/>wget http://cronolog.org/download/cronolog-1.6.2.tar.gz<br/>2 解压<br/>tar -zxvf cronolog-1.6.2.tar.gz<br/>3 编译<br/>./configure --prefix=/Data/apps/cronolog<br/>make<br/>make intall<br/><br/>定义格式：<br/><div class="code"><br/>LogFormat &quot;%h %l %u %t &#92;&quot;%r&#92;&quot; %&gt;s %b &#92;&quot;%&#123;Referer&#125;i&#92;&quot; &#92;&quot;%&#123;User-Agent&#125;i&#92;&quot;&quot; combined<br/>LogFormat &quot;%h %l %u %t &#92;&quot;%r&#92;&quot; %&gt;s %b&quot; common<br/>LogFormat &quot;%&#123;Referer&#125;i -&gt; %U&quot; referer<br/>LogFormat &quot;%&#123;User-agent&#125;i&quot; agent<br/><br/>LogFormat &quot;%h %&#123;%T&#125;t &#92;&quot;%r&#92;&quot; %&#123;cookiename&#125;C&quot; record</div><br/><br/>上面是定义日志格式，你可以定义很多日志格式，以便后面的记录日志使用<br/>比如普通的是combined，有一般要采集的内容，如果要采集cookie（%&#123;cookiename&#125;C）和自定义时间格式（%&#123;%T&#125;t），可以使用上面类似record的写法<br/><br/><div class="code">CustomLog &quot;&#124;/Data/apps/cronolog/sbin/cronolog /Data/weblog/%Y/%m/%d/www.aslibra.com.%m%d%H&quot; record<br/>CustomLog &quot;&#124;/Data/apps/cronolog/sbin/cronolog /Data/weblog/%Y/%m/%d/aslibra.com.%m%d%H&quot; combined</div><br/><br/>以上的例子就是调用cronolog存储日志，后面的参数是自己定义的日志格式<br/>当然，你还可以自定义记录很多条件的日志，比如仅仅要记录 /aslibra 开始的请求：<br/><br/><div class="code">SetEnvIfNoCase Request_URI &quot;^&#92;/aslibra&quot; ISSTART=1<br/>CustomLog &quot;&#124;/Data/apps/cronolog/sbin/cronolog /Data/weblog/%Y/%m/%d/aslibra.com.%m%d%H&quot; record env=ISSTART</div><br/><br/>可以几个CustomLog一起记录的，以此类推就好了<br/><br/>也有一些别的例子：<br/><br/><div class="code"># 不记录本机发出的请求<br/>SetEnvIf Remote_Addr &quot;127&#92;.0&#92;.0&#92;.1&quot; dontlog<br/># 不记录对robots.txt文件的请求<br/>SetEnvIf Request_URI &quot;^/robots&#92;.txt$&quot; dontlog<br/># 记录其他请求<br/>CustomLog logs/access_log common env=!dontlog</div><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/924.htm</link>
<title><![CDATA[怎样优化Apache服务器的性能]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Sun, 04 Nov 2007 12:34:35 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/924.htm</guid> 
<description>
<![CDATA[ 
	在查apache资料，这个文章不错，摘录一下，有空看：<br/><br/><strong>测试与提高性能</strong> <br/><br/>Apache服务器已经被设计得尽可能的快，即使你用一台配置不高的机器，用不着进行太复杂的设置，它的响应内容就足以塞满以前的各种窄带连接。但随网站内容日益复杂和带宽的增加，对Apache进行优化以取得更好的性能变得日益重要起来。 <br/><br/>如果优化的结果仅仅是极小的性能提升那真是浪费时间。试想一下，你花了好几个小时甚至几天调整Apache的各种参数但结果仅是几个百分点的性能提升?因此，在优化前你做的第一步应该是测试你目前的服务器的性能水平以便决定如何优化你的服务器并衡量优化的效果。 <br/><br/>关于对Apache的测试我们已经不是第一次提到了(见《冲出水面》一文)，如同我们以前提到的，确定到底是哪一部分导致的瓶颈往往是一件困难的事，是因为Apache本身的设置问题还是由于你使用的动态网站程序环境?关于查找是否是因为网站程序引起的问题已经超出了本文的范围，这里我们主要讲一下提高Apache服务器速度的一些通常做法以及它如何与构成WEB网站的其它组件进行交互。 <br/><br/><strong>主机硬件</strong> <br/><br/>Apache所在的机器与操作系统环境是对性能影响最大因素，很明显，一以368的PC与一台P4或双处理器的机器不会有同样的性能。不过，如果不涉及硬件的改变，我们可以做的最大的事是首先看一下Apache是否运行在一台专用的服务器上，如果与其它应用共用一台服务器肯定会影响服务器的性能。 <br/><br/>在大多数情况下，告别是对静态网站而言，内存数量是一个影响性能的关键因素，因为它决定了Apache可以缓存多少内容。它缓存的内容越多，在硬盘上读取内容的机会就越少，而存取硬盘上的特定文件是一件很费时的操作。如果你的网站主要是一些静态内容，你最好使用mod_cache选项，如果你的内存足够大，可以使用mod_mem_cache选项。 <br/><br/>第一个选项将信息缓存在磁盘上，当它与mod_include选项一起使用时会有很好的效果，这个选项在建立一个页面时在缓存中保存它的最终版本。使用mod_mem_cache将缓存内容保存在一个可以被所有Apache进程共享的内存堆中。 <br/><br/>使用更快的磁盘或进一步使用RAID可以提高Apache对磁盘文件的访问速度。注意，如果你做了下面的所有这些优化，一个硬件的(而非软件)升级方案是更好的选择。最后一个谈到的关于硬件的问题是CPU能力，这对动态内容网站的影响很大，动态内容越多要求越高。 <br/><br/>通过挤出Apache服务器的每一分潜力你可以让你的网站留给别人的印象大大改观，特别是对一些动态网站更是如何。这篇文章主要涉及到对Apache服务器的安装和设置如何进行优化，这也是你最有控制权的部分。 <br/><br/><strong>测试与提高性能 </strong><br/><br/>Apache服务器已经被设计得尽可能的快，即使你用一台配置不高的机器，用不着进行太复杂的设置，它的响应内容就足以塞满以前的各种窄带连接。但随网站内容日益复杂和带宽的增加，对Apache进行优化以取得更好的性能变得日益重要起来。 <br/><br/>如果优化的结果仅仅是极小的性能提升那真是浪费时间。试想一下，你花了好几个小时甚至几天调整Apache的各种参数但结果仅是几个百分点的性能提升?因此，在优化前你做的第一步应该是测试你目前的服务器的性能水平以便决定如何优化你的服务器并衡量优化的效果。 <br/><br/>关于对Apache的测试我们已经不是第一次提到了(见《冲出水面》一文)，如同我们以前提到的，确定到底是哪一部分导致的瓶颈往往是一件困难的事，是因为Apache本身的设置问题还是由于你使用的动态网站程序环境?关于查找是否是因为网站程序引起的问题已经超出了本文的范围，这里我们主要讲一下提高Apache服务器速度的一些通常做法以及它如何与构成WEB网站的其它组件进行交互。 <br/><br/><strong>主机硬件</strong> <br/><br/>Apache所在的机器与操作系统环境是对性能影响最大因素，很明显，一以368的PC与一台P4或双处理器的机器不会有同样的性能。不过，如果不涉及硬件的改变，我们可以做的最大的事是首先看一下Apache是否运行在一台专用的服务器上，如果与其它应用共用一台服务器肯定会影响服务器的性能。 <br/><br/>在大多数情况下，告别是对静态网站而言，内存数量是一个影响性能的关键因素，因为它决定了Apache可以缓存多少内容。它缓存的内容越多，在硬盘上读取内容的机会就越少，而存取硬盘上的特定文件是一件很费时的操作。如果你的网站主要是一些静态内容，你最好使用mod_cache选项，如果你的内存足够大，可以使用mod_mem_cache选项。 <br/><br/>第一个选项将信息缓存在磁盘上，当它与mod_include选项一起使用时会有很好的效果，这个选项在建立一个页面时在缓存中保存它的最终版本。使用mod_mem_cache将缓存内容保存在一个可以被所有Apache进程共享的内存堆中。 <br/><br/>使用更快的磁盘或进一步使用RAID可以提高Apache对磁盘文件的访问速度。注意，如果你做了下面的所有这些优化，一个硬件的(而非软件)升级方案是更好的选择。最后一个谈到的关于硬件的问题是CPU能力，这对动态内容网站的影响很大，动态内容越多要求越高。<br/><br/><strong>服务器设置</strong> <br/><br/>如果你的环境已经建立Apache也已经经过优化，就可以查看你的设置文件来进行下一步的优化措施。一个好的方法就是简化你的设置文件将文件中的指示(directives)减少到几百行内，首先是删除掉那些注释行，进而删除任何非必要的内容。 <br/><br/><strong>简化设置文件</strong> <br/><br/>第一步是简化设置设置文件，它并不带来任何直接的性能提升，但它将使设置文件易于使用减少你出错的机会。 <br/><br/>在进行优化之前，从一个默认提供的设置文件开始是一个不错的主意。这些文件常被放在Apache的设置目录中，文件名为 httpd.conf.orig或者 httpd-std.conf，不要使用如performance-std.conf类似名称的文件，从长远的观点看，如果你准备在里面加入大量的附加设置信息，它决不是一个好起点。另一方面，如果你的目标是建立一个很快的静态WEB服务器，这可能是让服务器运行起来的最简单方法。 <br/><br/>如果你熟悉Apache的设置指示用法或乐意浏览帮助文件，你可以从设置文件中删除所有的注释内容，因为它们经常让实际的指示内容变得难找，你也可以删除对当前平台上用不到的多处理机方式(MPM)的引用。 <br/><br/><strong>禁用模块 </strong><br/><br/>现在，我们已经得到了一个清爽的设置文件，下面我们可以开始删除其中我们系统用不到的元素，特别是: <br/><br/>●HostnameLookups(主机名查找)，这增加了处理每个请求的开销，首先，服务器会对DNS系统做一个反向查询以找出客户系统的主机名，然后又进行正向查询看获得的主机名是否真实指向客户的IP。大多数情况下，你可以简单的关闭这个功能，如果你经常处理服务器日志，这个工作完全可以在以后进行。你可以通过在设置文件中加入指示HostnameLookups off来关闭这个功能。 <br/><br/>●符号连接。当打开这个选项时，Apache将检查每个请求中是否包含对符号连接的引用，这将对请求中包含的每个路径调用一次lstat()系统调用。除非你准备使用符号连接，否则用 Options -FollowSymLinks 来关掉它。 <br/><br/>●服务器状态信息。尽管这对测试与监控服务器很有用，但它也为服务器带来了额外的开销，你可以通过寻找任何类似SetHandler server-status的指示来关闭，如果可能，你可以在安装Apache时移除这个模块。 <br/><br/>●在可以更精确的时候尽可能不要使用通配符之类的灵活选项，例如，对于DirectoryIndex指示，明确的指定设置文件列表，最常用的放在最前。 <br/><br/>●除非你有很好的理由否则就允许CGI的执行，将似有的CGI文件放到一个特定的目录并为之设定正确的权限，这避免了Apache对每一个请求都要判断一次要求的是一个静态文件还是一个动态文件。 <br/><br/><strong>禁用日志 </strong><br/><br/>写入日志信息是一个很花费时间的工作，尽管Apache保持日志文件的打开状态以节省打开文件的时间，但仍然得花费不少的时间。如果没有必要存储日志信息，你可以关闭这个选项以节省出更多的处理器时间，只需要在设置文件中把日志那一行注释掉就可以关掉它。 <br/><br/>如果必须保留日志，你可以关闭HostnameLookups选项(见上文)然后把日志文件拷备到另一台机器上做进一步分析。 <br/><br/><strong>简化目录级的设置 </strong><br/><br/>htaccess文件可以极大的扩展Apache的设置参数，而无需每次你改变设计都要编辑Apache主设置文件，但对这个文件的使用也降低了服务器的性能。 <br/><br/>如果使用这个文件，Apache必需首先在当前目录中查找是否存在这个文件，如果存在就解析这个文件并在当前目录中应用文件中的设置。更坏的是，Apache不仅要查看当前的目录，还要查看当前目录的所有上层目录是否包括htaccess文件以根据所有这些文件最终确定设置。 <br/><br/>如果你想最优化服务器的性能，你应该禁止使用htaccess文件，任何基本目录的设置都可以在主设置文件中进行，而主设置文件仅在服务器启动时解析一次。为了禁用htaccess文件，在任何节里加上指示AllowOverride None。 <br/><br/><strong>多处理方式设置</strong> <br/><br/>多处理方式(Multi-Processing Module/MPM)他允许特定平台处理多个并发连接。MPM模块是平台相关的，对于Unix、Windows、BeOS、和NetWare有不同的解决方案，一些平台有不止一个方案可以选择。对大多数用户而言，对于特定平台的默认设置已经工作得很好，而精确调整这些参数是一个费时的工作。不过如果你想最大限度的挖掘Apache的潜力，你必须调整这些设置。 <br/><br/>对大多数平台而言，只有一种MPM可选，不过在UNIX下则有两个选项:prefork与worker，prefork模式生成多个相同的 Apache进程，而worker模式创建多个线程。通常而言，对于只有一到两颗处理器的系统，prefork模式工作得更好，而对于拥有更多处理器的系统，线程模型工作得更有效率。 <br/><br/>不管哪种情况，MaxClients指示是最有效的提高服务器性能的方法，它控制了Apache可以处理的最大并发连接数。 <br/><br/><strong>优化静态内容</strong> <br/><br/>如果你的WEB服务器使用了大量静态内容或者你分别用两个WEB服务器处理动态和静态内容，那么你现在的主要目标就是缩短服务器发送被请求内容的响应时间，最简单的方法就是使用mod_cache缓存模块。你可以使用mod_disk_cache和mod_mem_cache来分别提供基于磁盘的缓存和基于内存的缓存。 <br/><br/>你可以查看关于mod_cache的说明文件以取得进一步的信息。 <br/><br/><strong>优化动态内容</strong> <br/><br/>动态内容可能是所有WEB服务器中最消费时间的部分，特别是使用CGI的时候，一个简单的程序都可能会把响应时间增加好几秒。 <br/><br/>使用基于脚本的方案的一大好处是它们在Apache里装入了解释器，这就减少了执行时再装入解释器的时间，一些方案还把解析过的脚本缓存起来，这样下一次遇到同样的请求就可以直接执行而无需再次解析 <br/><br/>对特定系统的调整优化很复杂而且很花时间，而且你需要调整特定的脚本以利用优化的成果。 <br/><br/>不过对动态内容的优化效果是非常明显的，仅仅是把perl脚本的执行模式从CGI转到mod_perl就可以减少多达70%的执行时间，如果我们进一步，还可以使用到数据库的持久连接或在多次请求之间缓存信息，这对电子商务网站非常有用，它也减小了不同请求间重复装载信息的开销。 <br/><br/><strong>总结</strong> <br/><br/>尽管Apache是一个高可定制的功能强大且相当复杂的服务器软件，我们很有兴趣的注意到即使是Apache的标准安装也可以得到不错的性能。调整Apache的设置参数是一个可以轻易显著提高服务器性能的方法。但不幸的是，常常我们在Apache里最无法控制的内容--例如网站的动态内容脚本和CGI是影响网站性能的最重要方面，如果你管理一个典型的Apache服务器你会发现Apache响应一个传入连接以及最后把内容发送给客户的所花费的时间是以毫秒记的，而等待所需数据资源的时间常常达到几秒钟。 <br/><br/>当然，这并不是说我们的优化工作没什么意义，优化的效果日积月累也不可小视。另外，重要的是，通过简化你的设置文件，你可以大大减小服务器的管理负担。<br/><br/><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/916.htm</link>
<title><![CDATA[apache的ab程序]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[Apache]]></category>
<pubDate>Thu, 25 Oct 2007 15:24:03 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/916.htm</guid> 
<description>
<![CDATA[ 
	apache自带一个测试程序，也就是bin目录下的ab.exe。<br/>摘抄一些文字，以后参考一下并且写一下优化方法<br/><br/><hr/><br/><br/>ab网站压力测试命令的参数、输出结果的中文注解<br/> &nbsp; &nbsp;<br/>permalink<br/> &nbsp; &nbsp;<br/><br/>以前安装好APACHE总是不知道该如何测试APACHE的性能，现在总算找到一个测试工具了。就是APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下。<br/>格式： ./ab [options] [http://]hostname[:port]/path<br/>参数：<br/>-n requests Number of requests to perform<br/>//在测试会话中所执行的请求个数。默认时，仅执行一个请求<br/>-c concurrency Number of multiple requests to make<br/>//一次产生的请求个数。默认是一次一个。<br/>-t timelimit Seconds to max. wait for responses<br/>//测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时，没有时间限制。<br/>-p postfile File containing data to POST<br/>//包含了需要POST的数据的文件.<br/>-T content-type Content-type header for POSTing<br/>//POST数据所使用的Content-type头信息。<br/>-v verbosity How much troubleshooting info to print<br/>//设置显示信息的详细程度 - 4或更大值会显示头信息， 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。<br/>-w Print out results in HTML tables<br/>//以HTML表的格式输出结果。默认时，它是白色背景的两列宽度的一张表。<br/>-i Use HEAD instead of GET<br/>// 执行HEAD请求，而不是GET。<br/>-x attributes String to insert as table attributes<br/>//<br/>-y attributes String to insert as tr attributes<br/>//<br/>-z attributes String to insert as td or th attributes<br/>//<br/>-C attribute Add cookie, eg. &#039;Apache=1234. (repeatable)<br/>//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。<br/>-H attribute Add Arbitrary header line, eg. &#039;Accept-Encoding: gzip&#039;<br/>Inserted after all normal header lines. (repeatable)<br/>-A attribute Add Basic WWW Authentication, the attributes<br/>are a colon separated username and password.<br/>-P attribute Add Basic Proxy Authentication, the attributes<br/>are a colon separated username and password.<br/>//-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开，并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码)，此字符串都会被发送。<br/>-X proxy:port Proxyserver and port number to use<br/>-V Print version number and exit<br/>-k Use HTTP KeepAlive feature<br/>-d Do not show percentiles served table.<br/>-S Do not show confidence estimators and warnings.<br/>-g filename Output collected data to gnuplot format file.<br/>-e filename Output CSV file with percentages served<br/>-h Display usage information (this message)<br/>//-attributes 设置 属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外，对命令行参数、服务器的响应头和其他外部输入的解析也很简单，这可能会有不良后果。它没有完整地实现 HTTP/1.x; 仅接受某些&#039;预想&#039;的响应格式。 strstr(3)的频繁使用可能会带来性能问题，即, 你可能是在测试ab而不是服务器的性能。<br/><br/>参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:<br/><br/>./ab -c 1000 -n 1000 http://127.0.0.1/index.php<br/><br/>这个表示同时处理1000个请求并运行1000次index.php文件.<br/>#/usr/local/xiaobai/apache2054/bin/ab -c 1000 -n 1000 http://127.0.0.1/index.html.zh-cn.gb2312<br/>This is ApacheBench, Version 2.0.41-dev &lt;$Revision: 1.121.2.12 $&gt; apache-2.0<br/>Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br/>Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/<br/><br/>Benchmarking 127.0.0.1 (be patient)<br/>Completed 100 requests<br/>Completed 200 requests<br/>Completed 300 requests<br/>Completed 400 requests<br/>Completed 500 requests<br/>Completed 600 requests<br/>Completed 700 requests<br/>Completed 800 requests<br/>Completed 900 requests<br/>Finished 1000 requests<br/><br/><br/>Server Software: Apache/2.0.54<br/>//平台apache 版本2.0.54<br/>Server Hostname: 127.0.0.1<br/>//服务器主机名<br/>Server Port: 80<br/>//服务器端口<br/><br/>Document Path: /index.html.zh-cn.gb2312<br/>//测试的页面文档<br/>Document Length: 1018 bytes<br/>//文档大小<br/><br/>Concurrency Level: 1000<br/>//并发数<br/>Time taken for tests: 8.188731 seconds<br/>//整个测试持续的时间<br/>Complete requests: 1000<br/>//完成的请求数量<br/>Failed requests: 0<br/>//失败的请求数量<br/>Write errors: 0<br/><br/>Total transferred: 1361581 bytes<br/>//整个场景中的网络传输量<br/>HTML transferred: 1055666 bytes<br/>//整个场景中的HTML内容传输量<br/>Requests per second: 122.12 [#/sec] (mean)<br/>//大家最关心的指标之一，相当于 LR 中的 每秒事务数 ，后面括号中的 mean 表示这是一个平均值<br/>Time per request: 8188.731 [ms] (mean)<br/>//大家最关心的指标之二，相当于 LR 中的 平均事务响应时间 ，后面括号中的 mean 表示这是一个平均值<br/>Time per request: 8.189 [ms] (mean, across all concurrent requests)<br/>//每个请求实际运行时间的平均值<br/>Transfer rate: 162.30 [Kbytes/sec] received<br/>//平均每秒网络上的流量，可以帮助排除是否存在网络流量过大导致响应时间延长的问题<br/><br/>Connection Times (ms)<br/>min mean[+/-sd] median max<br/>Connect: 4 646 1078.7 89 3291<br/>Processing: 165 992 493.1 938 4712<br/>Waiting: 118 934 480.6 882 4554<br/>Total: 813 1638 1338.9 1093 7785<br/>//网络上消耗的时间的分解，各项数据的具体算法还不是很清楚<br/><br/>Percentage of the requests served within a certain time (ms)<br/>50% 1093<br/>66% 1247<br/>75% 1373<br/>80% 1493<br/>90% 4061<br/>95% 4398<br/>98% 5608<br/>99% 7368<br/>100% 7785 (longest request)<br/>//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间，其中50％的用户响应时间小于1093 毫秒，60％ 的用户响应时间小于1247 毫秒，最大的响应时间小于7785 毫秒<br/><br/>由于对于并发请求，cpu实际上并不是同时处理的，而是按照每个请求获得的时间片逐个轮转处理的，所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数 <br/><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.aslibra.com/blog/go.php/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item>
</channel>
</rss>