<?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>【知行合一】-Poople&#039;s Blog &#187; Cache</title>
	<atom:link href="http://99dev.net/archives/tag/cache/feed" rel="self" type="application/rss+xml" />
	<link>http://99dev.net</link>
	<description>智巧终归庸俗，雄谋只余虚话</description>
	<lastBuildDate>Wed, 12 Oct 2011 01:19:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[Collection]WP Super Cache 基本介绍</title>
		<link>http://99dev.net/archives/369</link>
		<comments>http://99dev.net/archives/369#comments</comments>
		<pubDate>Sat, 27 Dec 2008 08:32:53 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://99dev.net/?p=369</guid>
		<description><![CDATA[注：本文转载至“我爱水煮鱼”，专业详细。本人强力推荐该插件，缓存效果很明显。
WP Super Cache 基本介绍
WP Super Cache 是 WordPress 官方开发人员 Donncha 开发，是当前最高效也是最灵活的 WordPress 静态缓存插件。它直接生成 HTML 文件，这样 Apache 就不用解析 PHP 脚本，通过使用这个插件，能使得你的 WordPress 博客将显著的提速。
这个插件是基于 Ricardo Galli Granada 的 WP-Cache 2。WP-Cache 2 可以缓存你的 WordPress 博客使得不用再次访问数据库，但是它产生的是 PHP 文件而不是 HTML 文件，所以还需要 PHP 引擎去解析它们。而 WP Super Cache 则直接产生 HTML 文件，所以服务器不用解析甚至一行 PHP 代码，所以缓存之后的速度就和访问你服务器上的一张图片一样快。
<span class="readmore"><a href="http://99dev.net/archives/369" title="[Collection]WP Super Cache 基本介绍" target="_blank">阅读全文——共2623字</a></span>]]></description>
			<content:encoded><![CDATA[<p>注：本文转载至“<a href="http://fairyfish.net/2008/10/27/wp-super-cache/" target="_blank">我爱水煮鱼</a>”，专业详细。本人强力推荐该插件，缓存效果很明显。</p>
<p>WP Super Cache 基本介绍<br />
WP Super Cache 是 WordPress 官方开发人员 Donncha 开发，是当前最高效也是最灵活的 WordPress 静态缓存插件。它直接生成 HTML 文件，这样 Apache 就不用解析 PHP 脚本，通过使用这个插件，能使得你的 WordPress 博客将显著的提速。<span id="more-369"></span><br />
这个插件是基于 Ricardo Galli Granada 的 WP-Cache 2。WP-Cache 2 可以缓存你的 WordPress 博客使得不用再次访问数据库，但是它产生的是 PHP 文件而不是 HTML 文件，所以还需要 PHP 引擎去解析它们。而 WP Super Cache 则直接产生 HTML 文件，所以服务器不用解析甚至一行 PHP 代码，所以缓存之后的速度就和访问你服务器上的一张图片一样快。<br />
WP Super Cache 是如何工作的</p>
<p>一半常规的缓存办法是手工把动态页面保存为 HTML 代码，WP Super Cache 也是通过同样的方式的，但是通过自动的方式完成这个过程。</p>
<p>当你一个访问者来的你的站点，他没有登入或者也没有留言，这样他得到是一个在 WordPress cache 文件夹下的 supercache 子文件夹下的纯静态文件，其实你都可以自己到上面的 supercache 目录下去查看同样的永久链接的 HTML 文件的备份。判断一个页面是否已经被缓存了，查看该页面的源代码，看看最后一行是否有 &lt;!- super cache -&gt; 或者 &lt;!- super cache gz -&gt;。</p>
<p>如果访问者已经登陆或者留了言，就会返回 WP Cache 函数生成的页面，并且最后一行会有 &lt;!- Cached page served by WP-Cache &#8211; &gt;<br />
WP Super Cache 基本使用</p>
<p>上传 WP Super Cache 到插件目录，并在 Plugin 目录下激活之后，就可以到 Setting &gt; WP Super Cache 进行详细配置。<br />
WP Super Cache Status</p>
<p>首先是三个选项：<br />
ON (WP Cache and Super Cache enabled)<br />
HALF ON (Super Cache Disabled, only legacy WP-Cache caching.)<br />
OFF (WP Cache and Super Cache disabled)</p>
<p>默认情况下，WP Super Cache 是没有开启的，所以在这里选择下，需按则第一个，就是 Super Cache，缓存为静态文件，如果第二种情况呢，则和 WP-Cache 一致。</p>
<p>Proudly tell the world your server is Digg proof! (places a message in your blog&#8217;s footer)<br />
这个是说在你的 footer 显示一条信息告诉读者该博客已经缓存了，一般不要这样做。</p>
<p>Clear all cache files when a post or page is published. (This may significantly slow down saving of posts.)<br />
这个是说发布新日志的时候清理所有缓存，这个肯定不能这么干了。<br />
Super Cache Compression</p>
<p>启动这个则会成生 gzip 压缩，节省你的带宽。<br />
Mod Rewrite Rules</p>
<p>WP Super Cache 是通过 Mod Rewrite 实现访问静态文件的，所以这里在是显示添加的 Mod Rewrite 规则。<br />
Expiry Time and Garbage Collection</p>
<p>过期时间和垃圾收集，这里主要设置缓存文件过期时间，和多久删除一次过期的缓存文件。个人建议：一般缓存时间设置为1天（86400）左右，缓存删除时间为1个小时一次。<br />
Accepted filenames, rejected URIs</p>
<p>这里设置一些链接不需要缓存，并且可以设置特例。<br />
Rejected User Agents</p>
<p>这里设置某些 User Agents 来访问的时候不会缓存。比如 Google 和百度爬虫等。<br />
Cache Contents</p>
<p>这里显示你博客缓存文件和过期文件的数量，你可以手工删除缓存文件和过期文件，因为 WP Super Cache 有垃圾回收机制，所以这里不帮不用手工删除，如果当你测试某个插件，看不到效果的时候，如果确定是缓存的原因，你可以到这里手工删除测试下。<br />
Lock Down</p>
<p>一般情况下，某篇日志如果有了新留言，就会更新缓存文件，不过这篇日志是否已经到了缓存时间，但是在某种情况，你预料到你的博客可能会有很大流量和留言，候重复更新缓存文件可能并不是很好的选择，速度反而更慢，这个时候你就可以锁定缓存文件，新留言不再更新缓存日志。</p>
<p>插件作者也给出了一段代码，如果你的博客锁定了之后，可以通过判断一个变量 WPLOCKDOWN 是否存在告来诉读者，你博客已经锁定，待会才会更新，当然了，一般博客不建议使用。<br />
Directly Cached Files</p>
<p>直接缓存文件，根据永久链接直接缓存，比如你的关于页面是不太更新，你就可以直接缓存它到你的 about 目录下（假如你的关于页面的 slug 是 about），这个直接缓存不会过期。适合一些经常性不更新的静态页面。<br />
Configuration messed up?</p>
<p>因为上面那么多配置，你可能搞糊涂了，那么这里可以让你一键恢复到默认。<br />
Cache Plugins</p>
<p>缓存插件还支持附加插件，比如作者自己就提供一个插件：No Adverts for Friends，不对朋友显示广告。<br />
附加说明<br />
登陆了和留言之后是看不到静态缓存页面的，看到的效果和原来的 WP-Cache 插件一样的，一般来说留言的同学不是那么多。<br />
这个插件通过 Mod Rewrite 来是实现访问静态缓存页面，所以首先你的主机要支持 Mod Rewrite，然后你要在 WordPress 后台启动永久链接。<br />
一些动态的时时更细的插件，如 Recent Comments，Recent Posts 等，一个很好的解决方法是通过 Javascript 来实现。所以同理 Sidebar 更新也只能在静态页面刷新的时候更新。我以后会讲解下如何实现 JS 实现 Recent Comment, Recent Post, 和 PostViews 。<br />
不要使用性能很差的主机，尽管缓存了，但是还是不行的，这里我个人推荐我和朋友一起搞的主机：WFANS 主机。<br />
还有很多依赖于刷新数据的插件，如 SK2, Bad Behaviour 等可能不起作用。缓存总归会带来一点那个灵活性的不足。</p>
<p>这个插件我也使用的时间也不是很长，如果大家有什么新的发现，也可以留言告诉我！</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/369/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Original]Apache+Squid优化 加速高负荷Web访问</title>
		<link>http://99dev.net/archives/364</link>
		<comments>http://99dev.net/archives/364#comments</comments>
		<pubDate>Fri, 26 Dec 2008 05:24:49 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Squid]]></category>

		<guid isPermaLink="false">http://99dev.net/?p=364</guid>
		<description><![CDATA[在实际环境中，元素丰富的页面产生的服务器负担不能小觑。几个月前配置的Apache最近终于撑不住了，在连接数达到1000的时候，页面访问已经相当迟缓，到了非优化不可的地步。
由于网站还提供在线音乐，怀疑是由于百度和迅雷的盗链影响，d4e上很多人都在反应迅雷对他们站点的影响很恶劣。 在Apache中启用防盗链（需要mod_rewrite支持 )
附上.htaccess配置文件
RewriteEngine  On
<span class="readmore"><a href="http://99dev.net/archives/364" title="[Original]Apache+Squid优化 加速高负荷Web访问" target="_blank">阅读全文——共5222字</a></span>]]></description>
			<content:encoded><![CDATA[<p><span style="line-height: 26px;"> 在实际环境中，元素丰富的页面产生的服务器负担不能小觑。几个月前配置的Apache最近终于撑不住了，在连接数达到1000的时候，页面访问已经相当迟缓，到了非优化不可的地步。</span></p>
<p>由于网站还提供在线音乐，怀疑是由于百度和迅雷的盗链影响，d4e上很多人都在反应迅雷对他们站点的影响很恶劣。<span id="more-364"></span> <strong>在Apache中启用防盗链（需要mod_rewrite支持 )</strong><br />
附上.htaccess配置文件</p>
<p>RewriteEngine  On<br />
RewriteCond %{HTTP_HOST} !([a-zA-Z]*.)?sends.cc$ [NC] [OR]<br />
RewriteCond %{HTTP_REFERER} !^http://([a-zA-Z]*.)?sends.cc/.*$ [NC]<br />
RewriteRule .(mp3|wav|flv|gif|jpg|wma)$ &#8211; [F]<br />
如上配置，在一定程度上缓解了服务器压力。Apache此时差不多可以顶1400个连接数，由此也引来一个问题，Apache子进程大量派生，Load average经常都上100（2×2核心，单个CPU此时的load大约在25左右（危急状态）。 Apache默认MaxRequestsPerChild为0，子进程在完成所有请求仍然不会退出，处于等候状态。在Apache2.conf中将其修改为适当的数字，我将其改成10000，子进程在处理完10000个Web请求之后自动退出，不再占用系统资源。<br />
<strong>对访问优化</strong><br />
因为页面中含有大量图片和音视频的多媒体文件，所以可以使用高速Web缓存在解决访问速度问题。Apache有自带的缓存代理模块，不过效率不高，实际生产中却是很少用。我使用的是开源软件中享有盛名的Squid，该软件既有代理和缓存的双重功能，这里我们只用其缓存功能。<br />
注：关于代理以及Squid的基本原理，<a href="http://home.arcor.de/jeffpang/squid/">http://home.arcor.de/jeffpang/squid/</a>上有详细的解释，这里不再累述。<br />
迄今，Squid的稳定版是squid-2.6.STABLE17，网上有各种归档文件，rpm和deb安装包都有，这里推荐源码包安装squid-2.6.STABLE17.tar.gz ，理由是可定制强，在实际应用中才能发挥最大功效。</p>
<p>configure很重要，这里提供我使用的参数给大家参考：<br />
&#8216;&#8211;with-maxfd=65535&#8242; &#8216;&#8211;prefix=/usr/local/squid/&#8217; &#8216;&#8211;disable-internal-dns&#8217; &#8216;&#8211;enable-async-io&#8217;<br />
&#8211;disable-internal-dns<br />
squid源代码包含两个不同的DNS解决方案，叫做“内部的”和“外部的”。内部查询是默认的，但某些人可能要使用外部技术。该选项禁止内部功能，转向使用旧的方式。</p>
<p>内部查询使用 squid自己的DNS协议执行工具。也就是说，squid产生未完成的DNS查询并且将它们发送到一个解析器。假如超时，它重新发送请求，你能指定任意数量的解析器。该工具的有利处之一是，squid获得准确无误的DNS响应的TTLs。</p>
<p>外部查询利用C库的gethostbyname()和gethostbyaddr()函数。squid使用一个外部进程池来制造并行查询。使用外部DNS解析的主要弊端是你需要更多的辅助进程，增加squid的负载。另一个麻烦是C库函数不在响应里传输TTLs，这样squid使用postive_dns_ttl指令提供的一个常量值。</p>
<p>请注意&#8211;enable-async-io是打开其他三个./configure选项的快捷方式，它等同于：<br />
&#8211;with-aufs-threads=N_THREADS</p>
<p>&#8211;with-pthreads</p>
<p>&#8211;enable-storeio=ufs,aufs</p>
<p>&#8211;with-pthreads<br />
该选项导致编译过程链接到你系统中的P线程库。aufs存储模块是squid中唯一需要使用线程的部分。通常来说，如果你使用&#8211;enable-saync-io选项，那么不必再单独指定该选项，因为它被自动激活了。#Very Important,事实证明该参数对Squid的效率有强悍的催化作用。异步I/O是squid技术之一，用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。<br />
make；make clean；make install<br />
无误的话，就可以正常启动Squid了<br />
squid -z #创建缓存区域<br />
squid start（如果没在/usr/bin里建立squid的软链接用/usr/local/squid/sbin/squid start启动）<br />
附上我的配置文件（squid.conf）<br />
visible_hostname a.server<br />
#&#8212;-端口设置&#8212;-<br />
http_port 192.168.0.1:80 vhost vport<br />
#xx.xx.xx.xx为这台服务器的IP地址<br />
icp_port 0</p>
<p>#&#8212;-缓存设置&#8212;-<br />
cache_mem 2000 MB<br />
#设置Squid所能使用的内存共2000MB，这个值因人而异<br />
cache_swap_low 90<br />
cache_swap_high 95<br />
maximum_object_size 4096 KB<br />
#最大缓存文件大小，超过这个值则不缓存，最好不要过大，10MB以内比较合适，过大严重影响性能<br />
maximum_object_size_in_memory 4096 KB<br />
cache_dir aufs /raid/cache_web 100000 16 256<br />
#磁盘缓存的类型和目录，大小，一二级目录的设置，这里磁盘缓存大小是20G</p>
<p>#&#8212;-日志设置&#8212;-<br />
cache_store_log none<br />
#这个设置是不记录store.log<br />
emulate_httpd_log on<br />
#打开emulate_httpd_log选项,将使Squid仿照Aapche的日志格式<br />
pid_filename /var/log/squid/squid.pid<br />
cache_log /var/log/squid/cache.log<br />
access_log /var/log/squid/access.log</p>
<p>#&#8212;-反向代理-完成高速WEB缓存功能<br />
cache_peer 192.168.0.1 parent 8080 0 no-query originserver<br />
cache_peer_domain 192.168.0.1 a.test.cc<br />
acl QUERY urlpath_regex .wmv .mp3 .flv<br />
cache deny QUERY</p>
<p>#&#8212;-访问控制列表&#8212;-<br />
acl all src 0.0.0.0/0.0.0.0<br />
#acl dst dstdomain .sends.cc<br />
#acl dst_other dst 0.0.0.0/0.0.0.0<br />
http_access allow all<br />
#http_access allow dst<br />
#http_access deny dst_other<br />
#&#8212;-启动用户组<br />
cache_effective_user proxy<br />
cache_effective_group proxy</p>
<p><strong>对用户访问进行限速（适用于低带宽或者容易堵塞的网络环境）</strong><br />
Apache的mod_bw提供了该功能，详细配置相对容易找到，请参看相关文档。<br />
下载最新版本<br />
root# wget <a href="http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz">http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz</a></p>
<p>解压<br />
root# wget <a href="http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz">http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz</a><br />
root# tar -vfxz mod_bw-0.7.tgz<br />
root# cd mod_bw-0.7</p>
<p>修改mod_bw 0.7的bug：<br />
由於mod_bw 0.7在编译时bug，会导致在安装后出现apr_atomic_add找不到的错误，所以要修改mod_bw.c<br />
将原本的：<br />
/* Compatibility for ARP &lt; 1 */<br />
#if (APR_MAJOR_VERSION &lt; 1)<br />
#define apr_atomic_inc32 apr_atomic_inc<br />
#define apr_atomic_dec32 apr_atomic_dec<br />
#define apr_atomic_add32 apr_atomic_add<br />
#define apr_atomic_cas32 apr_atomic_cas<br />
#define apr_atomic_set32 apr_atomic_set<br />
#endif</p>
<p>改成：<br />
/* Compatibility for ARP &lt; 1 */<br />
/*<br />
#if (APR_MAJOR_VERSION &lt; 1)<br />
#define apr_atomic_inc32 apr_atomic_inc<br />
#define apr_atomic_dec32 apr_atomic_dec<br />
#define apr_atomic_add32 apr_atomic_add<br />
#define apr_atomic_cas32 apr_atomic_cas<br />
#define apr_atomic_set32 apr_atomic_set<br />
#endif<br />
*/</p>
<p>更新Debian软件包：<br />
root# apt-get update</p>
<p>安装apxs2：<br />
root# apt-get install apache2-prefork-dev</p>
<p>安装gcc：<br />
root# apt-get install gcc</p>
<p>执行模组安装：<br />
root# apxs2 -i -a -c mod_bw.c</p>
<p>这时就会安装到你的Apache的模组里，并且http.conf也已经自动加上了：<br />
LoadModule bw_module modules/mod_bw.so</p>
<p>建立mod_bandwidth工作目录<br />
root# mkdir -p /tmp/apachebw/link<br />
root# mkdir -p /tmp/apachebw/master<br />
root# chown -R nobody:nobody /tmp/apachebw<br />
root# chmod -R 755 /tmp/apachebw</p>
<p>配置：</p>
<p>Options Includes FollowSymLinks MultiViews<br />
AllowOverride None<br />
order allow,deny<br />
allow from all</p>
<p># Limit BW usage<br />
BandWidthModule On<br />
ForceBandWidthModule On<br />
#開放20KB对外使用<br />
BandWidth all 51200<br />
#每Connection最小带宽为50K<br />
MinBandwidth all 51200<br />
#大于50M的文件传输速率按50Kbytes/sec<br />
#LargeFileLimit 51200 51200<br />
#最大同时连接数量<br />
#MaxConnection 300<br />
把Apache服务器重新启动就可以实现对带宽的限制了。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
apxs工具安装<br />
编译mod_encoding时，必须要有apxs，httpd-devel中包括创建和安装扩展模块的apxs工具。如果是你安装了Apache，检查${APACHE_HOME}/bin/下是否存在apxs，如果存在则略过该步无需自己安装该程序包，如果尚未安装e则需要自己手动安装httpd-devel<br />
<strong>友情提示</strong><br />
为防止站点资源被百度或者迅雷盗链，尽可能将你们的资源重新编码或者打包，有办法的话，还可以经常改变下载地址。<br />
另外如果你怀疑有Dos攻击的话，可以运行<br />
netstat -an | grep -i “服务器ip地址:80&#8243; | awk &#8216;{print $6}&#8217; | sort | uniq -c | sort -n<br />
这个命令会自动统计Tcp连接各个状态的数量，如果SYN_RECV很高的话，就不能排除有基于tcp协议的ddos攻击的可能<br />
这样的话，你需要打开tcp_syncookies<br />
echo 1 &gt;; /proc/sys/net/ipv4/tcp_syncookies<br />
如果没有 /proc/sys/net/ipv4/tcp_syncookies说明你的内核不支持syncookies，需要重新编译内核<br />
同时降低syn重试次数<br />
echo “1&#8243; &gt;; /proc/sys/net/ipv4/tcp_syn_retries<br />
echo “1&#8243; &gt;; /proc/sys/net/ipv4/tcp_synack_retries<br />
加大syn_backlog，以保证用户的访问（消耗内存为代价，设的太高。。）<br />
echo “2048&#8243; &gt;; /proc/sys/net/ipv4/tcp_max_syn_backlog<br />
如果还是不行，那么只能交给相应的硬件防火墙了</p>
<p>注：此配置目前可以撑到3000个同时在线连接。</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/364/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Original]Apache&amp;Squid优化 加速高负荷Web访问</title>
		<link>http://99dev.net/archives/204</link>
		<comments>http://99dev.net/archives/204#comments</comments>
		<pubDate>Wed, 01 Oct 2008 13:22:08 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Squid]]></category>

		<guid isPermaLink="false">http://99dev.net/archives/204</guid>
		<description><![CDATA[Copyleft@华大桑梓-Poople，转载注明即可  

    在实际环境中，元素丰富的页面产生的服务器负担不能小觑。几个月前配置的Apache最近终于撑不住了，在连接数达到1000的时候，页面访问已经相当迟缓，到了非优化不可的地步。
    由于网站还提供在线音乐，怀疑是由于百度和迅雷的盗链影响，d4e上很多人都在反应迅雷对他们站点的影响很恶劣。
<span class="readmore"><a href="http://99dev.net/archives/204" title="[Original]Apache&#038;Squid优化 加速高负荷Web访问" target="_blank">阅读全文——共5311字</a></span>]]></description>
			<content:encoded><![CDATA[<p>Copyleft@华大桑梓-Poople，转载注明即可  <a href="http://wiki.ubuntu.org.cn/images/b/b6/Copyright.png"></a></p>
<p><a href="http://wiki.ubuntu.org.cn/images/b/b6/Copyright.png"></a></p>
<p>    在实际环境中，元素丰富的页面产生的服务器负担不能小觑。几个月前配置的Apache最近终于撑不住了，在连接数达到1000的时候，页面访问已经相当迟缓，到了非优化不可的地步。</p>
<p>    由于网站还提供在线音乐，怀疑是由于百度和迅雷的盗链影响，d4e上很多人都在反应迅雷对他们站点的影响很恶劣。</p>
<p><span id="more-204"></span></p>
<ul>
<li>
<h5>在Apache中启用防盗链（需要mod_rewrite支持 )</h5>
</li>
</ul>
<p>附上.htaccess配置文件</p>
<blockquote><p>RewriteEngine  On<br />
RewriteCond %{HTTP_HOST} !([a-zA-Z]*.)?sends.cc$ [NC] [OR]<br />
RewriteCond %{HTTP_REFERER} !^http://([a-zA-Z]*.)?sends.cc/.*$ [NC]<br />
RewriteRule .(mp3|wav|flv|gif|jpg|wma)$ &#8211; [F]</p></blockquote>
<p>    如上配置，在一定程度上缓解了服务器压力。Apache此时差不多可以顶1400个连接数，由此也引来一个问题，Apache子进程大量派生，Load average经常都上100（2×2核心，单个CPU此时的load大约在25左右（危急状态）。 Apache默认MaxRequestsPerChild为0，子进程在完成所有请求仍然不会退出，处于等候状态。在Apache2.conf中将其修改为适当的数字，我将其改成10000，子进程在处理完10000个Web请求之后自动退出，不再占用系统资源。</p>
<ul>
<li>
<h5>对访问优化</h5>
</li>
</ul>
<p>     因为页面中含有大量图片和音视频的多媒体文件，所以可以使用高速Web缓存在解决访问速度问题。Apache有自带的缓存代理模块，不过效率不高，实际生产中却是很少用。我使用的是开源软件中享有盛名的Squid，该软件既有代理和缓存的双重功能，这里我们只用其缓存功能。</p>
<p>     注：关于代理以及Squid的基本原理，<a href="http://home.arcor.de/jeffpang/squid/">http://home.arcor.de/jeffpang/squid/</a>上有详细的解释，这里不再累述。</p>
<p>     迄今，Squid的稳定版是squid-2.6.STABLE17，网上有各种归档文件，rpm和deb安装包都有，这里推荐源码包安装squid-2.6.STABLE17.tar.gz ，理由是可定制强，在实际应用中才能发挥最大功效。</p>
<p>configure很重要，这里提供我使用的参数给大家参考：</p>
<blockquote><p>&#8216;&#8211;with-maxfd=65535&#8242; &#8216;&#8211;prefix=/usr/local/squid/&#8217; &#8216;&#8211;disable-internal-dns&#8217; &#8216;&#8211;enable-async-io&#8217;</p>
<blockquote><p>&#8211;disable-internal-dns</p>
<p>squid源代码包含两个不同的DNS解决方案，叫做“内部的”和“外部的”。内部查询是默认的，但某些人可能要使用外部技术。该选项禁止内部功能，转向使用旧的方式。</p>
<p>内部查询使用 squid自己的DNS协议执行工具。也就是说，squid产生未完成的DNS查询并且将它们发送到一个解析器。假如超时，它重新发送请求，你能指定任意数量的解析器。该工具的有利处之一是，squid获得准确无误的DNS响应的TTLs。</p>
<p>外部查询利用C库的gethostbyname()和gethostbyaddr()函数。squid使用一个外部进程池来制造并行查询。使用外部DNS解析的主要弊端是你需要更多的辅助进程，增加squid的负载。另一个麻烦是C库函数不在响应里传输TTLs，这样squid使用postive_dns_ttl指令提供的一个常量值。</p>
<p>请注意&#8211;enable-async-io是打开其他三个./configure选项的快捷方式，它等同于：</p>
<p>&#8211;with-aufs-threads=N_THREADS<br />
&#8211;with-pthreads<br />
&#8211;enable-storeio=ufs,aufs<br />
&#8211;with-pthreads</p>
<p>该选项导致编译过程链接到你系统中的P线程库。aufs存储模块是squid中唯一需要使用线程的部分。通常来说，如果你使用&#8211;enable-saync-io选项，那么不必再单独指定该选项，因为它被自动激活了。#Very Important,事实证明该参数对Squid的效率有强悍的催化作用。异步I/O是squid技术之一，用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。</p></blockquote>
</blockquote>
<p>     make；make clean；make install</p>
<p>     无误的话，就可以正常启动Squid了</p>
<p>     squid -z #创建缓存区域</p>
<p>     squid start（如果没在/usr/bin里建立squid的软链接，就使用/usr/local/squid/sbin/squid start启动）</p>
<p>附上我的配置文件</p>
<blockquote><p>visible_hostname a.server<br />
#&#8212;-端口设置&#8212;-<br />
http_port 192.168.0.1:80 vhost vport<br />
#xx.xx.xx.xx为这台服务器的IP地址<br />
icp_port 0</p>
<p>#&#8212;-缓存设置&#8212;-<br />
cache_mem 2000 MB<br />
#设置Squid所能使用的内存共2000MB，这个值因人而异<br />
cache_swap_low 90<br />
cache_swap_high 95<br />
maximum_object_size 4096 KB</p>
<p>#最大缓存文件大小，超过这个值则不缓存，最好不要过大，10MB以内比较合适，过大严重影响性能<br />
maximum_object_size_in_memory 4096 KB<br />
cache_dir aufs /raid/cache_web 100000 16 256<br />
#磁盘缓存的类型和目录，大小，一二级目录的设置，这里磁盘缓存大小是20G</p>
<p>#&#8212;-日志设置&#8212;-<br />
cache_store_log none<br />
#这个设置是不记录store.log<br />
emulate_httpd_log on<br />
#打开emulate_httpd_log选项,将使Squid仿照Aapche的日志格式<br />
pid_filename /var/log/squid/squid.pid<br />
cache_log /var/log/squid/cache.log<br />
access_log /var/log/squid/access.log</p>
<p>#&#8212;-反向代理-完成高速WEB缓存功能<br />
cache_peer 192.168.0.1 parent 8080 0 no-query originserver<br />
cache_peer_domain 192.168.0.1 a.test.cc<br />
acl QUERY urlpath_regex .wmv .mp3 .flv<br />
cache deny QUERY</p>
<p>#&#8212;-访问控制列表&#8212;-<br />
acl all src 0.0.0.0/0.0.0.0<br />
#acl dst dstdomain .sends.cc<br />
#acl dst_other dst 0.0.0.0/0.0.0.0<br />
http_access allow all<br />
#http_access allow dst<br />
#http_access deny dst_other</p>
<p>#&#8212;-启动用户组</p>
<p>cache_effective_user proxy<br />
cache_effective_group proxy</p></blockquote>
<ul>
<li>
<h5>对用户访问进行限速（适用于低带宽或者容易堵塞的网络环境）</h5>
</li>
</ul>
<p>     Apache的mod_bw提供了该功能，详细配置相对容易找到，请参看相关文档。</p>
<blockquote><p>下载最新版本<br />
root# wget http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz</p>
<p>解压<br />
root# wget http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz<br />
root# tar -vfxz mod_bw-0.7.tgz<br />
root# cd mod_bw-0.7</p>
<p>修改mod_bw 0.7的bug：<br />
由於mod_bw 0.7在编译时bug，会导致在安装后出现apr_atomic_add找不到的错误，所以要修改mod_bw.c</p>
<p>将原本的：</p>
<p>/* Compatibility for ARP &lt; 1 */<br />
#if (APR_MAJOR_VERSION &lt; 1)<br />
#define apr_atomic_inc32 apr_atomic_inc<br />
#define apr_atomic_dec32 apr_atomic_dec<br />
#define apr_atomic_add32 apr_atomic_add<br />
#define apr_atomic_cas32 apr_atomic_cas<br />
#define apr_atomic_set32 apr_atomic_set<br />
#endif</p>
<p>改成：</p>
<p>/* Compatibility for ARP &lt; 1 */<br />
/*<br />
#if (APR_MAJOR_VERSION &lt; 1)<br />
#define apr_atomic_inc32 apr_atomic_inc<br />
#define apr_atomic_dec32 apr_atomic_dec<br />
#define apr_atomic_add32 apr_atomic_add<br />
#define apr_atomic_cas32 apr_atomic_cas<br />
#define apr_atomic_set32 apr_atomic_set<br />
#endif<br />
*/</p>
<p>更新Debian软件包：<br />
root# apt-get update</p>
<p>安装apxs2：<br />
root# apt-get install apache2-prefork-dev</p>
<p>安装gcc：<br />
root# apt-get install gcc</p>
<p>执行模组安装：<br />
root# apxs2 -i -a -c mod_bw.c</p>
<p>这时就会安装到你的Apache的模组里，并且http.conf也已经自动加上了：<br />
LoadModule bw_module modules/mod_bw.so</p>
<p>建立mod_bandwidth工作目录<br />
root# mkdir -p /tmp/apachebw/link<br />
root# mkdir -p /tmp/apachebw/master<br />
root# chown -R nobody:nobody /tmp/apachebw<br />
root# chmod -R 755 /tmp/apachebw</p>
<p>配置：<br />
Options Includes FollowSymLinks MultiViews<br />
AllowOverride None<br />
order allow,deny<br />
allow from all<br />
# Limit BW usage<br />
BandWidthModule On<br />
ForceBandWidthModule On<br />
#開放20KB对外使用<br />
BandWidth all 51200<br />
#每Connection最小带宽为50K<br />
MinBandwidth all 51200<br />
#大于50M的文件传输速率按50Kbytes/sec<br />
#LargeFileLimit 51200 51200<br />
#最大同时连接数量<br />
#MaxConnection 300</p>
<p>把Apache服务器重新启动就可以实现对带宽的限制了。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><strong>apxs</strong><strong>工具安装</strong><br />
编译mod_encoding时，必须要有apxs，httpd-devel中包括创建和安装扩展模块的apxs工具。如果是你安装了Apache，检查${APACHE_HOME}/bin/下是否存在apxs，如果存在则略过该步无需自己安装该程序包，如果尚未安装e则需要自己手动安装httpd-devel</p></blockquote>
<ul>
<li>
<h5>友情提示</h5>
</li>
</ul>
<p>     为防止站点资源被百度或者迅雷盗链，尽可能将你们的资源重新编码或者打包，有办法的话，还可以经常改变下载地址。</p>
<p>     另外如果你怀疑有Dos攻击的话，可以运行<br />
     netstat -an | grep -i “服务器ip地址:80&#8243; | awk &#8216;{print $6}&#8217; | sort | uniq -c | sort -n <br />
     这个命令会自动统计Tcp连接各个状态的数量，如果SYN_RECV很高的话，就不能排除有基于tcp协议的ddos攻击的可能<br />
     这样的话，你需要打开tcp_syncookies <br />
     echo 1 &gt;; /proc/sys/net/ipv4/tcp_syncookies<br />
     如果没有 /proc/sys/net/ipv4/tcp_syncookies说明你的内核不支持syncookies，需要重新编译内核<br />
     同时降低syn重试次数<br />
     echo “1&#8243; &gt;; /proc/sys/net/ipv4/tcp_syn_retries<br />
     echo “1&#8243; &gt;; /proc/sys/net/ipv4/tcp_synack_retries<br />
     加大syn_backlog，以保证用户的访问（消耗内存为代价，设的太高。。）<br />
     echo “2048&#8243; &gt;; /proc/sys/net/ipv4/tcp_max_syn_backlog<br />
     如果还是不行，那么只能交给相应的硬件防火墙了</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

