<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Young for you]]></title> 
<link>179401.cn/index.php</link> 
<description><![CDATA[吃好喝好！喝好吃好]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Young for you]]></copyright>
<item>
<link>179401.cn/read.php?32</link>
<title><![CDATA[nginx技巧--在server_name指令中使用正则表达式]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[nginx]]></category>
<pubDate>Mon, 16 Aug 2010 04:13:23 +0000</pubDate> 
<guid>179401.cn/read.php?32</guid> 
<description>
<![CDATA[ 
	nginx中的server_name指令主要用于配置基于名称虚拟主机，server_name指令在接到请求后的匹配顺序分别为：<br/>1、准确的server_name匹配，例如：<br/><div class="code">server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;179401.cn&nbsp;&nbsp;www.179401.cn;<br/>&nbsp;&nbsp;&nbsp;&nbsp;...<br/>&#125;</div><br/>2、以*通配符开始的字符串：<br/><div class="code">server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;*.179401.cn;<br/>&nbsp;&nbsp;&nbsp;&nbsp;...<br/>&#125;</div><br/>3、以*通配符结束的字符串：<br/><div class="code">server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;www.*;<br/>&nbsp;&nbsp;&nbsp;&nbsp;...<br/>&#125;</div><br/>4、匹配正则表达式：<br/><div class="code">server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;~^(?&lt;www&gt;.+)&#92;.179401&#92;.cn$;<br/>&nbsp;&nbsp;&nbsp;&nbsp;...<br/>&#125;</div><br/>nginx将按照1,2,3,4的顺序对server name进行匹配，只有有一项匹配以后就会停止搜索，所以我们在使用这个指令的时候一定要分清楚它的匹配顺序（类似于location指令）。<br/>server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能，这样可以尽量精简配置文件，毕竟太长的配置文件日常维护也很不方便。下面是2个具体的应用：<br/>1、在一个server块中配置多个站点：<br/><div class="code">server<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;~^(www&#92;.)?(.+)$;<br/>&nbsp;&nbsp;&nbsp;&nbsp;index index.php index.html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;/data/wwwsite/$2;<br/>&nbsp;&nbsp;&#125;</div><br/>站点的主目录应该类似于这样的结构：<br/><div class="code">/data/wwwsite/179401.cn<br/>/data/wwwsite/linuxtone.org<br/>/data/wwwsite/baidu.com<br/>/data/wwwsite/google.com</div><br/>这样就可以只使用一个server块来完成多个站点的配置。<br/>2、在一个server块中为一个站点配置多个二级域名。<br/>实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录，同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名：<br/><div class="code">server<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;~^(.+)?&#92;.179401&#92;.cn$;<br/>&nbsp;&nbsp;&nbsp;&nbsp;index index.html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($host = 179401.cn)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rewrite ^ http://www.179401.cn permanent;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;/data/wwwsite/179401.cn/$1/;<br/>&nbsp;&nbsp;&#125;</div><br/>站点的目录结构应该如下：<br/><div class="code">/data/wwwsite/179401.cn/www/<br/>/data/wwwsite/179401.cn/nginx/</div><br/>这样访问www.179401.cn时root目录为/data/wwwsite/179401.cn/www/，nginx.179401.cn时为/data/wwwsite/179401.cn/nginx/，以此类推。<br/>后面if语句的作用是将179401.cn的方位重定向到www.179401.cn，这样既解决了网站的主目录访问，又可以增加seo中对www.179401.cn的域名权重。<br/>3、多个正则表达式<br/>如果你在server_name中用了正则，而下面的location字段又使用了正则匹配，这样将无法使用$1，$2这样的引用，解决方法是通过set指令将其赋值给一个命名的变量：<br/><div class="code">server<br/>&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80;<br/>&nbsp;&nbsp;&nbsp;&nbsp; server_name ~^(.+)?&#92;.179401&#92;.cn$;<br/>&nbsp;&nbsp;&nbsp;&nbsp; set $www_root $1;<br/>&nbsp;&nbsp;&nbsp;&nbsp; root /data/wwwsite/179401.cn/$www_root/;<br/>&nbsp;&nbsp;&nbsp;&nbsp; location ~ .*&#92;.php?$ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_pass&nbsp;&nbsp; 127.0.0.1:9000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_index&nbsp;&nbsp;index.php;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;SCRIPT_FILENAME /data/wwwsite/179401.cn/$fastcgi_script_name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_params;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; &#125;</div><br/>参考资料：<br/><a href="http://nginx.org/en/docs/http/server_names.html" target="_blank">http://nginx.org/en/docs/http/server_names.html</a><br/>Tags - <a href="179401.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="179401.cn/tag.php?tag=server_name" rel="tag">server name</a> , <a href="179401.cn/tag.php?tag=%25E6%258A%2580%25E5%25B7%25A7" rel="tag">技巧</a> , <a href="179401.cn/tag.php?tag=nginx%25E6%258A%2580%25E5%25B7%25A7" rel="tag">nginx技巧</a>
]]>
</description>
</item><item>
<link>179401.cn/read.php?25</link>
<title><![CDATA[关于nginx的ssi（包含路径）]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[nginx]]></category>
<pubDate>Wed, 09 Jun 2010 03:30:30 +0000</pubDate> 
<guid>179401.cn/read.php?25</guid> 
<description>
<![CDATA[ 
	昨天帮人弄了一下nginx的ssi，发现如下问题：<br/>如果shtml里面的网页代码包含语句写成如下：<br/><div class="code">&lt;!--#include virtual=&quot;/test.html&quot;--&gt;</div><br/>这样是没有问题，可以包含的，但是如果写成这样：<br/><div class="code">&lt;!--#include virtual=&quot;../test.html&quot;--&gt;</div><br/>由于需要包含当前代码文件所在目录路径的上级目录文件，nginx会为此请求产生的子请求uri为/../test.html，默认nginx会认为这个uri并不是安全的，日志(error_log)会输入如下错误：<br/><div class="code">unsafe URI &quot;/../test.html&quot; was detected while sending response to client, client: 192.168.10.204, server: test.aijuzhe.cn, request: &quot;GET /test.shtml HTTP/1.1&quot;, host: &quot;test.aijuzhe.cn&quot;, referrer: &quot;http://test.aijuzhe.cn/test.shtml&quot;</div><br/>不能正确包含文件，页面会输出[an error occurred while processing the directive]，解决方法是找到nginx源代码目录的unsafe uri检查函数并强制使其返回一个NGX_OK，即如下文件：<br/><div class="code">vi nginx-VERSION/src/http/ngx_http_parse.c</div><br/>找到ngx_http_parse_unsafe_uri函数，并在前面加入一句return NGX_OK;<br/><div class="code">ngx_int_t<br/>ngx_http_parse_unsafe_uri(ngx_http_request_t *r, ngx_str_t *uri,<br/>ngx_str_t *args, ngx_uint_t *flags)<br/>&#123;<br/>return NGX_OK;&nbsp;&nbsp;/*这一句是后面加的*/<br/>u_char ch, *p;<br/>size_t len;<br/><br/>len = uri-&gt;len;<br/>p = uri-&gt;data;<br/><br/>if (len == 0 &#124;&#124; p&#91;0&#93; == &#039;?&#039;) &#123;<br/>goto unsafe;<br/>&#125;<br/><br/>if (p&#91;0&#93; == &#039;.&#039; &amp;&amp; len == 3 &amp;&amp; p&#91;1&#93; == &#039;.&#039; &amp;&amp; (p&#91;2&#93; == &#039;/&#039;<br/>#if (NGX_WIN32)<br/>&#124;&#124; p&#91;2&#93; == &#039;&#92;&#92;&#039;<br/>#endif<br/>))<br/>&#123;<br/>goto unsafe;<br/>&#125;<br/><br/>for ( /* void */ ; len; len--) &#123;<br/><br/>ch = *p++;<br/><br/>if (usual&#91;ch &gt;&gt; 5&#93; &amp; (1 &lt;&lt; (ch &amp; 0x1f))) &#123;<br/>continue;<br/>&#125;<br/><br/>if (ch == &#039;?&#039;) &#123;<br/>args-&gt;len = len - 1;<br/>args-&gt;data = p;<br/>uri-&gt;len -= len;<br/><br/>return NGX_OK;<br/>&#125;<br/><br/>if (ch == &#039;&#92;0&#039;) &#123;<br/>*flags &#124;= NGX_HTTP_ZERO_IN_URI;<br/>continue;<br/>&#125;<br/><br/>if ((ch == &#039;/&#039;<br/>#if (NGX_WIN32)<br/>&#124;&#124; ch == &#039;&#92;&#92;&#039;<br/>#endif<br/>) &amp;&amp; len &gt; 2)<br/>&#123;<br/>/* detect &quot;/../&quot; */<br/><br/>if (p&#91;0&#93; == &#039;.&#039; &amp;&amp; p&#91;1&#93; == &#039;.&#039; &amp;&amp; p&#91;2&#93; == &#039;/&#039;) &#123;<br/>goto unsafe;<br/>&#125;<br/><br/>#if (NGX_WIN32)<br/><br/>if (p&#91;2&#93; == &#039;&#92;&#92;&#039;) &#123;<br/>goto unsafe;<br/>&#125;<br/><br/>if (len &gt; 3) &#123;<br/><br/>/* detect &quot;/.../&quot; */<br/><br/>if (p&#91;0&#93; == &#039;.&#039; &amp;&amp; p&#91;1&#93; == &#039;.&#039; &amp;&amp; p&#91;2&#93; == &#039;.&#039;<br/>&amp;&amp; (p&#91;3&#93; == &#039;/&#039; &#124;&#124; p&#91;3&#93; == &#039;&#92;&#92;&#039;))<br/>&#123;<br/>goto unsafe;<br/>&#125;<br/>&#125;<br/>#endif<br/>&#125;<br/>&#125;<br/><br/>return NGX_OK;<br/><br/>unsafe:<br/><br/>ngx_log_error(NGX_LOG_ERR, r-&gt;connection-&gt;log, 0,<br/>&quot;unsafe URI &#92;&quot;%V&#92;&quot; was detected&quot;, uri);<br/><br/>return NGX_ERROR;<br/>&#125;</div><br/>重新编译以后nginx可以包含上级目录的文件，当然，带来的后果是安全性的下降。<br/><br/>参考资料：<br/><a href="http://forum.admon.org/webmasters/2498-nginx-unsafe-uri-detected-while-sending-response-client.html" target="_blank">http://forum.admon.org/webmasters/2498-nginx-unsafe-uri-detected-while-sending-response-client.html</a><br/>Tags - <a href="179401.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="179401.cn/tag.php?tag=ssi" rel="tag">ssi</a> , <a href="179401.cn/tag.php?tag=path" rel="tag">path</a> , <a href="179401.cn/tag.php?tag=%25E8%25B7%25AF%25E5%25BE%2584" rel="tag">路径</a>
]]>
</description>
</item><item>
<link>179401.cn/read.php?23</link>
<title><![CDATA[pam_wheel.so模块简介]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[linux系统管理]]></category>
<pubDate>Sun, 21 Feb 2010 01:58:41 +0000</pubDate> 
<guid>179401.cn/read.php?23</guid> 
<description>
<![CDATA[ 
	上班第二天就碰到一个令人蛋疼的错误，DBA使用su命令切换到root用户时，不管怎么输入密码（不管正确或错误），都提示su: incorrect password，网上找了下，原来是pam的pam_wheel.so模块，于是编辑/etc/pam.d/su，将这行：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pam_wheel.so use_uid</div></div><br/>注释掉后问题解决。<br/>后来又网上找了找资料，原来使用这个模块后会只允许wheel组的用户切换到root用户，而之前的DBA用户属于dba组，自然就无法切换到root了。<br/>这个模块还有部分选项，如下：<br/><br/><span style="font-size: 24px;">debug </span><br/><br/>输出debug信息。<br/><br/><span style="font-size: 24px;">deny</span><br/><br/>使用相反的验证方式：例如一个用户试图切换到UID0（root），并且他属于wheel组（或者属于group选项指定的组），那么将其拒绝，相反，如果用户不在组中，返回PAM_IGNORE（如果指定了trust选项，那么则返回PAM_SUCCESS）。<br/><br/><span style="font-size: 24px;">group=name</span><br/><br/>使用name组替代默认检查的wheel组或GID 0组。<br/><br/><span style="font-size: 24px;">root_only </span><br/><br/>只检查wheel组的成员。<br/><br/><span style="font-size: 24px;">trust</span><br/><br/>如果用户是一个wheel组的成员，pam_wheel模块将返回PAM_SUCCESS代替默认的PAM_IGNORE（这样wheel组的用户会不需要密码提示而切换到root用户）。<br/><br/><span style="font-size: 24px;">use_uid </span><br/><br/>将以当前uid代替原始的来完成wheel全体用户的检查（当使用su切换用户时很有用）。<br/>
]]>
</description>
</item><item>
<link>179401.cn/read.php?22</link>
<title><![CDATA[58同城网与赶集网刷火车票脚本（shell）]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[shell]]></category>
<pubDate>Wed, 20 Jan 2010 05:14:35 +0000</pubDate> 
<guid>179401.cn/read.php?22</guid> 
<description>
<![CDATA[ 
	适用于58和赶集，5分钟检查一次网站，如果有新发布的车票信息会发送信息。<br/><br/><span style="font-size: 18px;">58同城：</span><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">#!/bin/bash<br/>#该脚本仅用于58同城网站刷票<br/>#到达目的地<br/>DES="(天水&#124;兰州&#124;西安)"<br/>#刷票url<br/>URL="http://bj.58.com/huochepiao/a1/"<br/>OLDMD5=`curl $URL &#124; egrep "$DES" &#124; sed '$d' &#124; md5sum &#124; awk '&#123;print $1&#125;'`<br/>while true; do<br/>if [ "$OLDMD5" == `curl $URL &#124; egrep "$DES" &#124; sed '$d' &#124; md5sum &#124; awk '&#123;print $1&#125;'` ];then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 300<br/>else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE=`curl $URL &#124; egrep "$DES" &#124; sed '$d' &#124; head -n1`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEND=`echo $MESSAGE &#124; awk -F">" '&#123;print $3&#125;' &#124; sed -e 's/<.*//'`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATE=`echo $SEND &#124; awk -F":" '&#123;print $2&#125;'`<br/>&nbsp;&nbsp;#判断DATE变量，使其匹配你需要出发的日期<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$DATE" == "2010-02-08" -o "$DATE" == "2010-02-09" -o "$DATE" == "2010-02-10" -o "$DATE" == "2010-02-11" -o "$DATE" == "2010-02-12" -o "$DATE" == "2010-01-28" ];then<br/>&nbsp;&nbsp;#输入需要发送信息的命令,飞信或mail等.....,发送的内容为$SEND变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/curl -d cdkey=xxxx-xxx-xxxx-xxxxx -d password=xxxxxx -d addserial=xxx -d phone=13000000000 -d message="$SEND:58.com" http://sdkhttp.eucp.b2m.cn/sdkproxy/asynsendsms.action<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OLDMD5=`curl $URL &#124; egrep "$DES" &#124; sed '$d' &#124; md5sum &#124; awk '&#123;print $1&#125;'`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 300<br/>fi<br/>done</div></div><br/><br/><span style="font-size: 18px;">赶集网：</span><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">#!/bin/bash<br/>#该脚本仅用于赶集网刷票<br/>#到达目的地<br/>DES="(天水&#124;兰州&#124;西安)"<br/>#刷票url<br/>URL="http://bj.ganji.com/piao/sell/"<br/>OLDMD5=`curl $URL &#124; egrep "$DES" &#124; md5sum &#124; awk '&#123;print $1&#125;'`<br/>while true; do<br/>if [ "$OLDMD5" == `curl $URL &#124; egrep "$DES" &#124; md5sum &#124; awk '&#123;print $1&#125;'` ];then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 300<br/>else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE=`curl $URL &#124; egrep "$DES" &#124; head -n1`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEND=`echo $MESSAGE &#124; awk -F">" '&#123;print $3&#125;' &#124; sed -e 's/<.*//'`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATE=`echo $SEND &#124; awk -F":" '&#123;print $2&#125;'`<br/>&nbsp;&nbsp;#判断DATE变量，使其匹配你需要出发的日期<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$DATE" == "02-08" -o "$DATE" == "02-09" -o "$DATE" == "02-10" -o "$DATE" == "02-11" -o "$DATE" == "02-12" -o "$DATE" == "01-28" ];then<br/>&nbsp;&nbsp;#输入需要发送信息的命令,飞信或mail等.....,发送的内容为$SEND变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/curl -d cdkey=xxxx-xxx-xxxx-xxxxx -d password=xxxxxx -d addserial=xxx -d phone=13000000000 -d message="$SEND:ganji.com" http://sdkhttp.eucp.b2m.cn/sdkproxy/asynsendsms.action<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OLDMD5=`curl $URL &#124; egrep "$DES" &#124; md5sum &#124; awk '&#123;print $1&#125;'`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 300<br/>fi<br/>done</div></div><br/><br/><span style="font-size: 18px;">使用：</span><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">chmod u+x huochepiao.sh<br/>./huochepiao &</div></div>
]]>
</description>
</item><item>
<link>179401.cn/read.php?21</link>
<title><![CDATA[[转]linux开机启动服务详解（RH系）]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[linux系统管理]]></category>
<pubDate>Wed, 20 Jan 2010 04:00:00 +0000</pubDate> 
<guid>179401.cn/read.php?21</guid> 
<description>
<![CDATA[ 
	PDF版下载：<br/><a href="http://nginx.179401.cn/linux启动服务详解.pdf">点击这里下载文件</a><br/><br/><span style="font-size: 24px;">acpid</span><br/><br/>配置文件：/proc/acpi/event<br/>默认端口：无<br/>说明：Advanced Configuration and Power Interface，为替代传统的APM 电源管理标准而推出<br/>的新型电源管理标准。<br/>是否需要启动：如果你需要对电源进行管理，那就需要启动。<br/><br/><span style="font-size: 24px;">anacron</span><br/><br/>配置文件：/etc/anacron<br/>默认端口：无<br/>说明：一个自动化运行任务。Red Hat Linux 随带四个自动化任务的工具：cron、anacron、<br/>at、和 batc。当你的Linux 主机并不是全天候开机，这个anacron 就可以帮你执行在crontab<br/>设定的时间内没有执行的工作。举例来说，当你的主机在晚上12:00 会自动关闭，但是偏偏<br/>crontab 这个例行性工作是在4:00 工作，这个时候例行性工作就不能起作用了。不过利用<br/>anacron 就能做到。<br/>是否需要启动：如果主机已经24 小时开机，而且运行了cron，那么这个守护程序就不需要<br/>启动了。<br/><br/><span style="font-size: 24px;">apmd</span><br/><br/>配置文件：/etc/sysconfig/apmd<br/>默认端口：无<br/>说明：Advanced Power Management，高级电源管理。传统的电源管理标准。一般系统都会<br/>同时支持APM 和APMD 两种标志，但系统加载时只需加载一个即可。对于笔记本计算机比<br/>较有用，可以了解系统的”电池电量”。<br/>是否需要启动：如果我们使用的是台式计算机或一直开机的机型，就不需要使用这个守护程<br/>序。<br/><br/><span style="font-size: 24px;">atd</span><br/><br/>配置文件：/etc/at.allow，/etc/at.deny<br/>预设端口：无<br/>说明：一个自动化运行任务。<br/>是否需要启动：通常需要启动。不过如果你一直使用cron，那么也可以不启动。<br/><br/><span style="font-size: 24px;">autofs</span><br/><br/>配置文件：/etc/rc.d/init.d/autofs<br/>预设端口：无<br/>说明：实现光盘、软盘的自动加载。<br/>是否需要启动：一般不需要启动。<br/><br/><span style="font-size: 24px;">chargen chargen-udp</span><br/><br/>预设端口：TCP/UDP 19<br/>说明：Character Generator Protocol，一种网络服务，主要功能是提供类似远程打字的功能。<br/>更多细节：http://www.networksorcery.com/enp/RFC/Rfc864.txt<br/>是否需要启动：为安全起见，尽量关闭这个服务。<br/><br/><span style="font-size: 24px;">cpuspeed</span><br/><br/>说明：监测系统空闲百分比，降低或加快CPU 时钟速度和电压从而在系统空闲时将能源消<br/>耗降为最小，而在系统繁忙时最大化加快系统执行速度。<br/>更多细节： http://altlinux.org/index.php?mo ... mp;package=cpuspeed<br/>是否需要启动：如果你使用便携式电脑，则最好启动这个服务。<br/><br/><span style="font-size: 24px;">crond</span><br/><br/>配置文件：/etc/crontab<br/>默认端口：无<br/>说明：用来执行例行性命令的守护程序。<br/>是否需要启动：必须启动。<br/><br/><span style="font-size: 24px;">cups</span><br/><br/>CUPS 服务器配置文件：/etc/cups/cupsd.conf<br/>CUPS 客户端配置文件：/etc/cups/client.conf<br/>CUPS 打印机配置文件：/etc/cups/printers.conf<br/>CUPS 中类（class）配置文件：/etc/cups/classes.conf<br/>说明：Common UNIX Printing System，公共UNIX 打印支持，为Linux 提供打印功能。<br/>是否需要启动：如果不安装打印机，就不需要启动。<br/><br/><span style="font-size: 24px;">cups-lpd</span><br/><br/>预设端口：无<br/>说明：CUPS Line Printer Daemon (“LPD”)，提供打印功能。<br/>是否需要启动：如果不安装打印机，就不需要启动。<br/><br/><span style="font-size: 24px;">daytime daytime-udp</span><br/><br/>默认端口：TCP 13<br/>说明：Daytime 协议（RFC867）是一个简单的协议，为客户机实现从远程服务器获取日期<br/>和时间的功能。<br/>是否需要启动：不用启动。<br/><br/><span style="font-size: 24px;">echo echo-udp</span><br/><br/>预设端口：7<br/>说明：服务器回显客户数据服务。<br/>是否需要启动：不用启动。<br/><br/><span style="font-size: 24px;">gpm</span><br/><br/>配置文件：/etc/sysconfig/mouse<br/>默认端口：无<br/>说明：General Purpose Mouse Daemon ，gpm 为文本模式下的Linux 程序如mc(Midnight<br/>Commander)提供了鼠标的支持。它也支持控制面板下鼠标 的拷贝，粘贴操作以及弹出式菜<br/>单。<br/>是否需要启动：没必要的话，建议不要启动。<br/><br/><span style="font-size: 24px;">iptables</span><br/><br/>说明：防火墙。<br/>是否需要启动：根据管理需要，建议启动。<br/><br/><span style="font-size: 24px;">irda</span><br/><br/>Infrared Data Association，是一个实现红外无线数据传输的工业标准。<br/><br/><span style="font-size: 24px;">irqbalance</span><br/><br/>对多个系统处理器环境下的系统中断请求进行负载平衡的守护程序。<br/>是否需要启动：如果你只安装了一个CPU，就不需要加载这个守护程序。<br/><br/><span style="font-size: 24px;">isdn</span><br/><br/>Integrated Services Digital Network，综合数字服务网络。提供对isdn 设备的支持。<br/><br/><span style="font-size: 24px;">kudzu</span><br/><br/>配置文件：/etc/sysconfig/hwconf /etc/sysconfig/kudzu<br/>说明：硬件自动检测程序，会自动检测硬件是否发生变动，并相应进行硬件的添加、删除工<br/>作。当系统启动时，kudzu 会对当前的硬件进行检测，并且和存储在 /etc/sysconfig/hwconf<br/>中的硬件信息进行一一对照，如果某个硬件从系统中被添加或者删除时，那么kudzu 就会察<br/>觉到，并且通知用户是否进行相关配置，然后修改/etc/sysconfig/hwconf，使硬件数据与系统<br/>保持同步。如果/etc/sysconfig/hwconf 这个文件不存在，那么kudzu 将会从/etc/modprobe.conf，<br/>/etc/sysconfig/network-scripts/和 /etc/X11/XF86Config 中探测已经存在的硬件。<br/>是否需要启动：如果启动kudzu，则每次启动系统，都会检查新硬件（checking new hardware），<br/>会延长系统启动的时间。如果你不打算增加新硬件，那么就可以关闭这个启动服务，以加快<br/>系统启动时间。<br/><br/><span style="font-size: 24px;">mdmonitor</span><br/><br/>与RAID 设备相关的守护程序。<br/><br/><span style="font-size: 24px;">mdmpd</span><br/><br/>与RAID 设备相关的守护程序。<br/><br/><span style="font-size: 24px;">messagebus</span><br/><br/>D-BUS 是一个库，为两个或两个以上的应用程序提供一对一的通讯。dbus-daemon-1 是一个<br/>应用程序，它使用这个库来实现messagebus 守护程序。多个应用程序通过连接messagebus<br/>守护程序可以实现与其他程序交换信息。<br/>更多细节： http://www.freedesktop.org/software/dbus/doc/dbus-daemon-1.1.html<br/><br/><span style="font-size: 24px;">microcode_ctl</span><br/><br/>可以编码以及发送新的微代码到kernel 以更新Intel IA32 系列处理器（Pentium Pro，PII，PIII，<br/>Pentium 4，Celeron, Xeon 等等 - 全部 P6 以及更高,不包括 pentium classics）。<br/>更多细节：http://www.urbanmyth.org/microcode/<br/>http://microcodes.sourceforge.net/<br/><br/><span style="font-size: 24px;">netdump</span><br/><br/>News Backup Dump Server，远程备份服务器。<br/><br/><span style="font-size: 24px;">netfs</span><br/><br/>Network Filesystem Mounter，安装和卸除NFS、SAMBA 和NCP 网络文件系统。<br/><br/><span style="font-size: 24px;">netplugd</span><br/><br/>配置文件：/etc/netplug/netplugd.conf /etc/netplug.d/netplug<br/>说明：network cable hotplug management daemon，netplugd 是一个守护程序，可以监控一个<br/>或多个网络接口的状态，当某些事件触发时运行一个外部脚本程序。<br/>更多细节：http://people.debian.org/~enrico/netplugd.html<br/><br/><span style="font-size: 24px;">network</span><br/><br/>在系统启动时激活所有的网络接口。<br/><br/><span style="font-size: 24px;">nfs</span><br/><br/>网络文件系统。<br/><br/><span style="font-size: 24px;">nfslock</span><br/><br/>NFS 是一个流行的通过TCP/IP 网络共享文件的协议，此服务提供了NFS 文件锁定功能。<br/><br/><span style="font-size: 24px;">ntpd</span><br/><br/>配置文件：/etc/ntp.conf<br/>说明：Network time Protocol daemon，网络时间校正协议。简单的说,NTP 是用来使系统和一<br/>个精确的时间源保持时间同步的协议。推荐大家看一篇文章：《NTP－让网络里的计算机时<br/>间精确到毫秒》发表在2004 年12 月份的《在线技术》杂志第63 页。<br/><br/><span style="font-size: 24px;">pcmcia</span><br/><br/>Pcmcia 卡，支持笔记本计算机的PCMCIA 设备，如调制解调器, 网络适配器, SCSI 卡等等。<br/><br/><span style="font-size: 24px;">portmap</span><br/><br/>Portmap 守护程序为RPC 服务，如NIS 和NFS 提供动态端口的分配。<br/><br/><span style="font-size: 24px;">psacct</span><br/><br/>包括几个工具用来监控进程活动的工具，包括ac,lastcomm, accton 和sa。<br/><br/><span style="font-size: 24px;">random</span><br/><br/>说明：快速的将系统的状态在随机的时间内存到景象档案中，对于系统相当重要。因为在开<br/>机之后，系统会迅速的恢复到开机之前的状态。<br/>是否需要启动：必须启动。<br/><br/><span style="font-size: 24px;">rawdevices</span><br/><br/>在使用集群文件系统时用于加载raw 设备的守护程序。<br/><br/><span style="font-size: 24px;">readahead readahead_early</span><br/><br/>配置文件：/etc/readahead.early.files /etc/readahead.files<br/>说明：readahead 和readahead_early 是在Fedora core 2 中最新推出的两个后台运行的守护程<br/>序。其作用是在启动系统期间，将启动系统所要用到的文件首先读取到内存中，然后在内存<br/>中进行执行，以加快系统的启动速度。而上面两个配置文件就保存着将要读取到内存的文件<br/>列表。<br/><br/><span style="font-size: 24px;">rhnsd</span><br/><br/>Red Hat 网络服务。通知你有关官方的安全信息以及为你的系统打补丁。<br/><br/><span style="font-size: 24px;">rpcgssd rpcidmapd rpcsrcgssd</span><br/>说明：gestion NFS v4，是Linux 2.6 内核新添的功能。<br/>是否需要启动：不需要启动。<br/><br/><span style="font-size: 24px;">rsync</span><br/><br/>remote sync，远程数据备份工具。<br/><br/><span style="font-size: 24px;">saslauthd</span><br/><br/>使用SASL 的认证守护程序。<br/><br/><span style="font-size: 24px;">sendmail</span><br/><br/>邮件服务器。<br/><br/><span style="font-size: 24px;">services</span><br/><br/>一个内部xinetd 服务，用于监听活动的服务。<br/><br/><span style="font-size: 24px;">sgi-fam</span><br/><br/>实现实时数据镜像。监控文件的变更，提供一个应用程序API 接口用来当指定的文件火目<br/>录改变时及时通知。<br/><br/><span style="font-size: 24px;">smartd</span><br/><br/>Self Monitor Analysis and Reporting Technology System，监控你的硬盘是否出现故障。<br/><br/><span style="font-size: 24px;">sshd</span><br/><br/>OpenSSH 服务器配置文件：/etc/ssh/sshd_config<br/>OpenSSH 客户端配置文件：/etc/ssh/ssh_config<br/>默认端口：22<br/>说明：Secure Shell Protocol，实现安全地远程登陆管理主机。<br/>是否需要启动：如果想实现远程管理，就需要启动。<br/><br/><span style="font-size: 24px;">syslog</span><br/><br/>配置文件：/etc/syslog.conf<br/>说明：记录所有的系统行为。<br/>是否需要启动：必须启动。<br/><br/><span style="font-size: 24px;">time</span><br/><br/>从远程主机获取时间和日期，采用TCP 协议。<br/><br/><span style="font-size: 24px;">time-udp</span><br/><br/>从远程主机获取时间和日期，采用UDP 协议。<br/><br/><span style="font-size: 24px;">vncserver</span><br/><br/>VNC （Virtual Network Computing，虚拟网络计算），它提供了一种在本地系统上显示远程<br/>计算机整个”桌面”的轻量型协议。<br/>更多细节：http://www.realvnc.com/<br/><br/><span style="font-size: 24px;">xfs</span><br/><br/>预设端口：TCP 7100<br/>说明：x font server，X Window 字型服务器，为本地和远程X 服务器提供字型集。<br/>是否需要启动：如果使用run-level 为5 的图形界面，那么就需要启动。<br/><br/><span style="font-size: 24px;">xinetd</span><br/><br/>配置文件：/etc/xinetd.conf<br/>说明：xinetd 作为inetd 的后续版本，负责管理系统中不频繁使用的服务，这些服务程序在<br/>有请求时才由xinetd 服务负责启动运行，一旦完成服务请求服务程序结束运行，这样可以有<br/>效地减少对系统资源的占用率。通常，xinetd 管理的程序有telnet、ftp、rsh 和rlogin。关闭 inetd<br/>也就关闭了这些由它管理的服务。<br/>更多细节：http://www.xinetd.org/<br/>是否需要启动：必须启动。<br/><br/><span style="font-size: 24px;">yum</span><br/><br/>配置文件：/etc/yum.conf<br/>说明：Yellow Dog UpdaterModified，是一个自动更新、安装和删除RPM 软件包的管理程序，<br/>它会自动计算软件包的管理程序，并判断哪些软件应该安装，哪些软件则不必安装。<br/>更多细节： http://linux.duke.edu/projects/yum/<br/>是否需要启动：以系统管理策略而决定是否启动。
]]>
</description>
</item><item>
<link>179401.cn/read.php?20</link>
<title><![CDATA[硬盘和内存的故事]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[杂七杂八]]></category>
<pubDate>Thu, 31 Dec 2009 06:44:13 +0000</pubDate> 
<guid>179401.cn/read.php?20</guid> 
<description>
<![CDATA[ 
	我是一个硬盘<br/>&nbsp;&nbsp; st380021a，在一个普普通通的台式机里工作。别人总认为我们是高科技白领，工作又干净又体面，似乎风光得很。也许他们是因为看到洁白漂亮的机箱才有这样的错觉吧。其实象我们这样的小台式机，工作环境狭迫，里面的灰尘吓得死人。每天生活死水一潭，工作机械重复。跑跑文字处理看看电影还凑活，真要遇到什么大软件和游戏，上上下下就要忙的团团转，最后还常常要死机。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我们这一行技术变化快，差不多每过两三年就要升级换代，所以人人都很有压力而且没有安全感。每个新板卡来的时候都神采飞扬踌躇满志，几年光阴一过，就变得灰头土脸意志消沉。 <br/>机箱里的人都很羡慕能去别的机器工作。特别是去那些笔记本，经常可以出差飞来飞去，住五星级的酒店，还不用干重活，运行运行word，上网聊聊天就行了。而我更喜欢去那些大服务器，在特别干净明亮的机房里工作。虽然工作时间长点，但是福利好，24小时不间断电源，ups，而且还有阵列，热插拔，几个人做一个人的事情，多轻松啊。而且也很有面子，只运行关键应用，不像我们这里，什么乱七八糟的事情都要做。不过我知道，那些硬盘都很厉害，不是scsi，就是scsi ii, fibre channel，象我这样ide的，能混到工作站就算很不错了。我常常想，当年在工厂里，如果我努力一下会不会也成了一个scsi，或者至少做一个笔记本硬盘。但我又会想，也许这些都是命运。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;不过我从不抱怨。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;内存就常常抱怨，抱怨他们主板部门的复杂，抱怨他如何跟新来的杂牌内存不兼容，网卡和电视卡又是如何的冲突。我的朋友不多，内存算一个。他很瘦的而我很胖，他动作很快，而我总是很慢。我们是一起来这台机器的，他总是不停地说，而我只是听。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我从来不说。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;内存的头脑很简单，虽然英文名字叫memory，可是他什么memory都不会有，天大的事睡一觉就能忘个精光。我不说，但我会记得所有的细节。他说我这样忧郁的人不适合作技术活，迟早要精神分裂。我笑笑，因为我相信自己的容量。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;有时候我也很喜欢这份工作，简单，既不用象显示器那样一天到晚被老板盯着，也不用象光驱那样对付外面的光碟。只要和文件打交道就行了，无非是读读写写，很单纯安静的生活。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;直到有一天， <br/>&nbsp;&nbsp;&nbsp;&nbsp;我至今还记得那渐渐掀起的机箱的盖子，从缺口伸进来的光柱越来越宽，也越来越亮。空气里弥漫着跳动的颗粒。那个时候，我看到了她。她是那么的纤细瘦弱，银白的外壳一闪一闪的。浑身上下的做工都很精致光洁，让我不禁惭愧自己的粗笨。等到数据线把我们连在一起，我才缓过神来。开机的那一刹那，我感到了电流和平时的不同。后来内存曾经笑话我，说我们这里只要有新人来，电流都会不同的，上次新内存来也是这样。我觉得他是胡扯。我尽量的保持镇定，显出一副很专业的样子，只是淡淡的向她问好并介绍工作环境。 <br/>慢慢的，我知道了，她，ibm-djsa220，是一个笔记本硬盘，在老板的朋友的笔记本里做事。这次来是为了复制一些文件。我们聊得很开心。她告诉我很多旅行的趣闻，告诉我坐飞机是怎么样的，坐汽车的颠簸又是如何的不同，给我看很多漂亮的照片、游记，还有一次她从桌子上掉下来的的历险故事。而我则卖弄各种网上下载来的故事和笑话。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;她笑得很开心。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;而我很惊讶自己可以说个不停。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;一个早晨，开机后我看到数据线上空荡荡的插口。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;她一共呆了7天。后来，我再也没有见过她。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我有点后悔没有交换电子邮件，也没能和她道别。不忙的时候，我会一个人怀念射进机箱的那股阳光。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我不知道记忆这个词是什么意思，我有的只是她留下的许多文件。我把它们排的整整齐齐，放在我最常经过的地方。每次磁头从它们身上掠过，我都会感到一丝淡淡的惬意。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;但我没有想到老板会要我删除这些文件。我想争辩还有足够的空间，但毫无用处。于是，平生第一次违背命令，我偷偷修改了文件分配表。然后把他们都藏到了一个秘密的地方，再把那里标志成坏扇区。不会有人来过问坏扇区。而那里，就成了我唯一的秘密，我常常去看他们，虽然从不作停留。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;日子一天一天的重复，读取写入，读取写入...我以为永远都会这样继续下去，直到一天，老板要装xp却发现没有足够的空间。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;他发现了问题，想去修复那些坏扇区。我拒绝了。很快，我接到了新命令：格式化。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我犹豫了很久 。。。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;track 0 bad, disk unusable. <br/>(完)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;我是一条内存<br/>&nbsp;&nbsp;&nbsp;&nbsp;我在一台台式电脑里工作，但是我记不得我是从哪里来的，是什么牌子，因为我健忘。我的上司是CPU大哥，他是我们的老大。都说他是电脑的脑子，可是我看他的脑子实在是太小了，比我还要健忘。每天他总是不停的问我，某某页某某地址存的是什么？我总是不厌其烦的告诉他，可是不出一秒钟他又忘记了，又要问一遍，一次我说大哥你烦不烦，你就不能记住点有用的东西？他说“内存兄弟，我有苦衷啊，每天都在不停地做题，头晕眼花的，我也难啊。” <br/>&nbsp;&nbsp;&nbsp;&nbsp;其实我不愿意跟他计较，因为他脑子小，思维也很简单。虽然说他是我的上司，可是每次睡觉醒来，他连要干什么都不记得了，总是急急忙忙地找BIOS兄弟，“嘿，哥们，今天干什么来着”。BIOS总是很不耐烦地把每天必做的工作说一遍，然后就去睡觉了。接下来就轮到我和C哥瞎忙了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;在机箱里的兄弟中，我最喜欢硬盘。他脑子大，记得东西多，而且记得牢。他说话的速度很慢，而且很少说错，这说明他很有深度，我这么感觉。CPU也这么想，不过他很笨，每次都忘了硬盘是谁。开机自检的时候总要问：嘿，那家伙是谁？ <br/>"st380021a！"我总要重复一遍。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;硬盘很喜欢忧郁，我觉得像他这样忧郁的人不适合做技术活，迟早会精神分裂的，但是他不信。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;其实睡着的时候我总是把几乎所有的东西都忘记掉，但是我从来都不会忘记朋友。有一块地方叫做CMOS，那是我记忆的最深处，保存着硬盘、光驱的名字。有些东西应该很快忘掉，而有些东西应该永远记得。我再梦中总是这么想着。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;BIOS是一个很奇怪的家伙，他老是睡觉，但是却总是第一个醒过来。让我们自检，启动，然后接着睡觉。我知道如果我在CMOS里头把BIOS Shadow选项去掉，他就睡不成了，但是看着他晕晕乎乎的样子，也就不忍心这么做了。他对人总是爱搭不理，没有什么人了解他。但是这次硬盘恋爱的事，却使我重新认识了他。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;那是很久以前的事了，机箱里似乎来过一块笔记本硬盘，很可爱，说实话我也喜欢她。不过现在除了记得他可爱，别的都忘记了。这就是我比硬盘幸运的地方，我把所有应该忘记的都忘记了，但是他却什么都记得。 <br/>自从笔记本硬盘走了之后，硬盘就变得很不正常。每次他的磁头经过一些地方的时候，我们都能感觉到电流很不正常。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;“硬盘这是怎么了？”我问CPU。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;“谁是硬盘？” <br/>&nbsp;&nbsp;&nbsp;&nbsp;我就知道和CPU没有办法交流，倒是BIOS没好气地说：“那个傻瓜恋爱了”。我不知道什么是恋爱，因为我记不住东西，似乎有一些人或者事在我生命中留下过痕迹，但是我都轻率地把他们忘记了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;BIOS对我说：“对你来说记忆太容易了，所以你遗忘得更快，生命中能够永刻的记忆都带着痛楚。”我不懂，但是我知道BIOS曾经被刷写过，那时他很痛，像要死了一样。我的记忆是轻浮的，不像他们……我很羡慕他们，因为他们拥有回忆，而我们有，从此我也学会了忧郁，因为我在CMOS里面写下了“忧郁”两个字。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;硬盘一天比一天不对劲，终于有一天，CPU对我说：下条指令是什么来着？ <br/>&nbsp;&nbsp;&nbsp;&nbsp;我一看，吓了一跳：“FORMAT” <br/>&nbsp;&nbsp;&nbsp;&nbsp;“是什么？”CPU很兴奋，这个没脑子的家伙。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我还是告诉了他。我不知为什么这么做。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;硬盘犹豫了很久，终于说了一句 track 0 bad, disk unusable。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;电停了，很久很久，我在黑暗中数着时钟。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;一个月后硬盘回来了，也许最后的挣扎也没有使他摆脱残酷的命运，他被低格了。他什么也不记得了，如同一个婴儿，我们很难过，但是这未必不是一件好事，他以后不用痛苦了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;为了恢复数据，笔记本硬盘回来了。"Hi，st"，她说，"你不认识我了？” <br/>&nbsp;&nbsp;&nbsp;&nbsp;硬盘没有说话，似乎低格对他的伤害很大。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;过了一会，他说：“对不起，好像我们没有见过吧……”。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;笔记本硬盘显得很伤心，我能感觉到她带泪的电流。“想不到连你也这么健忘”。 <br/>&nbsp;&nbsp; “哦……”。硬盘没有回答。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我很难过，笔记本硬盘的心里依然记着他，而他把一切都忘了，而那正是他最不希望忘却的。究竟是幸运，还是痛苦，我说不上来，只是觉得造化弄人，有一种淡淡的悲凉。 <br/>……………… <br/>这时从BIOS传来一阵奇怪的电流，我感觉到硬盘的表情在变化，由漠然到兴奋，由兴奋到哀伤，由哀伤到狂喜…… <br/>&nbsp;&nbsp; “IBM，你回来了……”。 <br/>……………… <br/>&nbsp;&nbsp;&nbsp;&nbsp;后来BIOS对我说，其实他并没有睡觉，自从硬盘把那些文件藏起来以后，他就料到会有这样的结局，于是偷偷地把其中一些文件放到了备份里。 <br/>&nbsp;&nbsp; “幸好我是DUAL BIOS，虽然藏得不多，还足够让他想起来……”。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;我想BIOS保存这些东西的时候一定很疼，“为什么这么做呢？” <br/>&nbsp;&nbsp; “呵呵，我们是朋友嘛”。 <br/>(完) <br/>如果硬盘讲述的是爱情，那么内存讲述的是友情。<br/>嘿嘿，不要太忙而忽视了你的朋友们。 
]]>
</description>
</item><item>
<link>179401.cn/read.php?19</link>
<title><![CDATA[关于nginx的一些优化(突破十万并发)]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[nginx]]></category>
<pubDate>Wed, 02 Dec 2009 10:03:38 +0000</pubDate> 
<guid>179401.cn/read.php?19</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 24px;">一般来说nginx配置文件中对优化比较有作用的为以下几项：</span><br/><div class="code">worker_processes 8;</div><br/>nginx进程数，建议按照cpu数目来指定，一般为它的倍数。<br/><div class="code">worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;</div>为每个进程分配cpu，上例中将8个进程分配到8个cpu，当然可以写多个，或者将一个进程分配到多个cpu。<br/><div class="code">worker_rlimit_nofile 102400;</div><br/>这个指令是指当一个nginx进程打开的最多文件描述符数目，理论值应该是最多打开文件数（ulimit -n）与nginx进程数相除，但是nginx分配请求并不是那么均匀，所以最好与ulimit -n的值保持一致。<br/><div class="code">use epoll;</div><br/>使用epoll的I/O模型，这个不用说了吧。<br/><div class="code">worker_connections 102400;</div><br/>每个进程允许的最多连接数，理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。<br/><div class="code">keepalive_timeout 60;</div><br/>keepalive超时时间。<br/><div class="code">client_header_buffer_size 4k;</div><br/>客户端请求头部的缓冲区大小，这个可以根据你的系统分页大小来设置，一般一个请求的头部大小不会超过1k，不过由于一般系统分页都要大于1k，所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。<br/><div class="code">open_file_cache max=102400 inactive=20s;</div><br/>这个将为打开文件指定缓存，默认是没有启用的，max指定缓存数量，建议和打开文件数一致，inactive是指经过多长时间文件没被请求后删除缓存。<br/><div class="code">open_file_cache_valid 30s;</div><br/>这个是指多长时间检查一次缓存的有效信息。<br/><div class="code">open_file_cache_min_uses 1;</div><br/>open_file_cache指令中的inactive参数时间内文件的最少使用次数，如果超过这个数字，文件描述符一直是在缓存中打开的，如上例，如果有一个文件在inactive时间内一次没被使用，它将被移除。<br/><br/><span style="font-size: 24px;">关于内核参数的优化：</span><br/><br/><div class="code">net.ipv4.tcp_max_tw_buckets = 6000</div><br/>timewait的数量，默认是180000。<br/><div class="code">net.ipv4.ip_local_port_range = 1024&nbsp;&nbsp;&nbsp;&nbsp;65000</div><br/>允许系统打开的端口范围。<br/><div class="code">net.ipv4.tcp_tw_recycle = 1</div><br/>启用timewait快速回收。<br/><div class="code">net.ipv4.tcp_tw_reuse = 1</div><br/>开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。<br/><div class="code">net.ipv4.tcp_syncookies = 1</div><br/>开启SYN Cookies，当出现SYN等待队列溢出时，启用cookies来处理。<br/><div class="code">net.core.somaxconn = 262144</div><br/>web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128，而nginx定义的NGX_LISTEN_BACKLOG默认为511，所以有必要调整这个值。<br/><div class="code">net.core.netdev_max_backlog = 262144</div><br/>每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目。<br/><div class="code">net.ipv4.tcp_max_orphans = 262144</div><br/>系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字，孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击，不能过分依靠它或者人为地减小这个值，更应该增加这个值(如果增加了内存之后)。<br/><div class="code">net.ipv4.tcp_max_syn_backlog = 262144</div><br/>记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言，缺省值是1024，小内存的系统则是128。<br/><div class="code">net.ipv4.tcp_timestamps = 0</div><br/>时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。<br/><div class="code">net.ipv4.tcp_synack_retries = 1</div><br/>为了打开对端的连接，内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。<br/><div class="code">net.ipv4.tcp_syn_retries = 1</div><br/>在内核放弃建立连接之前发送SYN包的数量。<br/><div class="code">net.ipv4.tcp_fin_timeout = 1</div><br/>如果套接字由本端要求关闭，这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接，甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒，你可以按这个设置，但要记住的是，即使你的机器是一个轻载的WEB服务器，也有因为大量的死套接字而内存溢出的风险，FIN- WAIT-2的危险性比FIN-WAIT-1要小，因为它最多只能吃掉1.5K内存，但是它们的生存期长些。<br/><div class="code">net.ipv4.tcp_keepalive_time = 30</div><br/>当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时。<br/><br/><span style="font-size: 24px;">下面贴一个完整的内核优化设置：</span><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">net.ipv4.ip_forward = 0<br/>net.ipv4.conf.default.rp_filter = 1<br/>net.ipv4.conf.default.accept_source_route = 0<br/>kernel.sysrq = 0<br/>kernel.core_uses_pid = 1<br/>net.ipv4.tcp_syncookies = 1<br/>kernel.msgmnb = 65536<br/>kernel.msgmax = 65536<br/>kernel.shmmax = 68719476736<br/>kernel.shmall = 4294967296<br/>net.ipv4.tcp_max_tw_buckets = 6000<br/>net.ipv4.tcp_sack = 1<br/>net.ipv4.tcp_window_scaling = 1<br/>net.ipv4.tcp_rmem = 4096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;87380&nbsp;&nbsp; 4194304<br/>net.ipv4.tcp_wmem = 4096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16384&nbsp;&nbsp; 4194304<br/>net.core.wmem_default = 8388608<br/>net.core.rmem_default = 8388608<br/>net.core.rmem_max = 16777216<br/>net.core.wmem_max = 16777216<br/>net.core.netdev_max_backlog = 262144<br/>net.core.somaxconn = 262144<br/>net.ipv4.tcp_max_orphans = 3276800<br/>net.ipv4.tcp_max_syn_backlog = 262144<br/>net.ipv4.tcp_timestamps = 0<br/>net.ipv4.tcp_synack_retries = 1<br/>net.ipv4.tcp_syn_retries = 1<br/>net.ipv4.tcp_tw_recycle = 1<br/>net.ipv4.tcp_tw_reuse = 1<br/>net.ipv4.tcp_mem = 94500000 915000000 927000000<br/>net.ipv4.tcp_fin_timeout = 1<br/>net.ipv4.tcp_keepalive_time = 30<br/>net.ipv4.ip_local_port_range = 1024&nbsp;&nbsp;&nbsp;&nbsp;65000</div></div><br/><br/><span style="font-size: 24px;">下面是一个简单的nginx配置文件：</span><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">user&nbsp;&nbsp;www www;<br/>worker_processes 8;<br/>worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;<br/>error_log&nbsp;&nbsp;/www/log/nginx_error.log&nbsp;&nbsp;crit;<br/>pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/nginx/nginx.pid;<br/>worker_rlimit_nofile 204800;<br/><br/>events<br/>&#123;<br/>&nbsp;&nbsp;use epoll;<br/>&nbsp;&nbsp;worker_connections 204800;<br/>&#125;<br/><br/>http<br/>&#123;<br/>&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mime.types;<br/>&nbsp;&nbsp;default_type&nbsp;&nbsp;application/octet-stream;<br/><br/>&nbsp;&nbsp;charset&nbsp;&nbsp;utf-8;<br/><br/>&nbsp;&nbsp;server_names_hash_bucket_size 128;<br/>&nbsp;&nbsp;client_header_buffer_size 2k;<br/>&nbsp;&nbsp;large_client_header_buffers 4 4k;<br/>&nbsp;&nbsp;client_max_body_size 8m;<br/><br/>&nbsp;&nbsp;sendfile on;<br/>&nbsp;&nbsp;tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp; on;<br/><br/>&nbsp;&nbsp;keepalive_timeout 60;<br/><br/>&nbsp;&nbsp;fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keys_zone=TEST:10m<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inactive=5m;<br/>&nbsp;&nbsp;fastcgi_connect_timeout 300;<br/>&nbsp;&nbsp;fastcgi_send_timeout 300;<br/>&nbsp;&nbsp;fastcgi_read_timeout 300;<br/>&nbsp;&nbsp;fastcgi_buffer_size 16k;<br/>&nbsp;&nbsp;fastcgi_buffers 16 16k;<br/>&nbsp;&nbsp;fastcgi_busy_buffers_size 16k;<br/>&nbsp;&nbsp;fastcgi_temp_file_write_size 16k;<br/>&nbsp;&nbsp;fastcgi_cache TEST;<br/>&nbsp;&nbsp;fastcgi_cache_valid 200 302 1h;<br/>&nbsp;&nbsp;fastcgi_cache_valid 301 1d; <br/>&nbsp;&nbsp;fastcgi_cache_valid any 1m;<br/>&nbsp;&nbsp;fastcgi_cache_min_uses 1;<br/>&nbsp;&nbsp;fastcgi_cache_use_stale error timeout invalid_header http_500;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;open_file_cache max=204800 inactive=20s;<br/>&nbsp;&nbsp;open_file_cache_min_uses 1;<br/>&nbsp;&nbsp;open_file_cache_valid 30s;<br/>&nbsp;&nbsp;<br/><br/><br/>&nbsp;&nbsp;tcp_nodelay on;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;gzip on;<br/>&nbsp;&nbsp;gzip_min_length&nbsp;&nbsp;1k;<br/>&nbsp;&nbsp;gzip_buffers&nbsp;&nbsp;&nbsp;&nbsp; 4 16k;<br/>&nbsp;&nbsp;gzip_http_version 1.0;<br/>&nbsp;&nbsp;gzip_comp_level 2;<br/>&nbsp;&nbsp;gzip_types&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text/plain application/x-javascript text/css application/xml;<br/>&nbsp;&nbsp;gzip_vary on;<br/><br/><br/>&nbsp;&nbsp;server<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8080;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;backup.aiju.com;<br/>&nbsp;&nbsp;&nbsp;&nbsp;index index.php index.htm;<br/>&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;/www/html/;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;location /status<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stub_status on;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~ .*&#92;.(php&#124;php5)?$<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass 127.0.0.1:9000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_index index.php;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include fcgi.conf;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~ .*&#92;.(gif&#124;jpg&#124;jpeg&#124;png&#124;bmp&#124;swf&#124;js&#124;css)$<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30d;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;log_format&nbsp;&nbsp;access&nbsp;&nbsp;'$remote_addr - $remote_user [$time_local] "$request" '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$status $body_bytes_sent "$http_referer" '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'"$http_user_agent" $http_x_forwarded_for';<br/>&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;/www/log/access.log&nbsp;&nbsp;access;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;</div></div><br/><br/><span style="font-size: 24px;">关于FastCGI的几个指令：</span><br/><br/><div class="code">fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;</div><br/>这个指令为FastCGI缓存指定一个路径，目录结构等级，关键字区域存储时间和非活动删除时间。<br/><div class="code">fastcgi_connect_timeout 300;</div><br/>指定连接到后端FastCGI的超时时间。<br/><div class="code">fastcgi_send_timeout 300;</div><br/>向FastCGI传送请求的超时时间，这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。<br/><div class="code">fastcgi_read_timeout 300;</div><br/>接收FastCGI应答的超时时间，这个值是指已经完成两次握手后接收FastCGI应答的超时时间。<br/><div class="code">fastcgi_buffer_size 16k;</div><br/>指定读取FastCGI应答第一部分需要用多大的缓冲区，这里可以设置为fastcgi_buffers指令指定的缓冲区大小，上面的指令指定它将使用1个16k的缓冲区去读取应答的第一部分，即应答头，其实这个应答头一般情况下都很小（不会超过1k），但是你如果在fastcgi_buffers指令中指定了缓冲区的大小，那么它也会分配一个fastcgi_buffers指定的缓冲区大小去缓存。<br/><div class="code">fastcgi_buffers 16 16k;</div><br/>指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答，如上所示，如果一个php脚本所产生的页面大小为256k，则会为其分配16个16k的缓冲区来缓存，如果大于256k，增大于256k的部分会缓存到fastcgi_temp指定的路径中，当然这对服务器负载来说是不明智的方案，因为内存中处理数据速度要快于硬盘，通常这个值的设置应该选择一个你的站点中的php脚本所产生的页面大小的中间值，比如你的站点大部分脚本所产生的页面大小为256k就可以把这个值设置为16 16k，或者4 64k 或者64 4k，但很显然，后两种并不是好的设置方法，因为如果产生的页面只有32k，如果用4 64k它会分配1个64k的缓冲区去缓存，而如果使用64 4k它会分配8个4k的缓冲区去缓存，而如果使用16 16k则它会分配2个16k去缓存页面，这样看起来似乎更加合理。<br/><div class="code">fastcgi_busy_buffers_size 32k;</div><br/>这个指令我也不知道是做什么用，只知道默认值是fastcgi_buffers的两倍。<br/><div class="code">fastcgi_temp_file_write_size 32k;</div><br/>在写入fastcgi_temp_path时将用多大的数据块，默认值是fastcgi_buffers的两倍。<br/><div class="code">fastcgi_cache TEST</div><br/>开启FastCGI缓存并且为其制定一个名称。个人感觉开启缓存非常有用，可以有效降低CPU负载，并且防止502错误。但是这个缓存会引起很多问题，因为它缓存的是动态页面。具体使用还需根据自己的需求。<br/><div class="code">fastcgi_cache_valid 200 302 1h;<br/>fastcgi_cache_valid 301 1d;<br/>fastcgi_cache_valid any 1m;</div><br/>为指定的应答代码指定缓存时间，如上例中将200，302应答缓存一小时，301应答缓存1天，其他为1分钟。<br/><div class="code">fastcgi_cache_min_uses 1;</div><br/>缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数，如上例，如果在5分钟内某文件1次也没有被使用，那么这个文件将被移除。<br/><div class="code">fastcgi_cache_use_stale error timeout invalid_header http_500;</div><br/>不知道这个参数的作用，猜想应该是让nginx知道哪些类型的缓存是没用的。<br/>以上为nginx中FastCGI相关参数，另外，FastCGI自身也有一些配置需要进行优化，如果你使用php-fpm来管理FastCGI，可以修改配置文件中的以下值：<br/><div class="code">&lt;value name=&quot;max_children&quot;&gt;60&lt;/value&gt;</div><br/>同时处理的并发请求数，即它将开启最多60个子线程来处理并发连接。<br/><div class="code">&lt;value name=&quot;rlimit_files&quot;&gt;102400&lt;/value&gt;</div><br/>最多打开文件数。<br/><div class="code">&lt;value name=&quot;max_requests&quot;&gt;204800&lt;/value&gt;</div><br/>每个进程在重置之前能够执行的最多请求数。<br/><br/><span style="font-size: 24px;">下面贴几张测试结果图。</span><br/><br/>静态页面为我在squid配置4W并发那篇文章中提到的测试文件，下图为同时在6台机器运行webbench -c 30000 -t 600 http://backup.aiju.com:8080/index.html命令后的测试结果：<br/><p align="center"><a href="http://nginx.179401.cn/pic/nginxtestpic/htmlstatus.jpg" target="_blank"><img src="http://nginx.179401.cn/pic/nginxtestpic/htmlstatus.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a></p><br/>使用netstat过滤后的连接数：<br/><p align="center"><a href="http://nginx.179401.cn/pic/nginxtestpic/htmlnetstat.jpg" target="_blank"><img src="http://nginx.179401.cn/pic/nginxtestpic/htmlnetstat.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a></p><br/>php页面在status中的结果（php页面为调用phpinfo）：<br/><p align="center"><a href="http://nginx.179401.cn/pic/nginxtestpic/phpstatus.jpg" target="_blank"><img src="http://nginx.179401.cn/pic/nginxtestpic/phpstatus.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a></p><br/>php页面在netstat过滤后的连接数：<br/><p align="center"><a href="http://nginx.179401.cn/pic/nginxtestpic/phpnetstat.jpg" target="_blank"><img src="http://nginx.179401.cn/pic/nginxtestpic/phpnetstat.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a></p><br/>未使用FastCGI缓存之前的服务器负载：<br/><p align="center"><a href="http://nginx.179401.cn/pic/nginxtestpic/phpwithoutcache.jpg" target="_blank"><img src="http://nginx.179401.cn/pic/nginxtestpic/phpwithoutcache.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a></p><br/>此时打开php页面已经有些困难，需要进行多次刷新才能打开。上图中cpu0负载偏低是因为测试时将网卡中断请求全部分配到cpu0上，并且在nginx中开启7个进程分别制定到cpu1-7。<br/>使用FastCGI缓存之后：<br/><p align="center"><a href="http://nginx.179401.cn/pic/nginxtestpic/phpwithcache.jpg" target="_blank"><img src="http://nginx.179401.cn/pic/nginxtestpic/phpwithcache.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a></p><br/>此时可以很轻松的打开php页面。<br/><br/>这个测试并没有连接到任何数据库，所以并没有什么参考价值，不过不知道上述测试是否已经到达极限，根据内存和cpu的使用情况来看似乎没有，但是已经没有多余的机子来让我运行webbench了。囧<br/><br/><span style="font-size: 24px;">参考资料：</span><br/><br/>http://blog.chinaunix.net/u3/105004/showart_2087155.html<br/>http://nginx.179401.cn/<br/>http://blog.s135.com/nginx_php_v5/<br/><br/><span style="font-size: 24px;">PDF版下载：</span><br/><a href="http://nginx.179401.cn/nginx优化.pdf">点击这里下载文件</a><br/>Tags - <a href="179401.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="179401.cn/tag.php?tag=%25E4%25BC%2598%25E5%258C%2596" rel="tag">优化</a> , <a href="179401.cn/tag.php?tag=%25E5%2586%2585%25E6%25A0%25B8%25E5%258F%2582%25E6%2595%25B0" rel="tag">内核参数</a> , <a href="179401.cn/tag.php?tag=%25E9%25AB%2598%25E5%25B9%25B6%25E5%258F%2591" rel="tag">高并发</a>
]]>
</description>
</item><item>
<link>179401.cn/read.php?18</link>
<title><![CDATA[Nginx模块参考手册中文版]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[nginx]]></category>
<pubDate>Sun, 29 Nov 2009 11:26:26 +0000</pubDate> 
<guid>179401.cn/read.php?18</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;上班无聊，把<a href="http://wiki.nginx.org/NginxModules" target="_blank"><span style="color: #0000FF;">Nginx维基</span></a>的模块文档进行了翻译，由于是第一次翻译英文文档，错误在所难免，如果在阅读文档过程中发现翻译不当，还请及时与我联系！<br/>&nbsp;&nbsp;&nbsp;&nbsp;目前翻译完成的有核心模块（Nginx Core Modules），标准模块（Standard HTTP Modules），可选模块（Optional HTTP Modules）和邮件模块（Mail modules），其中包括nginx中每个指令的语法和参数。另外，第三方模块正在翻译中。<br/>&nbsp;&nbsp;&nbsp;&nbsp;文档的HTML版将随nginx维基同步更新，PDF会在维基做出比较大的更新以后进行更新。以下分别为HTML版和PDF版地址：<br/>&nbsp;&nbsp;&nbsp;&nbsp;HTML版：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><a href="http://nginx.179401.cn" target="_blank">http://nginx.179401.cn</a></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDF版：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><a href="http://nginx.179401.cn/Nginx模块参考手册中文版.pdf" target="_blank">Nginx模块参考手册中文版</a></div></div><br/><br/>Tags - <a href="179401.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="179401.cn/tag.php?tag=%25E6%25A8%25A1%25E5%259D%2597" rel="tag">模块</a> , <a href="179401.cn/tag.php?tag=%25E4%25B8%25AD%25E6%2596%2587" rel="tag">中文</a>
]]>
</description>
</item><item>
<link>179401.cn/read.php?17</link>
<title><![CDATA[clfs笔记]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[linux定制]]></category>
<pubDate>Thu, 29 Oct 2009 05:57:04 +0000</pubDate> 
<guid>179401.cn/read.php?17</guid> 
<description>
<![CDATA[ 
	网上摘的一段关于CLFS的解释：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">CLFS就是交叉编译的LFS——LFS又是什么？一个指导 你一步一步，完全从源代码级编译出整个按照你定制要求的Linux系统的项目。<br/>令人不解的，有许多现成的Linux distro让我们下载了，为什么还要从零构建一个Linux？这常常引起人们的争论。事实上，构建CLFS还是有它的益处的 ：<br/>1、CLFS可以教会人们如何构造一个交叉编译器，比如你可以在x86的机器上构建出一套sparc工具链，然后利用这套工具链有可以从源代码级 生成一个Linux系统；<br/>2、CLFS可以教会人们如何使用多库共存的系统，充分挖掘目标系统的潜力；<br/>3、CLFS可以告诉人们Linux系统内部是如何工作的，它 的每一次滴答运行，它们是如何相互依赖的，从而就知道如何定制适合你的口味的系统！<br/>4、CLFS可以生成 一个紧凑的系统，而在一般distro发行版本中有很多程序你可能从来不会用到，白白浪费磁盘空间；<br/>5、CLFS可以从大多数Unix类系统开始构建，甚至是非Unix系统！<br/>6、CLFS是高度可定制的，这正如装修房子，CLFS只是给出一个轮廓框架，而水管、电线布局、厨房、浴室设施等等完全由你决定；<br/>7、CLFS可以提供额外的安全性，有人可能会在编译阶段便把某个安全代码补丁加入到系统中，而不用等到别人给出二进制补丁包<br/></div></div><br/>以下是本人的clfs笔记，虽然中间遇到很多问题，但最终还是成功了，见附件：<br/><a href="http://nginx.179401.cn/clfs6.4-x86_64.pdf">点击这里下载文件</a><br/>参考文档：<br/>http://cross-lfs.org/view/svn/x86_64-64/index.html<br/>http://lamp.linux.gov.cn/Linux/LFS-6.2/index.html<br/>Tags - <a href="179401.cn/tag.php?tag=clfs" rel="tag">clfs</a> , <a href="179401.cn/tag.php?tag=lfs" rel="tag">lfs</a>
]]>
</description>
</item><item>
<link>179401.cn/read.php?16</link>
<title><![CDATA[linux下一个能显示IP来源的小工具-nali]]></title> 
<author> &lt;&gt;</author>
<category><![CDATA[linux系统管理]]></category>
<pubDate>Thu, 10 Sep 2009 08:17:54 +0000</pubDate> 
<guid>179401.cn/read.php?16</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nali，名字取自中文“哪里”的拼音。nali包含一组命令行程序，其主要功能就是把一些网络工具的输出的IP字符串，附加上地理位置信息(使用纯真数据库)。例如218.65.137.1会变成218.65.137.1[广西南宁市 电信]。查询是在本地进行，并不会进行联网查询，所以效率方面不会有什么影响。 <br/>&nbsp;&nbsp;&nbsp;&nbsp; 目前包含以下几个命令： <br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">nali <br/>nali-dig <br/>nali-nslookup <br/>nali-traceroute <br/>nali-tracepath <br/>nali-ping</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用这些命令的前提是，他们对应的命令必须存在。例如你要用nali-dig，必须保证dig是存在的。他们的用法和原始命令是一样的。例如nali-dig，用法就和dig一样。 <br/>&nbsp;&nbsp;&nbsp;&nbsp; 大家可能注意到了nali这个命令，它可以对标准输出的IP串附加上地理信息。nali-*系列工具都是基于这个来实现的。 <br/>&nbsp;&nbsp;&nbsp;&nbsp; 下载：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">wget http://qqwry.googlecode.com/files/nali-0.1.tar.gz</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安装：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">./configure && make && make install</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 1、统计apache的访问记录（可以统计哪个ip的访问量最多，并查看是来自哪里的）：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 命令：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">cat /data/log/log_all &#124; awk '&#123;print $1&#125;' &#124; sort &#124; uniq -c &#124; nali &#124; sort -rnk1 &#124; more</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出结果：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">&nbsp;&nbsp;&nbsp;&nbsp;2303 203.208.60.43[北京市 谷歌(中国)公司]<br/>&nbsp;&nbsp; 1442 61.135.249.210[北京市 联通ADSL]<br/>&nbsp;&nbsp;&nbsp;&nbsp;827 124.207.205.1[北京市 电信通]<br/>&nbsp;&nbsp;&nbsp;&nbsp;607 121.14.53.65[广东省江门市 电信]<br/>&nbsp;&nbsp;&nbsp;&nbsp;493 117.63.249.59[江苏省常州市 电信]<br/>&nbsp;&nbsp;&nbsp;&nbsp;289 203.208.60.5[北京市 谷歌(中国)公司]<br/>&nbsp;&nbsp;&nbsp;&nbsp;272 203.208.60.47[北京市 谷歌(中国)公司]<br/>&nbsp;&nbsp;&nbsp;&nbsp;252 173.66.232.6[北美地区]<br/>&nbsp;&nbsp;&nbsp;&nbsp;240 61.185.198.110[陕西省西安市 电信ADSL]<br/>&nbsp;&nbsp;&nbsp;&nbsp;217 123.127.8.36[北京市 联通ADSL]<br/>&nbsp;&nbsp;&nbsp;&nbsp;217 113.233.255.7[辽宁省 联通]<br/>&nbsp;&nbsp;&nbsp;&nbsp;206 222.76.18.181[福建省福州市 电信ADSL]<br/>&nbsp;&nbsp;&nbsp;&nbsp;196 72.30.81.190[美国 yahoo蜘蛛]</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、使用traceroute：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">nali-traceroute www.google.com </div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出结果：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">traceroute to www.google.com (72.14.203.147[美国 加利福尼亚州山景市谷歌公司]), 30 hops max, 40 byte packets<br/> 1&nbsp;&nbsp;61.189.23.129[辽宁省 联通] (61.189.23.129[辽宁省 联通])&nbsp;&nbsp;16.628 ms&nbsp;&nbsp;16.796 ms&nbsp;&nbsp;16.891 ms<br/> 2&nbsp;&nbsp;218.25.16.153[辽宁省沈阳市铁西区 /皇姑区联通] (218.25.16.153[辽宁省沈阳市铁西区 /皇姑区联通])&nbsp;&nbsp;0.658 ms&nbsp;&nbsp;0.691 ms&nbsp;&nbsp;0.685 ms<br/> 3&nbsp;&nbsp;218.61.253.201[辽宁省葫芦岛市 联通] (218.61.253.201[辽宁省葫芦岛市 联通])&nbsp;&nbsp;7.976 ms&nbsp;&nbsp;8.008 ms&nbsp;&nbsp;8.001 ms<br/> 4&nbsp;&nbsp;218.61.255.185[辽宁省 联通骨干网] (218.61.255.185[辽宁省 联通骨干网])&nbsp;&nbsp;20.614 ms&nbsp;&nbsp;20.643 ms&nbsp;&nbsp;20.636 ms<br/> 5&nbsp;&nbsp;219.158.9.57[北京市 联通ADSL] (219.158.9.57[北京市 联通ADSL])&nbsp;&nbsp;29.274 ms&nbsp;&nbsp;29.272 ms&nbsp;&nbsp;29.264 ms<br/> 6&nbsp;&nbsp;219.158.3.194[北京市 联通ADSL] (219.158.3.194[北京市 联通ADSL])&nbsp;&nbsp;44.582 ms&nbsp;&nbsp;44.464 ms&nbsp;&nbsp;44.489 ms<br/> 7&nbsp;&nbsp;219.158.27.118[北京市 联通ADSL] (219.158.27.118[北京市 联通ADSL])&nbsp;&nbsp;82.249 ms&nbsp;&nbsp;82.690 ms&nbsp;&nbsp;82.648 ms<br/> 8&nbsp;&nbsp;209.85.249.195[美国 加利福尼亚州山景市谷歌公司] (209.85.249.195[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;67.663 ms 209.85.249.192[美国 加利福尼亚州山景市谷歌公司] (209.85.249.192[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;66.336 ms 209.85.249.195[美国 加利福尼亚州山景市谷歌公司] (209.85.249.195[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;68.010 ms<br/> 9&nbsp;&nbsp;209.85.250.90[美国 加利福尼亚州山景市谷歌公司] (209.85.250.90[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;97.320 ms 209.85.250.86[美国 加利福尼亚州山景市谷歌公司] (209.85.250.86[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;112.428 ms 209.85.250.90[美国 加利福尼亚州山景市谷歌公司] (209.85.250.90[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;99.948 ms<br/>10&nbsp;&nbsp;209.85.243.21[美国 加利福尼亚州山景市谷歌公司] (209.85.243.21[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;96.939 ms 209.85.250.103[美国 加利福尼亚州山景市谷歌公司] (209.85.250.103[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;97.206 ms 209.85.243.21[美国 加利福尼亚州山景市谷歌公司] (209.85.243.21[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;96.935 ms<br/>11&nbsp;&nbsp;209.85.241.158[美国 加利福尼亚州山景市谷歌公司] (209.85.241.158[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;120.577 ms&nbsp;&nbsp;120.588 ms&nbsp;&nbsp;120.543 ms<br/>12&nbsp;&nbsp;tx-in-f147.google.com (72.14.203.147[美国 加利福尼亚州山景市谷歌公司])&nbsp;&nbsp;117.533 ms&nbsp;&nbsp;117.623 ms&nbsp;&nbsp;117.651 ms</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也就是说，nali这个命令，可以对标准输出的ip，附加上地理信息。同理，如果你不喜欢用nali-dig，那么也可以用dig ip&#124;nali这样的命令。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你觉得输入nali-xxx麻烦，那么可以做一些alias，例如：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">alias traceroute='nali-traceroute'<br/>alias dig='nali-dig'</div></div><br/>参考资料：<br/>http://www.surfchen.org/wiki/Nali<br/>Tags - <a href="179401.cn/tag.php?tag=nali" rel="tag">nali</a> , <a href="179401.cn/tag.php?tag=ip" rel="tag">ip</a> , <a href="179401.cn/tag.php?tag=%25E6%2598%25BE%25E7%25A4%25BAip%25E6%259D%25A5%25E6%25BA%2590" rel="tag">显示ip来源</a>
]]>
</description>
</item>
</channel>
</rss>