<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://jed.dzhope.com/index.php</link> 
<description><![CDATA[孙健的小草屋]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://jed.dzhope.com/read.php?686</link>
<title><![CDATA[php open_basedir安全与性能的取舍]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 08 Sep 2010 05:41:00 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?686</guid> 
<description>
<![CDATA[ 
	网站的安全与性能似乎是矛与盾的关系。对于一个php网站来说，尤其难以取舍。举个最简单的例子：php配置文件的open_basedir将 PHP 所能打开的文件限制在指定的目录树，包括文件本身。本来这对于网站的安全是十分有利的；但据笔者从网上获取的资料来看，open_basedir会对php操作io的性能产生很大的影响。研究资料表明，配置了php_basedir的脚本io执行速度会比没有配置的慢10倍甚至更多！<br/><br/><br/>起初，我也不太相信这个结果，不过测试数据却说服我承认这个观点。<br/><br/>创建一个简单的脚本：<br/><br/><div class="code"><br/>&lt;?php <br/> function microtime_float() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; list($usec, $sec) = explode(&quot; &quot;, microtime());<br/>&nbsp;&nbsp;&nbsp;&nbsp; return ((float)$usec + (float)$sec); <br/>&#125;<br/>&nbsp;&nbsp; $time_start = microtime_float();<br/>&nbsp;&nbsp; is_file(&#039;1.html&#039;);&nbsp;&nbsp;//判断当前目录是否有1.html这个文件<br/> $time_end = microtime_float();<br/> $time = $time_end - $time_start;<br/>&nbsp;&nbsp; echo &quot;Did is_file in $time seconds&#92;n&quot;;<br/> ?&gt;<br/></div><br/><br/>对于open_basedir的测试结果<br/>0.0006 / 5.0E-5<br/>差距是相当大的，不过聪明的朋友应该注意到，笔者的网站配置了open_basedir，相对与这样的性能损失来说，我宁愿选择牺牲性能，换取安全，您的选择呢？不用猜，您可能和我的选择一致啦～毕竟服务器安全更重要些。<br/><br/>小提示：如何配置open_basedir<br/>当一个脚本试图用例如 fopen() 或者 gzopen() 打开一个文件时，该文件的位置将被检查。当文件在指定的目录树之外时 PHP 将拒绝打开它。所有的符号连接都会被解析，所以不可能通过符号连接来避开此限制。<br/><br/>特殊值 . 指明脚本的工作目录将被作为基准目录。但这有些危险，因为脚本的工作目录可以轻易被 chdir() 而改变。<br/><br/>在 httpd.conf 文件中中，open_basedir 可以像其它任何配置选项一样用“php_admin_value open_basedir none”的方法关闭（例如某些虚拟主机中）。<br/><br/>在 Windows 中，用分号分隔目录。在任何其它系统中用冒号分隔目录。作为 Apache 模块时，父目录中的 open_basedir 路径自动被继承。<br/><br/>用 open_basedir 指定的限制实际上是前缀，不是目录名。也就是说“open_basedir = /dir/incl”也会允许访问“/dir/include”和“/dir/incls”，如果它们存在的话。如果要将访问限制在仅为指定的目录，用斜线结束路径名。例如：“open_basedir = /dir/incl/”。<br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=php" rel="tag">php</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E5%25AE%2589%25E5%2585%25A8" rel="tag">安全</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?685</link>
<title><![CDATA[php木马webshell扫描器]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 08 Sep 2010 01:49:55 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?685</guid> 
<description>
<![CDATA[ 
	因为前端时间服务器被放过 所以写了个webshell扫描器 呵呵 专杀php webshell 不管大马还是小马 包括一句话 现在放出代码来。<br/><div class="code"><br/>&lt;?php<br/>/*<br/>+--------------------------------------------------------------------------+<br/>&#124; Codz by indexphp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version:0.01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br/>&#124; (c) 2009 indexphp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>&#124; http://www.dzhope.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; <br/>+--------------------------------------------------------------------------+<br/>*/<br/>/*===================== 程序配置 =====================*/ <br/><br/>$dir=&#039;cms&#039;; //设置要扫描的目录<br/>$jumpoff=false;//设置要跳过检查的文件<br/>$jump=&#039;safe.php&#124;g&#039;; //设置要跳过检查的文件或者文件夹 $jumpoff=false 时此设置有效<br/>$danger=&#039;eval&#124;cmd&#124;passthru&#039;;//设置要查找的危险的函数 以确定是否木马文件<br/>$suffix=&#039;php&#124;inc&#039;;//设置要扫描文件的后缀<br/>$dir_num=0;<br/>$file_num=0;<br/>$danger_num=0;<br/>/*===================== 配置结束 =====================*/ <br/><br/>extract (GetHttpVars());<br/><br/>if ($m==&quot;edit&quot;) Edit();<br/>if ($m==&quot;del&quot;) Delete();<br/>if ($check==&#039;check&#039;)<br/>&#123;&nbsp;&nbsp; $safearr = explode(&quot;&#124;&quot;,$jump);<br/>$start_time=microtime(true);<br/>safe_check($dir);<br/>$end_time=microtime(true);<br/>$total=$end_time-$start_time;<br/>$file_num=$file_num-$dir_num;<br/>$message= &quot; 文件数:&quot;.$file_num;<br/>$message.= &quot; 文件夹数：&quot;.$dir_num;<br/>$message.= &quot; 可疑文件数：&quot;.$danger_num;<br/>$message.= &quot; 执行时间：&quot;.$total;<br/>echo $message;<br/>exit();<br/>&#125;<br/>function GetHttpVars() &#123;//全局变量<br/>$superglobs = array(<br/>&#039;_POST&#039;,<br/>&#039;_GET&#039;,<br/>&#039;HTTP_POST_VARS&#039;,<br/>&#039;HTTP_GET_VARS&#039;);<br/>$httpvars = array(); <br/><br/><br/>foreach ($superglobs as $glob) &#123;<br/>&nbsp;&nbsp; global $$glob;<br/>&nbsp;&nbsp; if (isset($$glob) &amp;&amp; is_array($$glob)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$httpvars = $$glob;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if (count($httpvars) &gt; 0)<br/>&nbsp;&nbsp; break;<br/>&#125;<br/>return $httpvars; <br/><br/><br/>&#125;<br/>function Safe_Check($dir)//遍历文件<br/>&#123;<br/>global $danger ,$suffix ,$dir_num ,$file_num ,$danger_num; <br/><br/>dedecms.com<br/><br/>$hand=@dir($dir) or die(&#039;文件夹不存在&#039;) ;<br/>while ($file=$hand-&gt;read() )<br/>&#123;<br/>&nbsp;&nbsp; $filename=$dir.&#039;/&#039;.$file;<br/>&nbsp;&nbsp; if (!$jumpoff) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(Jump($filename))continue;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if(@is_dir($filename) &amp;&amp; $file != &#039;.&#039; &amp;&amp; $file!= &#039;..&#039;&amp;&amp; $file!=&#039;./..&#039;)<br/>&nbsp;&nbsp; &#123;&nbsp;&nbsp; $dir_num++;<br/>&nbsp;&nbsp; Safe_Check($filename);<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if (preg_match_all (&quot;/&#92;.($suffix)/i&quot;,$filename,$out))<br/>&nbsp;&nbsp; &#123; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$str=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$fp = @fopen($filename,&#039;r&#039;)or die(&#039;没有权限&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(!feof($fp))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $str .= fgets($fp,1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fclose($fp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if( preg_match_all (&quot;/($danger)&#91; &#92;r&#92;n&#92;t&#93;&#123;0,&#125;(&#91;&#92;&#91;&#92;(&#93;)/i&quot;,$str,$out))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;&lt;font color=&#039;green&#039; style=&#039;font-size:14px&#039;&gt;可疑文件：&#123;$filename&#125;&lt;/font&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&#039;?m=edit&amp;filename=$filename&#039; target=&#039;_blank&#039;&gt;&lt;u&gt;查看代码&lt;/u&gt;&lt;/a&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&#039;?m=del&amp;filename=$filename&#039; target=&#039;_blank&#039;&gt;删除&lt;/u&gt;&lt;/a&gt;&lt;br&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $danger_num++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp; &#125; <br/><br/>&nbsp;&nbsp; $file_num++;<br/>&#125;<br/>&#125;<br/>function Edit()//查看可疑文件<br/>&#123;<br/>global $filename;<br/>$filename = str_replace(&quot;..&quot;,&quot;&quot;,$filename);<br/>$file = $filename;<br/>$content = &quot;&quot;;<br/>if(is_file($file))<br/>&#123;<br/>&nbsp;&nbsp; $fp = fopen($file,&quot;r&quot;)or die(&#039;没有权限&#039;);<br/>&nbsp;&nbsp; $content = fread($fp,filesize($file));<br/>&nbsp;&nbsp; fclose($fp);<br/>&nbsp;&nbsp; $content = htmlspecialchars($content); 网站优化 <br/><br/>&#125;<br/>echo &quot;&lt;textarea name=&#039;str&#039; style=&#039;width:100%;height:450px;background:#cccccc;&#039;&gt;$content&lt;/textarea&gt;&#92;r&#92;n&quot;;<br/>exit();<br/>&#125;<br/>function Delete()//删除文件<br/>&#123;<br/>global $filename;<br/>(is_file($filename))?($mes=unlink($filename)?&#039;删除成功&#039;:&#039;删除失败 查看权限&#039;):&#039;&#039;;<br/>echo $mes;<br/>exit();<br/>&#125;<br/>function Jump($file)//跳过文件<br/>&#123;<br/>global $jump,$safearr;<br/>if($jump != &#039;&#039;)<br/>&#123;<br/>&nbsp;&nbsp; foreach($safearr as $v)<br/>&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($v==&#039;&#039;) continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if( eregi($v,$file) ) return true ;<br/>&nbsp;&nbsp; &#125;<br/>&#125;<br/>return false;<br/>&#125; <br/><br/>?&gt;<br/>&lt;form action=&quot;&quot; &gt;<br/>&lt;input type=&quot;submit&quot;&nbsp;&nbsp; value=&quot;开始检测&quot; /&gt;<br/>&lt;input type=&quot;hidden&quot;&nbsp;&nbsp; name=&quot;check&quot;&nbsp;&nbsp; value=&quot;check&quot;/&gt;<br/>&lt;/form&gt; <br/><br/><br/></div><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=php" rel="tag">php</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E6%259C%25A8%25E9%25A9%25AC" rel="tag">木马</a> , <a href="http://jed.dzhope.com/tag.php?tag=webshell" rel="tag">webshell</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?684</link>
<title><![CDATA[针对PHP木马攻击的防御措施]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 08 Sep 2010 01:43:30 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?684</guid> 
<description>
<![CDATA[ 
	1、防止跳出web目录<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;首先修改httpd.conf，如果你只允许你的php脚本程序在web目录里操作，还可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs，那么在httpd.conf里加上这么几行：<br/><br/>　　php_admin_value open_basedir /usr/local/apache<br/><br/>　　/htdocs<br/><br/>　　这样，如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许，如果错误显示打开的话会提示这样的错误： <br/><br/>　　Warning: open_basedir restriction in effect. File is in wrong directory in <br/><br/>　　/usr/local/apache/htdocs/open.php on line 4 <br/><br/>　　等等。 <br/><br/>　　2、防止php木马执行webshell <br/><br/>　　打开safe_mode， <br/><br/>　　在，php.ini中设置 <br/><br/>　　disable_functions= passthru，exec，shell_exec，system<br/><br/>　　二者选一即可，也可都选<br/><br/>　　3、防止php木马读写文件目录<br/><br/>　　在php.ini中的 <br/><br/>　　disable_functions= passthru，exec，shell_exec，system<br/><br/>　　后面加上php处理文件的函数 <br/><br/>　　主要有 <br/><br/>　　fopen，mkdir，rmdir，chmod，unlink，dir <br/><br/>　　fopen，fread，fclose，fwrite，file_exists <br/><br/>　　closedir，is_dir，readdir.opendir <br/><br/>　　fileperms.copy，unlink，delfile <br/><br/>　　即成为 <br/><br/>　　disable_functions= passthru，exec，shell_exec，system，fopen，mkdir，rmdir，chmod，unlink，dir <br/><br/>　　，fopen，fread，fclose，fwrite，file_exists <br/><br/>　　，closedir，is_dir，readdir.opendir <br/><br/>　　，fileperms.copy，unlink，delfile <br/><br/>　　ok，大功告成，php木马拿我们没辙了，遗憾的是这样的话，利用文本数据库的那些东西就都不能用了。<br/><br/>　　如果是在windos平台下搭建的apache我们还需要注意一点，apache默认运行是system权限，这很恐怖，这让人感觉很不爽.那我们就给apache降降权限吧。<br/><br/>　　net user apache fuckmicrosoft /add<br/><br/>　　net localgroup users apache /del<br/><br/>　　ok.我们建立了一个不属于任何组的用户apche。<br/><br/>　　我们打开计算机管理器，选服务，点apache服务的属性，我们选择log on，选择this account，我们填入上面所建立的账户和密码，重启apache服务，ok，apache运行在低权限下了。 <br/><br/>　　实际上我们还可以通过设置各个文件夹的权限，来让apache用户只能执行我们想让它能干的事情，给每一个目录建立一个单独能读写的用户。这也是当前很多虚拟主机提供商的流行配置方法哦，不过这种方法用于防止这里就显的有点大材小用了。 <br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=php" rel="tag">php</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E6%259C%25A8%25E9%25A9%25AC" rel="tag">木马</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?683</link>
<title><![CDATA[php木马扫描原理]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 08 Sep 2010 01:42:36 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?683</guid> 
<description>
<![CDATA[ 
	一般网站木马特征:<br/><br/>1.有一些常见的危险函数，如shell_exec，passthru，move_uploaded_file ($_FILES’)等等。大部分常用的webshell都有这些函数。当然还有一些危险的sql查询语句。2.有一些常见的关键词。大部分流行的php木马都是从几款webshell修改而来，里面会有一些常见的词，比如说一个在线的黑客工具网站‘cha88.cn’（现已改名为tools88.com），phpspy（一款最常用的php webshell）3.有一些加密的特征。正常的php文件一般是未加密过的，而很多php木马为了逃过杀毒软件的查杀，会进行加密。会出现类似于val(gzinflate(这样的加密函数。1.有一些常见的危险函数，如shell_exec，passthru，move_uploaded_file ($_FILES’)等<br/><br/>等。大部分常用的webshell都有这些函数。当然还有一些危险的sql查询语句。<br/><br/>2.有一些常见的关键词。大部分流行的php木马都是从几款webshell修改而来，里面会有一些<br/><br/>常见的词，比如说一个在线的黑客工具网站‘cha88.cn’（现已改名为tools88.com），<br/><br/>phpspy（一款最常用的php webshell）<br/><br/>3.有一些加密的特征。正常的php文件一般是未加密过的，而很多php木马为了逃过杀毒软件<br/><br/>的查杀，会进行加密<br/><br/>特征码:<br/><br/>$check_injection= array(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //危险代码<br/><br/>‘clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8′,<br/><br/>‘clsid:13709620-C279-11CE-A49E-444553540000′,<br/><br/>‘WScript.Shell’,<br/><br/>‘Shell.Application’,<br/><br/>‘eval’,<br/><br/>‘Execute’,<br/><br/>‘CreateTextFile’,<br/><br/>‘OpenTextFile’,<br/><br/>‘SaveToFile’,<br/><br/>‘CreateObject’,<br/><br/>‘cmd’,<br/><br/>‘passthru’ <br/><br/>);<br/><br/>原理很简单 ，对特征码进行文件式扫描…<br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=php" rel="tag">php</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E6%259C%25A8%25E9%25A9%25AC" rel="tag">木马</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?680</link>
<title><![CDATA[linux下IPTABLES配置详解]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Fri, 13 Aug 2010 00:19:33 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?680</guid> 
<description>
<![CDATA[ 
	我们来配置一个filter表的防火墙.<br/>(1)查看本机关于IPTABLES的设置情况<br/>[root@tp ~]# iptables -L -n<br/>Chain INPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain FORWARD (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain OUTPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain RH-Firewall-1-INPUT (0 references)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; icmp --&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; icmp type 255<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; esp&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; ah&nbsp;&nbsp; --&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; udp&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;224.0.0.251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp dpt:5353<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; udp&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp dpt:631<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state RELATED,ESTABLISHED<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:22<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:80<br/>ACCEPT&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:25<br/>REJECT&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;--&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reject-with icmp-host-prohibited<br/>可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.<br/>如果你在安装linux时没有选择启动防火墙,是这样的<br/>[root@tp ~]# iptables -L -n<br/>Chain INPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain FORWARD (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain OUTPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;<br/>什么规则都没有.<br/>(2)清除原有规则.<br/>不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.<br/>[root@tp ~]# iptables -F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清除预设表filter中的所有规则链的规则<br/>[root@tp ~]# iptables -X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清除预设表filter中使用者自定链中的规则<br/>我们在来看一下<br/>[root@tp ~]# iptables -L -n<br/>Chain INPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain FORWARD (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain OUTPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp; <br/>什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.<br/>[root@tp ~]#/etc/rc.d/init.d/iptables save<br/> <br/>这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.<br/>[root@tp ~]# service iptables restart<br/> <br/>现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧<br/>(3)设定预设规则<br/>[root@tp ~]# iptables -P INPUT DROP<br/>[root@tp ~]# iptables -P OUTPUT ACCEPT<br/>[root@tp ~]# iptables -P FORWARD DROP<br/>上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包<br/>而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.<br/>可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.<br/>这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.<br/>注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.<br/>怎么办,去本机操作呗!<br/>(4)添加规则.<br/>首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链<br/>为了能采用远程SSH登陆,我们要开启22端口.<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT<br/>[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT(注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.<br/>其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:<br/>[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)<br/>如果做了WEB服务器,开启80端口.<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT<br/>如果做了邮件服务器,开启25,110端口.<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT<br/>如果做了FTP服务器,开启21端口<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT<br/>如果做了DNS服务器,开启53端口<br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT<br/>如果你还做了其他的服务器,需要开启哪个端口,照写就行了.<br/>上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP<br/>允许icmp包通过,也就是允许ping,<br/>[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)<br/>[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT&nbsp;&nbsp;(INPUT设置成DROP的话)<br/><br/>允许loopback!(不然会导致DNS无法正常关闭等问题)<br/>IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)<br/>IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)<br/><br/>下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.<br/>减少不安全的端口连接<br/>[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP<br/>[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP<br/>有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会<br/>还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139（smb）,2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.<br/> <br/>当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加<br/>允许SSH登陆一样.照着写就行了.<br/> <br/>下面写一下更加细致的规则,就是限制到某台机器<br/>如:我们只允许192.168.0.3的机器进行SSH连接<br/>[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT<br/>如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.<br/>24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.<br/>-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.<br/>或采用命令方式:<br/>[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT<br/>然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.<br/>[root@tp ~]#/etc/rc.d/init.d/iptables save<br/>这样写 !192.168.0.3 表示除了192.168.0.3的ip地址<br/>其他的规则连接也一样这么设置.<br/> <br/>在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.<br/>开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)<br/>[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT<br/>[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT<br/>丢弃坏的TCP包<br/>[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP<br/>处理IP碎片数量,防止攻击,允许每秒100个<br/>[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT<br/>设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.<br/>[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT<br/>我在前面只所以允许ICMP包通过,就是因为我在这里有限制.<br/><br/>二,配置一个NAT表放火墙<br/>1,查看本机关于NAT的设置情况<br/>[root@tp rc.d]# iptables -t nat -L<br/>Chain PREROUTING (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Chain POSTROUTING (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>SNAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;--&nbsp;&nbsp;192.168.0.0/24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anywhere&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to:211.101.46.235<br/>Chain OUTPUT (policy ACCEPT)<br/>target&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp; <br/>我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章<br/>当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的<br/>如果你想清除,命令是<br/>[root@tp ~]# iptables -F -t nat<br/>[root@tp ~]# iptables -X -t nat<br/>[root@tp ~]# iptables -Z-t nat<br/> <br/>2,添加规则<br/>添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),<br/>添加规则,我们只添加DROP链.因为默认链全是ACCEPT.<br/>防止外网用内网IP欺骗<br/>[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP<br/>[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP<br/>[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP<br/> 如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)<br/>例：<br/>禁止与211.101.46.253的所有连接<br/> [root@tp ~]# iptables-t nat -A PREROUTING&nbsp;&nbsp;-d 211.101.46.253 -j DROP<br/>禁用FTP(21)端口 <br/>[root@tp ~]# iptables-t nat -A PREROUTING -p tcp --dport 21 -j DROP<br/>这样写范围太大了,我们可以更精确的定义.<br/>[root@tp ~]# iptables-t nat -A PREROUTING&nbsp;&nbsp;-p tcp --dport 21 -d 211.101.46.253 -j DROP<br/>这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.<br/>按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.<br/> <br/>最后：<br/>drop非法连接<br/>[root@tp ~]# iptables -A INPUT&nbsp;&nbsp; -m state --state INVALID -j DROP<br/>[root@tp ~]# iptables -A OUTPUT&nbsp;&nbsp;-m state --state INVALID -j DROP<br/>[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP<br/>允许所有已经建立的和相关的连接<br/>[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br/>[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br/><br/>[root@tp ~]#/etc/rc.d/init.d/iptables save<br/><br/>这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用．<br/><br/>[root@tp ~]# service iptables restart<br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=iptables" rel="tag">iptables</a> , <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E9%2598%25B2%25E7%2581%25AB%25E5%25A2%2599" rel="tag">防火墙</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?679</link>
<title><![CDATA[各种服务器配置的比较]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 10 Aug 2010 13:12:43 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?679</guid> 
<description>
<![CDATA[ 
	1) 目前各种服务器HTTP Server对PHP的支持一共有三种： <br/><br/>a.通过HTTPServer内置的模块来实现，<br/>例如Apache的mod_php5，类似的Apache内置的mod_perl可以对perl支持；<br/><br/>b.通过CGI来实现，这个就好比之前perl的CGI，该种方式的缺点是性能差，因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器；另一方面就是不太安全；该方面几乎很少使用了。<br/><br/>c.最新出现一种叫做FastCGI。所谓FastCGI就是对CGI的改进。它一般采用C/S结构，一般脚本处理器会启动一个或者多个daemon进程，每次HTTPServer遇到脚本的时候，直接交付给FastCGI的进程来执行，然后将得到的结果(通常为html)返回给浏览器。<br/><br/>>该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话，脚本处理器的daemon进程可能会超负荷从而变得很慢，甚至发生内存泄漏；<br/><br/>>但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责，因此服务器不再臃肿，可以专心地进行静态文件响应或者将动态脚本解析器的结果返回给用户客户端。所以比较起Apache的内置模块方式，有时候性能要提高很多。有人测试可能会达到 Apache+mod_php的5~10倍。<br/><br/><br/>2) 使用FastCGI方式现在常见的有两种stack：ligthttpd+spawn-fcgi; 另外一种是nginx+PHP-FPM(也可以用spawn-fcgi) 。 <br/><br/>a.如上面所说该两种结构都采用FastCGI对PHP支持，因此HTTPServer完全解放出来，可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。<br/><br/>b. 该两者还可以分出一个好坏来，spawn-fcgi由于是lighttpd的一部分，因此安装了lighttpd一般就会使用spawn-fcgi对 php支持，但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候，会出现上面说的内存泄漏甚至自动重启fastcgi。即：PHP 脚本处理器当机，这个时候如果用户访问的话，可能就会出现白页(即PHP不能被解析或者出错)。<br/><br/>另一个：首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi)，因此它完全是轻量级的，必须借助第三方的FastCGI 处理器才可以对PHP进行解析，因此其实这样看来nginx是非常灵活的，它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在 nginx.conf中很容易设置)。<br/><br/>nginx可以使用spwan-fcgi(需要一同安装lighttpd，但是需要为nginx避开端口，一些较早的blog有这方面安装的教程)，但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷，现在慢慢减少使用nginx+spawn-fcgi组合了。<br/><br/>c. 由于spawn-fcgi的缺陷，现在出现了新的第三方(目前还是，听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器，叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点：<br/>由于它是作为PHP的patch补丁来开发的，安装的时候需要和php源码一起编译，也就是说编译到php core中了，因此在性能方面要优秀一些；<br/>同时它在处理高并发方面也优于spawn-fcgi，至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。<br/><br/>因此，如上所说由于nginx的轻量和灵活性，因此目前性能优越，越来越多人逐渐使用这个组合：nginx+PHP/PHP-FPM 。<br/><br/>3) 因此总结： <br/>目前在HTTPServer这块基本可以看到有三种stack比较流行： <br/><br/>>Apache+mod_php5<br/>>lighttp+spawn-fcgi<br/>>nginx+PHP-FPM<br/><br/>三者后两者性能可能稍优，但是Apache由于有丰富的模块和功能，目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍，现在nginx+PHP-FPM使用的人越来越多。<br/><br/>下面着重介绍stack：<br/>Apache+mod_php5和nginx+PHP-FPM的安装和配置。对于lighttpd+spawn-fcgi，由于我个人没有怎么用过，所以如下不准备介绍，感兴趣可以查阅资料。<br/><br/><br/>1.Apache+mod_php模式： <br/><br/>我们很久一段时间使用经典的Apache+mod_php： <br/><br/>Apache对PHP的支持是通过Apache的模块来支持的。如果曾源代码编译安装php的话，如果希望Apache支持PHP的话，在./configure步骤需要指定--with-apxs2=/usr/local/apache2/bin/apxs 表示告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析；<br/>而且在最后一步make install的时候我们会看到将动态链接库libphp5.so(Apache模块)拷贝到apache2的安装目录的modules目录下，并且还需要在httpd.conf配置文件中添加LoadModule语句来动态将libphp5.so 模块加载进来，从而实现Apache对php的支持。<br/><br/>1)由于该模式实在太经典了，因此这里关于安装部分不准备详述了，相对来说比较简单。<br/><br/>2)这里之所以仍旧列出来Apache+mod_php5来讨论，是因为：<br/>看过上一篇文章的话，我们知道nginx一般包括两个用途HTTPServer和Reverse Proxy Server(反向代理服务器)。<br/><br/>我们介绍了如何在前端部署nginx作为reverse proxy server，后端布置多个Apache来实现机群系统server cluster架构的。<br/>因此，实际生产中，我们仍旧能够保留Apache+mod_php5的经典App Server，而仅仅使用nginx来当做前端的reverse proxy server来实现代理和负载均衡。 因此，建议nginx(1个或者多个)+多个apache的架构继续使用下去。<br/><br/>2. nginx+PHP-FPM: <br/><br/>1)通过上面的分析，尽管我们可以仍旧保留Apache+mod_php来处理PHP，所有的静态文件和负载均衡由顶在前端的nginx来完成，但是由于nginx和PHP-FPM各自的优越性，使得nginx+PHP-FPM的组合的性能已经很超越Apache+mod_php。 <br/>因此很多人渐渐放弃了Apache+mod_php的组合了，而完全使用nginx+PHP-FPM来实现对PHP的处理。<br/>因此现在出现了新的名词叫做LEMP(Linux+EngineX(nginx)+MySQL+PHP)，慢慢要代替经典很多年的LAMP。<br/><br/>2)甚至出现一种新的server cluster： <br/>其中看不到Apache的影子了，全部由nginx来搞定。nginx轻量型，高性能，高灵活性使得它完全能够应付过来。<br/>由于PHP-FPM是C/S结构，因此我们前端保留nginx来做负载均衡；对于之前后端的各个Apache服务器，我们不需要安装Apache了，对PHP重新编译安装使其以PHP-FPM方式支持FastCGI；<br/>然后在nginx中配置将客户端的php请求分别pass到后台的多个运行的PHP-FPM，后者进行处理然后返回给nginx，然后显示给用户。整个过程可以完全不要Apache。<br/><br/>3) 下面我们具体来介绍如何来安装和简单配置 <br/>nginx+PHP+PHP-FPM+MySQL.<br/><br/>3. 安装和配置nginx+PHP+PHP-FPM+MySQL: <br/><br/>1) 安装MySQL： <br/><br/>这里之所以首先要安装MySQL，是因为之后编译安装PHP的时候，可以直接指定对MySQL的支持。<br/>我们知道PHP对MySQL的支持是通过PHP扩展实现的。<br/>可以源代码安装，不过我使用的Ubuntu，直接使用了其发布的二进制包安装了：<br/><br/>$sudo apt-get install mysql-server<br/><br/>安装的时候需要提示设置root密码；<br/>之后使用<br/>$netstat -tap &#124;grep mysql<br/>看看是否正常运行；<br/><br/>2) 安装PHP和PHP-FPM： <br/>我们之前介绍了PHP-FPM是对PHP的补丁，因此需要和PHP一起编译安装。我这里使用的PHP 5.2.10 。<br/>a. 下载安装包： <br/>从php.net 下载：php-5.2.10.tar.gz<br/>从PHP-FPM官网下载：php-5.2.10-fpm-0.5.13.diff.gz<br/>注意两个版本尽量相同(不相同可能出错，我自己没试过)。<br/><br/>b. 解压缩打补丁 <br/>$tar xzvf php-5.2.10.tar.gz<br/>$gzip -cd php-5.2.10-fpm-0.5.13.diff.gz &#124; patch -d php-5.2.10 -p1<br/>倘若中间需要哪个命令shell不认识，可以使用apt-get安装，或者google找答案。<br/><br/>c. 配置编译环境： <br/>在安装之前可能需要安装几个依赖包：<br/>sudo apt-get install libxml2-dev<br/>sudo apt-get install libmysqlclient15-dev<br/>不安装也可以，之后./configure失败的话，根据出错信息，再慢慢搜索安装依赖包也可以，重要的是记下关键步骤，因为每个人的系统装没装啥都不一定。<br/><br/>$cd php-5.2.10<br/>$./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpm --with-mysql --with-mysqli --with-openssl<br/><br/>这里我们配置php安装到/usr/local/php，如果不配置默认安装到/usr/local下，这样我觉得不太好，这样make install各个文件就会被拷贝得分散开来(分散在local的各个目录下)，如果我们之后想卸载干净而且无法使用make uninstall的话，还不方便。安装到/usr/local/php下，如果我们想删除php，直接删除该目录即可。<br/><br/>--enable-fastcgi和--enable-fpm分别设置支持fastcgi和PHP-FPM的选项；<br/>--with-mysql和--with-mysqli相当于编译php的MySQL扩展到php内核中，这样我们可以在php中使用mysql和mysqli库的函数访问mysql；<br/><br/>注意：这里需要注意的一个问题是，不要设置--with-apxs2=/usr/local/apache2/bin/apxs，我们知道它是告诉PHP编译成模块方式让Apache来支持。如果设置了该选项的话，编译安装之后，Apache会无法启动，报错信息： <br/>/usr/lib/apache2/modules/libphp5.so: undefined symbol: -fpm-event-base-free<br/><br/>因此这里也就意味着，我们编译PHP以PHP-FPM的方式来支持FastCGI的话，基本上就不能和Apache一起使用了，也就是说我们决定使用nginx+PHP+PHP-FPM的话，这里的PHP就没法和Apache一起使用了。<br/><br/>如果非还想要使用，那可以另外编译安装一个PHP，编译的时候在./configure的时候设置--with-apxs2=/usr/local/apache2/bin/apxs，而且不要打PHP-FPM的补丁。<br/><br/>另外，如果该步骤出现错误，通常是缺乏依赖包，请按照错误信息安装依赖包即可。<br/><br/>d. 编译： <br/>$make all <br/>注意这里尽量使用make all，而不要仅仅是make<br/><br/>e. 安装： <br/>$make install<br/><br/>f. 拷贝php.ini文件： <br/>$sudo cp php.ini-dist /usr/local/php/lib/php.ini<br/>将php.ini文件拷贝到如上位置；<br/><br/>如果安装都成功的话，我们的以PHP-FPM方式支持FastCGI的PHP就被安装到了/usr/local/php目录下了。 <br/><br/><br/>3) 配置PHP和PHP-FPM： <br/><br/>首先可用到/usr/local/php/bin目录下执行一下php -v，看PHP是否work。<br/><br/>a. 配置php.ini： <br/>位于/usr/local/php/lib下<br/>这里一般没有严格需要配置什么，可以按照自己要求进行配置。<br/><br/>b. 配置PHP-FPM这个PHP解析器： <br/>我们上面说过PHP-FPM解析器是C/S结构，它的配置文件位于/usr/local/php/etc/php-fpm.conf。<br/>$cd /usr/local/php/etc<br/>$sudo vi php-fpm.conf<br/>该文件是一个xml文件，只需要修改：<br/>&nbsp;&nbsp;&nbsp;&nbsp;Unix user of processes<br/>&nbsp;&nbsp;&nbsp;&nbsp;<value name="user">www-data</value><br/>&nbsp;&nbsp;&nbsp;&nbsp;Unix group of processes<br/>&nbsp;&nbsp;&nbsp;&nbsp;<value name="group">www-data</value><br/>注意去掉两边的注释<!--和-->，否则之后php-fpm启动不了；<br/><br/>c. 配置完之后，就可以启动PHP-FPM： <br/>$/usr/local/php/sbin/php-fpm start<br/><br/>我们上面介绍了FastCGI模式区别于CGI模式，它需要一个daemon进程一直运行在后台对php请求做出解析，这里的PHP-FPM就是这个 daemon进程，在配置文件php-fpm.conf中可以设置它侦听的IP和端口，默认为127.0.0.1:9000。也就是它侦听9000端口的数据请求，然后会将其进行解析然后返回给请求端。<br/><br/>这个和我们之前介绍的FastCGI的思想相吻合。HTTPServer服务器和FastCGI模式的PHP解析器相分离(这里就是PHP- FPM)，HTTPServer遇到PHP请求的时候，就会传递给PHP-FPM，后者解析并返回。实现HTTPServer和PHP解析器完全分离，缓解了Server的负担，Server有更多资源来处理并发请求。其实这也是nginx优于apache的一个原因。<br/><br/>d. 检查php-fpm是否运行正常： <br/>$ps ax&#124;grep fpm<br/><br/>4)安装和配置nginx： <br/><br/>之前文章我们介绍了nginx的安装和使用nginx作为reverser server的进行负载均衡配置了，感兴趣的可以参看。<br/><br/>a. nginx的安装很简单： <br/>从官网下载安装包：nginx-0.7.61.tar.gz<br/><br/>$tar xzvf nginx-0.7.61.tar.gz<br/>$cd nginx-0.7.61<br/>$./configure <br/>默认安装路径为/usr/local/nginx，如果不放心自己可以使用--prefix=/usr/local/nginx配置一下<br/>$make<br/>$sudo make install<br/><br/>b. 思想： <br/><br/>我们之前的文章介绍了nginx的使用非常灵活，有人比喻其为server领域的瑞士军刀，其实确实是：性能好，而且使用方法多。<br/>各种使用方法都是通过配置文件来实现，因此掌握nginx的使用，除了掌握各种架构的思想之外，还要掌握如何对nginx.conf进行相应的配置。 <br/><br/>我们这里着重对nginx.conf配置，实现通过php-fpm的fastcgi对php的处理。其实nginx本身并不会对PHP进行解析，这个要区别于Apache (Apache通过内置模块实现了对PHP的解析)，nginx其实是将对php页面的请求交给了后台在127.0.0.1:9000 侦听的php-fpm，后者具有解析php的功能。<br/><br/>因此如果把php-fpm看做一个app server的话，其实nginx这里的作用还是一个反向代理服务器。和我们之前介绍的使用location配置将php请求proxypass给后台侦听的Apache服务器，在思想上几乎一样。 <br/><br/><br/>c. 配置位于/usr/local/nginx/conf目录下的nginx.conf和fastcgi.params <br/><br/>>nginx.conf配置： <br/>$cd /usr/local/nginx/conf<br/>$sudo vi nginx.conf<br/>从上往下对默认的配置文件进行修改：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;1. user&nbsp;&nbsp;www-data; 这里需要和php-fpm中定义的用户一致；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;2. worker_processes 2; 可以设置更多，这个选项和之后的worker_connections&nbsp;&nbsp;1024;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一起来定义每个进程并发相应的最大连接数，因此这里可以达到2*1024的并发请求；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;3. 在server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8080;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果自己已经安装了Apache并且占用了80端口，这里修改为别的8080，负责启动不了；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;4. 如上面所述，我们其实设置nginx将PHP请求转发给后台的php-fpm server即可，后者有解析php功能。<br/>&nbsp;&nbsp;&nbsp;&nbsp;其实还是充当反向代理的作用；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ~ &#92;.php$ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_index&nbsp;&nbsp;index.php;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp;SCRIPT_FILENAME&nbsp;&nbsp;html/$fastcgi_script_name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;注意fastcgi_param&nbsp;&nbsp;SCRIPT_FILENAME&nbsp;&nbsp;html/$fastcgi_script_name;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;之后需要设置为放置php脚本的位置 ，这里我们举例在/usr/local/nginx/html目录下创建一个phpinfo.php文件 <br/>&nbsp;&nbsp;&nbsp;&nbsp;包含代码<?php phpinfo(); ?><br/><br/>$sudo vi fastcgi.params<br/><br/>配置fastcgi参数文件，具体可以参考<a href="http://wiki.nginx.org/NginxFcgiExample" target="_blank">http://wiki.nginx.org/NginxFcgiExample</a> <br/>基本上可以使用默认的该文件，不需要修改。<br/><br/>5) 运行nginx:<br/><br/>$sudo /usr/local/nginx/sbin/nginx<br/><br/>然后在浏览器中查看<a href="http://localhost" target="_blank">http://localhost</a> <br/><br/>> 默认会显示/usr/local/nginx/html目录下的index.html页面: Welcome to Nginx!<br/><br/>>然后查看<a href="http://localhost/phpinfo.php" target="_blank">http://localhost/phpinfo.php</a> ，相当于访问html目录下的phpinfo.php页面，<br/><br/>如果正常，会显示phpinfo的页面。其中可以看到Server API一项包含：CGI/FastCGI，表示FastCGI方式运行。<br/><br/>如果以上步骤出现错误，通常都是因为nginx.conf配置不正确，可以google寻找解决方法，一般都可以找得到(英文)。然后重新修改nginx.conf文件。<br/><br/>之后需要重启nginx,可以执行：<br/><br/>$sudo kill `cat /usr/local/nginx/logs/nginx.pid` 表示关闭nginx<br/>$sudo /usr/local/nginx/sbin/nginx 再次启动nginx<br/><br/>6)设置开机自启动： <br/><br/>在Ubuntu下，如果希望添加到/etc/init.d实现开机重启的话，可以Google寻找nginx和php-fpm的init script(php-fpm本身就是init script不需要寻找了)，然后拷贝到/etc/init.d目录下。<br/><br/>简单的方法，设置rc.local:<br/><br/>$sudo vi /etc/rc.local<br/><br/>在exit 0之前添加：<br/>/usr/local/php/sbin/php-fpm start<br/>/usr/local/nginx/sbin/nginx<br/><br/>这样开机自动启动nginx和php-fpm。<br/><br/>7) 使用nginx和php-fpm实现server&nbsp;&nbsp;cluster: <br/><br/>和nginx对多台app server代理实现负载均衡类似，我们可以实现nginx对多台php-fpm实现负载均衡：<br/><br/>T o configure Nginx to load balance multiple FastCgi servers use this type of configuration:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;upstream fastcgiServers &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server 127.0.0.1:9000 ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server 127.0.0.1:9001 ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server 198.192.0.1:9000 ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server 198.192.0.2:9000 ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server 198.192.0.3:9000 ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~ &#92;.php$ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass fastcgiServers;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_index stream.app;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param SCRIPT_FILENAME /var/www/htdocs$fastcgi_script_name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;include /etc/nginx/fastcgi.conf;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>4. 总结： <br/><br/>三种常用模式： <br/>Apache+mod_php5; <br/>lightppd+spawn-fcgi; <br/>nginx+PHP-FPM <br/><br/>我们可以使用到生产环境中的： <br/><br/>0) 如果不是server cluster的话：<br/>可以使用以上任一种，不过有各种测试表明nginx+PHP-FPM性能优越，但是Apache+mod_php5很经典模块多，比如对.htaccess等的支持。 <br/><br/>如果构建server cluster的话：<br/>1) nginx作为反向代理服务器，后台多台Apache+mod_php5。 <br/>nginx处理静态文件，及对php并发请求对后台多台app server的负载均衡；<br/><br/>2) nginx作为反向代理器，后台多台PHP-FPM <br/>nginx处理静态文件及将php并发请求发送到后台php-fpm来解析；<br/><br/><br/>另外：关于如何更好使用nginx这个轻量级高性能的瑞士军刀，主要是如何配置nginx.conf，更多参看：<br/><a href="http://wiki.nginx.org/Main" target="_blank">http://wiki.nginx.org/Main</a> <br/>另外，关于PHP支持的各种缓存等这里没有安装，感兴趣可以另行安装。<br/><br/><br/>更多参考资料：<br/><a href="http://www.php.net/manual/en/install.unix.apache2.php" target="_blank">http://www.php.net/manual/en/install.unix.apache2.php</a> <br/><a href="http://www.softwareprojects.com/resources/programming/t-installing-nginx-web-server-w-php-and-ssl-1474.html" target="_blank">http://www.softwareprojects.com/resources/programming/t-installing-nginx-web-server-w-php-and-ssl-1474.html</a> <br/><a href="http://php-fpm.org/Main_Page" target="_blank">http://php-fpm.org/Main_Page</a> <br/><a href="http://www.softwareprojects.com/resources/programming/t-how-to-install-php-fpm-spawn-fcgi-replacement-1602.html" target="_blank">http://www.softwareprojects.com/resources/programming/t-how-to-install-php-fpm-spawn-fcgi-replacement-1602.html</a> <br/><a href="http://wiki.nginx.org/NginxFcgiExample" target="_blank">http://wiki.nginx.org/NginxFcgiExample</a> <br/>有可能以后会将PHP-FPM直接添加到PHP内核中一起进行发布<br/>Will there be a PHP-FPM is included in the official PHP?<br/><a href="http://php-fpm.org/FAQ#Will_there_be_a_PHP-FPM_is_included_in_the_official_PHP.3F" target="_blank">http://php-fpm.org/FAQ#Will_there_be_a_PHP-FPM_is_included_in_the_official_PHP.3F</a> <br/><br/><a href="http://bookmarks.honewatson.com/2008/04/24/multiple-fastcgi-php-servers-nginx-load-balancing/" target="_blank">http://bookmarks.honewatson.com/2008/04/24/multiple-fastcgi-php-servers-nginx-load-balancing/</a> <br/><a href="http://www.wikivs.com/wiki/Lighttpd_vs_nginx" target="_blank">http://www.wikivs.com/wiki/Lighttpd_vs_nginx</a> <br/><a href="http://en.wikipedia.org/wiki/Reverse_proxy" target="_blank">http://en.wikipedia.org/wiki/Reverse_proxy</a> <br/><a href="http://sameerparwani.com/posts/nginx-as-a-front-end-to-apache/" target="_blank">http://sameerparwani.com/posts/nginx-as-a-front-end-to-apache/</a> <br/><a href="http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/" target="_blank">http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/</a> <br/><a href="http://www.yawn.it/2008/04/30/nginx-php-php-fpm-on-debian-etch-40/" target="_blank">http://www.yawn.it/2008/04/30/nginx-php-php-fpm-on-debian-etch-40/</a> <br/><a href="http://howtoforge.org/installing-nginx-with-php5-and-mysql-support-on-ubuntu-8.10" target="_blank">http://howtoforge.org/installing-nginx-with-php5-and-mysql-support-on-ubuntu-8.10</a><br/><br/>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/huliang82/archive/2010/05/05/5558693.aspx" target="_blank">http://blog.csdn.net/huliang82/archive/2010/05/05/5558693.aspx</a><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=apache" rel="tag">apache</a> , <a href="http://jed.dzhope.com/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://jed.dzhope.com/tag.php?tag=ligttpd" rel="tag">ligttpd</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?678</link>
<title><![CDATA[如何防范一句话木马]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 07 Aug 2010 23:02:42 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?678</guid> 
<description>
<![CDATA[ 
	先说说什么是一句话木马，其实大家可以先在搜索引擎里边搜索下，了解下。<br/><br/>常见一句话木马服务端：<br/>服务端只需要简单的一行代码，即可用此程序实现常用的管理功能。<br/>　　目前支持的服务端脚本：PHP, ASP, ASP.NET。<br/>　　在服务端运行的代码如下：<br/>　　PHP:&nbsp;&nbsp;&nbsp;&nbsp;<?php @eval($_POST['hk715']);?><br/>　　ASP:&nbsp;&nbsp;&nbsp;&nbsp;<%eval request("pass")%><br/>　　ASP.NET:&nbsp;&nbsp;&nbsp;&nbsp;<%@ Page Language="Jscript"%><%eval(Request.Item["hk715"],"unsafe");%><br/>　　 (注意: ASP.NET要单独一个文件或此文件也是Jscript语言)<br/><br/>客户端：有专门的程序，我经常使用的是中国菜刀。<br/><br/>既然是木马，就是可以用来入侵你的服务器，写shell等，但是他隐蔽性强，防范比较困难。<br/><br/>下面提几点防范措施：<br/>1、服务器要控制好用户权限、对于一个服务器有多个网站的，要控制好各网站权限，各网站应相互独立。IIS下用虚拟主机安全配置方法，linux下，apache容易控制，nginx的话，目前还没有较好控制方法。这个的目的就是防止跨站。另外对与指定网站，一定需控制好写权限。<br/>2、如果是IIS主机，可以安装网站净化器（今天听朋友的IDC说要安装一款软件 网站净化器<br/><br/>竟然发现里边的功能有拦截“一句话”木马的功能，不知道是不是这样的。<br/><br/>好像这个软件还是免费的，抽个时间测试下这个一句话木马的拦截功能。<br/><br/>网站净化器(webwiper)<br/><br/><a href="http://wiper.bjrun.com/" target="_blank">http://wiper.bjrun.com/</a><br/>）<br/>3、对应于PHP下的一些应用，DZ，pw 或者一些cms.建议对与config.php一类的配置数据库文件，进行zend加密，以防止MYSQL的账户泄漏。另外，对于MYSQL，一定要做到，各数据库用户分立，权限做到最小化。<br/>4、php下限制一下危险函数，这个在本博客里也有说明。<br/>5、WIN下用麦咖啡做一些安全上的设置。linux下做好系统的安全，登陆安全控制等。<br/><br/>以上只是一些防范措施，另外，需要管理人员，定期检查服务器，看是否有异常文件或异常情况。。<br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=%25E4%25B8%2580%25E5%258F%25A5%25E8%25AF%259D%25E6%259C%25A8%25E9%25A9%25AC" rel="tag">一句话木马</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E6%259C%25A8%25E9%25A9%25AC" rel="tag">木马</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8%25E5%25AE%2589%25E5%2585%25A8" rel="tag">服务器安全</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?677</link>
<title><![CDATA[nginx配置支持cgi]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 31 Jul 2010 08:14:15 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?677</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp; "Because Nginx cannot directly execute external programs (CGI), a malicious person can't trick your system into uploading and executing an arbitrary script." <br/><br/>&nbsp;&nbsp;nginx-fcgi is a perl script to provide simple cgi support for nginx http daemon, it's still in development by Daniel Dominik Rudnicki. <br/><br/>&nbsp;&nbsp;nginx-fcgi for now is only a simple perl script.&nbsp;&nbsp; Based at NginxSimpleCGI - Nginx Wiki.<br/><br/><br/>TODO: <br/>daemon should fork itself into backgroud <br/>/etc/sysconfig/nginx-fcgi config file <br/>separate /var/log/nginx/nginx-cfgi.log log file with logratate support <br/>/etc/rc.d/init.d/nginx-fcgi init script (run daemon with proper userid / groupid from config file) <br/>many instances working parallel as separate processes with different userid / groupid (same log file) <br/>fix binding to TCP/IP socket <br/>add more options then 'verbose' <br/><br/><br/><br/>&nbsp;&nbsp; The current version is nginx-fcgi-0.4.3, md5sum (40a5f7a2c2e7c44463f5e9b66502c537)&nbsp;&nbsp; suggested name /usr/sbin/nginx-fcgi <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; The sources are licensed under a BSD-like license. <br/><br/>&nbsp;&nbsp; Requires: <br/><br/>&nbsp;&nbsp; perl-FCGI <br/>&nbsp;&nbsp; perl-Getopt <br/>&nbsp;&nbsp; perl-IO <br/>&nbsp;&nbsp; perl-Socket <br/><br/><br/>example usage /usr/sbin/nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock<br/>maybe you will also need to change permissions to socket chmod 777 /var/run/nginx-fcgi.sock<br/>or just owner chown nginx:nginx /var/run/nginx-fcgi.sock <br/><br/><br/><br/><br/><br/><br/>sample of configuration (nginx.conf, server section)<br/><br/><br/>location ~ ^/cgi-bin/.*&#92;.cgi$<br/> &#123;<br/>&nbsp;&nbsp; fastcgi_pass&nbsp;&nbsp;&nbsp;&nbsp;unix:/var/run/nginx-fcgi.sock;<br/>&nbsp;&nbsp; fastcgi_read_timeout&nbsp;&nbsp;&nbsp;&nbsp;5m;<br/>&nbsp;&nbsp; fastcgi_index&nbsp;&nbsp;&nbsp;&nbsp;index.cgi;<br/>&nbsp;&nbsp; #<br/>&nbsp;&nbsp; #&nbsp;&nbsp;You may copy and paste the lines under or use include directive<br/>&nbsp;&nbsp; #&nbsp;&nbsp;include&nbsp;&nbsp;/etc/nginx/nginx-fcgi.conf;<br/>&nbsp;&nbsp; #&nbsp;&nbsp;In this example all is in one file <br/>&nbsp;&nbsp; #<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SCRIPT_FILENAME&nbsp;&nbsp;$document_root$fastcgi_script_name;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;QUERY_STRING&nbsp;&nbsp;$query_string;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;REQUEST_METHOD&nbsp;&nbsp;$request_method;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;CONTENT_TYPE&nbsp;&nbsp;$content_type;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;CONTENT_LENGTH&nbsp;&nbsp;$content_length;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;GATEWAY_INTERFACE&nbsp;&nbsp;CGI/1.1;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SERVER_SOFTWARE&nbsp;&nbsp;nginx;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SCRIPT_NAME&nbsp;&nbsp;$fastcgi_script_name;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;REQUEST_URI&nbsp;&nbsp;$request_uri;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;DOCUMENT_URI&nbsp;&nbsp;$document_uri;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;DOCUMENT_ROOT&nbsp;&nbsp;$document_root;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SERVER_PROTOCOL&nbsp;&nbsp;$server_protocol;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;REMOTE_ADDR&nbsp;&nbsp;$remote_addr;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;REMOTE_PORT&nbsp;&nbsp;$remote_port;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SERVER_ADDR&nbsp;&nbsp;$server_addr;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SERVER_PORT&nbsp;&nbsp;$server_port;<br/>&nbsp;&nbsp; fastcgi_param&nbsp;&nbsp;&nbsp;&nbsp;SERVER_NAME&nbsp;&nbsp;$server_name;<br/> &#125;<br/><br/><br/><br/><br/><br/><br/>sample index.cgi (PERL code)<br/><br/>&nbsp;&nbsp; #!/usr/bin/perl -wT<br/>&nbsp;&nbsp; print "Content-type: text/html&#92;n&#92;n";<br/>&nbsp;&nbsp; print "<html><head><title>Hello World</title></head>&#92;n";<br/>&nbsp;&nbsp; print "<body>&#92;n";<br/>&nbsp;&nbsp; print "<h2>Hello, world!</h2>&#92;n";<br/>&nbsp;&nbsp; print "</body></html>&#92;n";<br/><br/><br/><br/><br/><br/>sample nginx.logrotate<br/><br/>/var/log/nginx/*.log &#123;<br/>&nbsp;&nbsp; olddir&nbsp;&nbsp;/var/log/archive/nginx<br/>&nbsp;&nbsp; create&nbsp;&nbsp;644&nbsp;&nbsp;nginx&nbsp;&nbsp;nginx<br/>&nbsp;&nbsp; sharedscripts<br/>&nbsp;&nbsp; postrotate<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/sbin/service&nbsp;&nbsp;nginx&nbsp;&nbsp;graceful > /dev/null<br/>&nbsp;&nbsp; endscript<br/>&#125;<br/><br/><br/><br/><br/><br/>sample nginx-fcgi.sysconfig&nbsp;&nbsp; suggested name /etc/sysconfig/nginx-fcgi <br/><br/>&nbsp;&nbsp; # User and Group to use for spawned FCGI app.<br/>&nbsp;&nbsp; SPAWN_UID="nginx"<br/>&nbsp;&nbsp; SPAWN_GID="nginx"<br/>&nbsp;&nbsp; # Bind to unix-domain socket, running as above<br/>&nbsp;&nbsp; SPAWN_SOCKET="/var/run/nginx-fcgi.sock"<br/>&nbsp;&nbsp; # Bind to tcp port 1026 on localhost.<br/>&nbsp;&nbsp; # Address myst be IPv4 not name.<br/>&nbsp;&nbsp; #SPAWN_PORT="1026"<br/>&nbsp;&nbsp; #SPAWN_ADDR="127.0.0.1"<br/>&nbsp;&nbsp; # log file<br/>&nbsp;&nbsp; SPAWN_LOG="/var/log/nginx/nginx-fcgi.log"<br/>&nbsp;&nbsp; # pid file<br/>&nbsp;&nbsp; SPAWN_PID="/var/run/nginx-fcgi.pid"<br/>&nbsp;&nbsp; # extra options<br/>&nbsp;&nbsp; SPAWN_OPT=""<br/>&nbsp;&nbsp; #SPAWN_OPT="verbose"<br/><br/><br/><br/><br/><br/><br/>sample nginx-fcgi.init&nbsp;&nbsp; suggested name /etc/rc.d/init.d/nginx-fcgi (PLD Linux style)<br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://jed.dzhope.com/tag.php?tag=cgi" rel="tag">cgi</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?673</link>
<title><![CDATA[Windows 2003自带分区增容功能]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 15 Jul 2010 02:12:58 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?673</guid> 
<description>
<![CDATA[ 
	　分区增容就是当一个分区的空间不能满足使用需求时，为其额外加大空间的方法。很多朋友遇到这种情况时，一般都使用PartitionMagic完成的。但实际上，使用Windows XP/Server 2003的用户完全可以使用系统内置的磁盘管理功能来完成分区的空间“增容”。下面我们以实例的方式来探讨一下。<br/>　一、划出自由空间<br/><br/>　　假设现在需要对D盘增容50MB的空间，这个空间需要从E盘上提取。那么首先要就从E盘上划分出这50MB的空间才行。这个操作的过程如下:<br/><br/>　　首先将E盘所有数据转移到其它分区，然后单击“开始→运行”，输入“Diskmgmt.msc”后回车，打开“磁盘管理”窗口。选中E盘并点击右键，在弹出的快捷菜单中选择“删除此逻辑驱动器”项。在弹出的提示框中点击“是”按钮继续。操作完毕后，将会在“磁盘0”列中出现与删除分区相同大小的可用空间。<br/><br/>　　二、给分区增容<br/><br/>　　此时请注意D盘当前空间为855MB，现在我们来进行为其增加50MB的操作。单击“开始→程序→附件→命令提示符”，在打开的窗口中依次输入“Diskpart”、“List volume”、“Select volume 2”、“Extend Size=50”四条命令。<br/><br/>　　其中，“Diskpart”命令用来调用DOS磁盘管理程序，“Diskpart/?”命令可以看到该命令的DOS下中文帮助信息。“List Volume”用于显示系统上所有磁盘的详细信息，从而得知所需扩充分区的卷号。<br/><br/>　　这里可以看出D盘的卷号为“2”;“Select Volume 2”命令用于选择卷，这里根据上一步得出的提示选择卷2;“Extend Size=50”用于将D盘空间增容，这个增容的来源空间当然是划分出的自由空间了。从命令执行的结果“DiskPart成功地扩展了卷”来看，我们对D盘的空间增容已经成功了，如图所示。<br/><br/>　　最后在“磁盘管理窗口”中选择剩余的可用空间，依次点击“操作→所有任务→新建逻辑驱动器”命令，根据提示为该空间分配驱动器号和进行格式化操作即可。 <br/> <br/><br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=%25E5%2590%2588%25E5%25B9%25B6%25E5%2588%2586%25E5%258C%25BA" rel="tag">合并分区</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E5%2588%2586%25E5%258C%25BA%25E5%25A2%259E%25E5%25AE%25B9" rel="tag">分区增容</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?665</link>
<title><![CDATA[mysql “log-bin”引起的linux空间不足]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 24 Jun 2010 02:30:41 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?665</guid> 
<description>
<![CDATA[ 
	这两天在做数据的汇总与统计，统计去年12月份到现在的数据，数据全部以小时暂存到了文件里面，每个文件都有几百兆，算起来每个文件有接近十万条记录，程序做了两天周一回来发现只做了十几个文件，这些速度太慢了。然后想到，把表升级到内存表来做汇总。汇总完以后分类存到硬盘。这样看起来速度快了，很多…<br/><br/><div class="code"><br/>但是今天早上起来本来想着肯定是要处理了几十个，结果来了一看，杯具了：数据库提示提示硬盘满了！<br/>LOG:<br/>Insert flow error: Disk is full writing ‘./mysql-bin.000127′ (Errcode: 28). Waiting for someone to free space… (Expect up to 60 secs delay for server to continue after freeing disk space)<br/><br/><br/></div><br/><br/>discuz论坛js无法更新，附件无法上传。<br/><br/>有220G的硬盘怎么就满了呢？是数据文件太多了？<br/>查看了下，发现home 占用了接近80G 空间。<br/><br/><div class="code"><br/>&#91;root@localhost ~&#93;# du -h –max-depth=1 /home<br/>78G&nbsp;&nbsp;&nbsp;&nbsp; /home<br/><br/><br/></div><br/><br/> 那么文件会是跑到哪里去了呢?<br/>&nbsp;&nbsp; 一个邪恶的念头突然蹦出来了：不是服务器被攻击了吧？黑客用我们做了文件服务器？那样可就惨了…<br/><br/><span style="color: #DC143C;">&nbsp;&nbsp; 一个一个查，最后定位到了/var/lib/mysql/下，哦！突然想起来了，是不是数据库太大了，文件太多了？数据库记录是比较多，但是也不至于有120G吧？百度一下，网上说了，mysql数据库记录输入删<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 掉以后，MySQL没有自动释放硬盘空间，而是自己管理已经向操作系统申请的空间，可以通过optimize table语法或alter table TableName engine=****来实现空间的释放。<br/><br/>当表的记录被删除时，数据文件并不会即时释放，但当有新记录写入时，数据文件也不一定会增加，只有当新写入的数据量超过了删除的数<br/>据量时，数据文件的大小才会增加。原来mysql会自行利用逻辑上被释放的空间! 申请之后不再主动释放,自行内部管理,除非进行optimize table！</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;我们的MySQl版本是 Server version: 5.1.34-community-log MySQL Community Server，运用optimize table 出现错误：<br/><div class="code"><br/>Table does not support optimize, doing recreate + analyze instead<br/></div><br/><br/>看到MySQL管网对optimize语法有详细的说明：<br/><br/><div class="code">You can makeOPTIMIZE TABLE work on other storage engines by starting mysqld with the –skip-new or –safe-mode option. In this case, OPTIMIZE TABLE is just mapped to ALTER TABLE.</div><br/><br/>上面是说要求我们在启动的时候指定–skip-new或者–safe-mode选项来支持optimize功能。<br/> 马上添加 添加选项启动，问题解决。<br/>硬盘有所减少，但是还有大量空间未释放。怎么回事呢？注意到/var/lib/mysql/有很多“mysql-bin.000XXX的文件，才发现是文件mysql 日志惹的祸。因为程序已经实现备份，所以就把log删掉<br/><br/><div class="code"><br/>mysql&gt;reset master; (清除日志文件)<br/><br/><br/></div><br/><br/>屏蔽 log-bin<br/><br/>在/etc/my.cnf 下修改<br/><br/><div class="code"><br/>log-bin=mysql-bin<br/></div><br/><br/>为注释状态，重启Mysql！<br/>问题解决！释放了120G的空间…<br/><br/>参考信息<br/><br/><div class="code"><br/>有时候发现mysql-bin.000001、mysql- bin.000002等文件占用了空间，那么这些文件是干吗的？这是数据库的操作日志，例如UPDATE一个表，或者DELETE一些数据，即使该语句没 有匹配的数据，这个命令也会存储到日志文件中，还包括每个语句执行的时间，也会记录进去的。<br/><br/>这样做主要有以下两个目的：<br/>1：数据 恢复<br/>如果你的数据库出问题了，而你之前有过备份，那么可以看日志文件，找出是哪个命令导致你的数据库出问题了，想办法挽回损失。<br/>2：主从 服务器之间同步数据<br/>主服务器上所有的操作都在记录日志中，从服务器可以根据该日志来进行，以确保两个同步。<br/><br/>处理方法分两种情况：<br/>1： 只有一个mysql服务器，那么可以简单的注释掉这个选项就行了。<br/>vi /etc/my.cnf把里面的log-bin这一行注释掉，重启mysql服务即可。<br/>2：如果你的环境是主从服务器，那么就需要做以下操作了。<br/>A： 在每个从属服务器上，使用SHOW SLAVE STATUS来检查它正在读取哪个日志。<br/>B：使用SHOW MASTER LOGS获得主服务器上的一系列日志。<br/>C：在所有的从属服务器中判定最早的日志，这个是目标日志，如果所有的从属服务器是更新的，就是清单上的最 后一个日志。<br/>D：清理所有的日志，但是不包括目标日志，因为从服务器还要跟它同步。<br/>清理日志方法为：<br/>PURGE MASTER LOGS TO ‘mysql-bin.010′;<br/>PURGE MASTER LOGS BEFORE ‘2008-12-19 21:00:00′;<br/><br/>如果你确定从服务器已经同步过了，跟主服务器一样了，那么可以直接RESET MASTER将这些文件删除。<br/><br/><br/></div><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E7%25A9%25BA%25E9%2597%25B4%25E4%25B8%258D%25E8%25B6%25B3" rel="tag">空间不足</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?664</link>
<title><![CDATA[解决Linux磁盘空间快满的简单方法]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 24 Jun 2010 02:21:52 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?664</guid> 
<description>
<![CDATA[ 
	www.216so.com用的linux的vps，偶然发现空间满了，特找来解决办法，整理一下发出来。<br/><br/>最简单解决Linux磁盘空间满的办法由于当初安装系统时设计不合理，有些分区分的过小，以及网络通讯故障等造成日志文件迅速增长等其他原因都可能表现为磁盘空间满，造成无法读写磁盘，应用程序无法执行等。下面就给你支几招(以/home空间满为例)： <br/><br/>　　1． 定期对重要文件系统扫描，并作对比，分析那些文件经常读写<br/><br/>　　#ls –lR /home >;files.txt<br/><br/>　　#diff filesold.txt files.txt<br/><br/>　　通过分析预测空间的增长情况，同时可以考虑对不经常读写文件进行压缩，以减少占用空间。<br/><br/>　　2． 查看空间满的文件系统的inodes消耗<br/><br/>　　#df –&nbsp;&nbsp; i&nbsp;&nbsp; /home<br/><br/>　　如果还有大量inode可用，说明大文件占用空间，否则是可能大量小文件占用空间。<br/><br/>　　3． 找出占用空间较大的目录<br/><br/>　　查看/home 占用的空间<br/><br/>　　#du –hs /home<br/><br/>　　查看/home 下占用空间超过1000m<br/><br/>　　#du &#124;awk '&#123;GetProperty(Content)&#125;>;2000'<br/><br/>　　4． 找出占用空间较大的文件<br/><br/>　　#find /home –size +2000k<br/><br/>　　5． 找出最近修改或创建的文件<br/><br/>　　先touch一个你想要的时间的文件如下：<br/><br/>　　# touch -t 08190800 test<br/><br/>　　#find /home -newer test -print<br/><br/>　　6． 删除系统日志等<br/><br/>　　删除生成 core,mbox等文件<br/><br/>　　#find / -name core&#124;xargs rm –rf<br/><br/>　　删除日志<br/><br/>　　#rm -rf /var/log/*<br/><br/>　　7． 对分区做链接<br/><br/>　　在有空间的分区，对没有空间分区做链接<br/><br/>　　#ln&nbsp;&nbsp; -s /home /usr/home<br/><br/>　　8．找出耗费大量的空间的进程<br/><br/>　　根据不同的应用，找出对应的进程。分析原因。<br/><br/>　　9.。检查并修复文件系统<br/><br/>　　#fsck –y /home<br/><br/>　　10．重起机器<br/><br/>　　有了以上的十招，应该可以解决大部分问题，但关键还是安装时要规划好分区。另外发现磁盘满时，不能急，小心操作，认真分析原因，然后小心应对。需要注意，以上十招不需要顺序执行，有的可能一招封喉，有的可能需要数招并用，删除操作一定要小心。如果还不行，只有采取增加硬盘，重新安装系统等“硬”办法了。<br/><br/>　　还可以：<br/><br/>　　cd &#92;<br/><br/>　　du -h --max-depth=1&#124;grep G&#124;sort -n<br/><br/>　　找到最大的那个目录后进入该目录<br/><br/>　　再运行du -h --max-depth=1&#124;grep G&#124;-n<br/><br/>　　如果没有结果可以运行 du -h --max-depth=1&#124;grep M&#124;sort -n<br/><br/>　　找出来以后看是否有用的文件<br/><br/>　　没用就删掉<br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E7%25A9%25BA%25E9%2597%25B4%25E4%25B8%258D%25E8%25B6%25B3" rel="tag">空间不足</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?662</link>
<title><![CDATA[如何删除windows服务]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sat, 19 Jun 2010 02:56:38 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?662</guid> 
<description>
<![CDATA[ 
	一、什么是Windows服务<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; Windows服务也称为Windows Service，它是Windows操作系统和Windows网络的基础，属于系统核心的一部分，它支持着整个Windows的各种操作。诸如DNS客户端、打印程序、Windows更新服务、计划任务、Windows时间服务、告警器等服务，它们关系到机器能否正确运行。如果不能适当地管理这些服务，就会影响到机器的正常操作。<br/>&nbsp;&nbsp;&nbsp;&nbsp;一个服务首先是一个Win32可执行程序，或者是是rundll32.exe来运行一个.dll的方式形成的进程。<br/>跟普通应用程序不一样，如打开WORD，有一个界面出来，但服务没有用户界面。也不能通过直接双击运行相应的.exe程序来运行。那Windows又是如何控制一个服务的？<br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows的服务由更上一级的services.exe这个服务来管理，由它来管理，负责进行服务的启动、停止、运行，暂停等。我们最常用的操作就是通过Windows的服务MMC界面来完成相关操作。<br/><br/>二、如何删除Windows服务<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;现在的流氓软件，越来越多把自己注册为一个服务。在Hijackthis的扫描日志中，一般会把非Windows系统的服务以023的方式列出来，如下面这段：<br/>&nbsp;&nbsp;&nbsp;&nbsp;O23 - 未知 - Service: BKMARKS [提供传输协议的数据安全保护机制，有效维护数据传输中的安全及完整。] - C:&#92;WINDOWS&#92;SYSTEM32&#92;RUNDLL.EXE<br/>&nbsp;&nbsp;&nbsp;&nbsp;O23 - 未知 - Service: ewido anti-spyware 4.0 guard [ewido anti-spyware 4.0 guard] - D:&#92;Program Files&#92;ewido anti-spyware 4.0&#92;guard.exe<br/>&nbsp;&nbsp; O23 - 未知 - Service: KSD2Service [KSD2Service] - C:&#92;WINDOWS&#92;system32&#92;SVCH0ST.exe<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对于这些流氓软件，需要删除相关的.exe文件，使它不能再运行，或者直接清除这个服务本身，使计算机重启的时候，它不会再启动。<br/><br/>删除的办法有两个：<br/><br/>办法一： 用sc.exe这个Windows命令<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开始——运行——cmd.exe，然后输入sc就可以看到了。使用办法很简单：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc delete "服务名"&nbsp;&nbsp;(如果服务名中间有空格，就需要前后加引号）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如针对上面的： sc delete KSD2Service <br/><br/>方法二：直接进行注册表编辑（不推荐）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开注册表编辑器，找到下面的键值：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;CurrentControlSet&#92;Services&nbsp;&nbsp;一般服务会以相同的名字在这里显示一个主健，直接删除相关的键值便可。<br/><br/>三、特殊情况<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 1、如果服务显示的是rundll32.exe，并且这个文件是位于system32目录下，那么就不能删除这个rundll32.exe文件，它是Windows系统的文件。这时只要清除相关的服务就可以了<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、如果一个服务删除了马上又自动建立了，说明后台有进程在监视、保护。需要先在进程管理器中杀掉相应的进程，或者启动后按F8，到安全模式下删除。<br/>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?661</link>
<title><![CDATA[Linux VPS下简单解决CC攻击]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Mon, 14 Jun 2010 00:55:25 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?661</guid> 
<description>
<![CDATA[ 
	一，准备工作<br/>1，登录进VPS控制面板，准备好随时重启VPS。<br/>2，关闭Web Server先，过高的负载会导致后面的操作很难进行，甚至直接无法登录SSH。<br/>3，以防万一，把设置的Web Server系统启动后自动运行去掉。<br/>（如果已经无法登录进系统，并且重启后负载过高导致刚刚开机就已经无法登录，可联系管理员在母机上封掉VPS的IP或80端口，在母机上用虚拟控制台登录 进系统，然后进行2&3的操作，之后解封）<br/><br/>二，找出攻击者IP<br/><br/>1，在网站根目录建立文件ip.php，写入下面的内容。<br/><br/><div class="code"><br/>&lt;?php<br/>$real_ip = getenv(&#039;HTTP_X_FORWARDED_FOR&#039;);<br/>if(isset($real_ip))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell_exec(&quot;echo $real_ip &gt;&gt; real_ip.txt&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell_exec(&quot;echo $_SERVER&#91;&#039;REMOTE_ADDR&#039;&#93; &gt;&gt; proxy.txt&quot;);<br/>&#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell_exec(&quot;echo $_SERVER&#91;&#039;REMOTE_ADDR&#039;&#93; &gt;&gt; ips.txt&quot;);<br/>&#125;<br/>echo &#039;服务器受到攻击，正在收集攻击源，请在5分钟后访问本站，5分钟内多次访问本站有可能会被当作攻击源封掉IP。谢谢合作！&#039;;<br/>?&gt;<br/><br/></div><br/><br/>2，设置伪静态，将网站下的所有访问都rewrite到ip.php。<br/>Nginx规则：<br/><div class="code"><br/>rewrite (.*) /ip.php;<br/><br/></div><br/><br/>Lighttpd规则：<br/><br/><div class="code"><br/>url.rewrite = (<br/>&quot;^/(.+)/?$&quot; =&gt; &quot;/ip.php&quot;<br/>)<br/><br/></div><br/><br/>3，启动Web Server开始收集IP<br/>进行完1和2的设置后，启动Web Server，开始记录IP信息。<br/>收集时间建议为3到5分钟，然后再次关闭Web Server。<br/>real_ip.txt，这个文件中保存的IP有80%以上都相同的，这个IP就是攻击者实施攻击的平台的IP。<br/>proxy.txt，这个文件中保存的是攻击者调用的代理服务器的IP，需要封掉。<br/>ips.txt，这里记录的是未表现出代理服务器特征的IP，根据访问次数判断是否为攻击源。<br/><br/>三，对上一段的补充<br/>如果VPS上启用了WEB日志，可以查看日志文件的增长速度来判断是哪个站点被攻击。<br/>如果没有启用日志，并且站点数量很少，临时启用日志也很方便 。<br/>如果没有启用日志，并且站点数量过多，可以使用临时的Web Server配置文件，不绑定虚拟主机，设置一个默认的站点。然后在ip.php里加入下面一行<br/><div class="code"><br/>shell_exec(“echo $_SERVER&#91;&#039;HTTP_HOST&#039;&#93; &gt;&gt; domain.txt”);<br/><br/></div><br/><br/>domain.txt里将保存被访问过的域名，被CC攻击的站点将在里面占绝大多数。<br/><br/>四，开始封堵IP<br/>建立文件ban.php<br/><br/><div class="code"><br/>&lt;?<br/>$threshold = 10;<br/>$ips = array_count_values(file(&#039;ips.txt&#039;));<br/>$ban_num = 0;<br/>foreach($ips as $ip=&gt;$num)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($num &gt; $threshold)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ip = trim($ip);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cmd = &quot;iptables -I INPUT -p tcp --dport 80 -s $ip -j DROP&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell_exec($cmd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$ip baned!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ban_num ++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/>$proxy_arr = array_unique(file(&#039;ips.txt&#039;));<br/>foreach($proxy_arr as $proxy)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;proxy = trim($proxy);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$cmd = &quot;iptables -I INPUT -p tcp --dport 80 -s $proxy -j DROP&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;shell_exec($cmd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$proxy baned!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ban_num ++;<br/>&#125;<br/>echo &quot;total: $ban_num ips&#92;n&quot;;<br/>?&gt;<br/><br/></div><br/><br/>用下面的命令执行脚本（确保php命令在PATH中）<br/><div class="code"><br/>php ban.php<br/><br/></div><br/>这个脚本依赖于第二段中ips.txt里保存的结果，当其中记录的IP访问次数超过10次，就被当作攻击源给屏蔽掉。如果是代理服务器，则不判断次数直接 封掉。<br/>封完IP之后，把所有的网站设置恢复正常，站点可以继续正常运行了。<br/><br/>五，一些细节<br/>为保持对操作过程的描述尽量简洁，没有在上面的内容中加入过多的解释，留在这段统一讲述。<br/>1，关于“代理服务器”的一些本质<br/>两个与TCP&HTTP协议相关的值，REMOTE_ADDR和HTTP_X_FORWARDED_FOR。<br/>（1）REMOTE_ADDR总是取离Web服务器最接近的一台主机的IP，如果没有使用代理，这个值就是访问者本身的IP，如果使用了代理，这个值就是 代理服务器的IP，如果通过多个代理服务器进行的连接，这个值就是到达Web服务器前最后一台代理服务器的IP。<br/>REMOTE_ADDR是由TCP/IP层决定的，不能修改不能伪造。<br/>（2）HTTP_X_FORWARDED_FOR，因为这个值是属于HTTP部分，而不是TCP/IP，所以这个值不管是什么，都不影响数据的传输。事实 上，一般情况下，如果是访问者直接访问Web服务器，这个值为空；通过透明代理的时候，这个值会被代理服务器设置为访问者的IP；通过匿名代理连接时，这 个值可能为代理服务器的IP也可能是空的也有可能是随机的。<br/>HTTP_X_FORWARDED_FOR可以被任意修改。大多数代理服务器都是透明代理，也就是说，会把这个值设置为最原始访问者的IP。<br/><br/>2，关于解决CC攻击的层面问题<br/>按处理效率从高到低排列。<br/>（由于本文是针对VPS服务器所写，而VPS简单来说就是服务器的低端替代品，内存和CPU等资源普遍偏低，当然是处理效率越高越好。）<br/>（1）网络传输层。也就是本文所用的iptables，这个工具本身是工作于系统内核，在建立网络连接时直接把攻击者的连接给否了。在这一层面上将攻击源 处理掉后，消耗掉的资源几乎可以忽略不计。<br/>（2）Web Server层，大多数Web Server都可以设置禁止访问的IP。在这一层上解决的意义和上面的差不多，但是效率要差些。<br/>（3）脚本层，从脚本程序上制定适合于本身的策略过滤掉攻击源。网络上有很多流传的在这一层面的解决方案，但是不太适用于VPS，而且设置难度可能要增加 几倍或者几十倍。<br/><br/>3，为什么不是从日志收集IP？<br/>主要是考虑两点，一是大多数VPS使用者都因为硬盘空间过小，经常清除日志很麻烦，而直接禁止了日志。<br/>二是如果从日志收集IP，脚本复杂程度要高很多，而且可能要根据情况做些调整，考虑到将要读到本文的人大多数都未必掌握更多的技术，本文的目的就是按部就 班的依本文进行操作，即可解决问题。<br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=cc" rel="tag">cc</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E6%2594%25BB%25E5%2587%25BB" rel="tag">攻击</a> , <a href="http://jed.dzhope.com/tag.php?tag=iptables" rel="tag">iptables</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?660</link>
<title><![CDATA[Linux操作系统下IPTables配置方法详解]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 01 Jun 2010 08:43:23 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?660</guid> 
<description>
<![CDATA[ 
	如果你的IPTABLES基础知识还不了解,建议先去看看。 <br/><br/><br/>们来配置一个filter表的防火墙 <br/><br/>1、查看本机关于IPTABLES的设置情况 <br/><br/>[root@tp ~]# iptables -L -n <br/><br/>Chain INPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain FORWARD (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain OUTPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain RH-Firewall-1-INPUT (0 references) <br/><br/>target prot opt source destination <br/><br/>ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 <br/><br/>ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 <br/><br/>ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 <br/><br/>ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0 <br/><br/>ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353 <br/><br/>ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631 <br/><br/>ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED <br/><br/>ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 <br/><br/>ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 <br/><br/>ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25 <br/><br/>REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited <br/><br/>可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口. <br/><br/>如果你在安装linux时没有选择启动防火墙,是这样的 <br/><br/>[root@tp ~]# iptables -L -n <br/><br/>Chain INPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain FORWARD (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain OUTPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>什么规则都没有. <br/><br/>2、清除原有规则. <br/><br/>不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则. <br/><br/>[root@tp ~]# iptables -F 清除预设表filter中的所有规则链的规则 <br/><br/>[root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则 <br/><br/>我们在来看一下 <br/><br/>[root@tp ~]# iptables -L -n <br/><br/>Chain INPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain FORWARD (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain OUTPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存. <br/><br/>[root@tp ~]# /etc/rc.d/init.d/iptables save <br/><br/><br/>这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用. <br/><br/>[root@tp ~]# service iptables restart <br/><br/><br/>现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧。 <br/><br/><br/>3、设定预设规则 <br/><br/>[root@tp ~]# iptables -p INPUT DROP <br/><br/>[root@tp ~]# iptables -p OUTPUT ACCEPT <br/><br/>[root@tp ~]# iptables -p FORWARD DROP <br/><br/>上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包 <br/><br/>而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过. <br/><br/>可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过. <br/><br/>这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP. <br/><br/>注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则. <br/><br/>怎么办,去本机操作呗! <br/><br/>4、添加规则. <br/><br/>首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链 <br/><br/>为了能采用远程SSH登陆,我们要开启22端口. <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT <br/><br/>[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了. <br/><br/>其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链: <br/><br/>[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.) <br/><br/>如果做了WEB服务器,开启80端口. <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT <br/><br/>如果做了邮件服务器,开启25,110端口. <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT <br/><br/>如果做了FTP服务器,开启21端口 <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT <br/><br/>如果做了DNS服务器,开启53端口 <br/><br/>[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT <br/><br/>如果你还做了其他的服务器,需要开启哪个端口,照写就行了. <br/><br/>上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP <br/><br/>允许icmp包通过,也就是允许ping, <br/><br/>[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话) <br/><br/>[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话) <br/><br/><br/>允许loopback!(不然会导致DNS无法正常关闭等问题) <br/><br/>IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP) <br/><br/>IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP) <br/><br/><br/>下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链. <br/><br/>减少不安全的端口连接 <br/><br/>[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP <br/><br/>[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP <br/><br/>有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会 <br/><br/>还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139（smb）,2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料. <br/><br/><br/>当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加 <br/><br/>允许SSH登陆一样.照着写就行了. <br/><br/><br/>下面写一下更加细致的规则,就是限制到某台机器 <br/><br/>如:我们只允许192.168.0.3的机器进行SSH连接 <br/><br/>[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT <br/><br/>如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP. <br/><br/>24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了. <br/><br/>-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆. <br/><br/>或采用命令方式: <br/><br/>[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT <br/><br/>然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里. <br/><br/>[root@tp ~]# /etc/rc.d/init.d/iptables save <br/><br/>这样写 !192.168.0.3 表示除了192.168.0.3的ip地址 <br/><br/>其他的规则连接也一样这么设置. <br/><br/><br/>在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控. <br/><br/>开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做) <br/><br/>[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT <br/><br/>[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT <br/><br/>丢弃坏的TCP包 <br/><br/>[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP <br/><br/>处理IP碎片数量,防止攻击,允许每秒100个 <br/><br/>[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT <br/><br/>设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包. <br/><br/>[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT <br/><br/>我在前面只所以允许ICMP包通过,就是因为我在这里有限制。 <br/><br/><br/><br/><br/>配置一个NAT表放火墙 <br/><br/>1、查看本机关于NAT的设置情况 <br/><br/>[root@tp rc.d]# iptables -t nat -L <br/><br/>Chain PREROUTING (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>Chain POSTROUTING (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235 <br/><br/>Chain OUTPUT (policy ACCEPT) <br/><br/>target prot opt source destination <br/><br/>我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章 <br/><br/>当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的 <br/><br/>如果你想清除,命令是 <br/><br/>[root@tp ~]# iptables -F -t nat <br/><br/>[root@tp ~]# iptables -X -t nat <br/><br/>[root@tp ~]# iptables -Z -t nat <br/><br/><br/>2、添加规则 <br/><br/><br/>添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章), <br/><br/>添加规则,我们只添加DROP链.因为默认链全是ACCEPT. <br/><br/>防止外网用内网IP欺骗 <br/><br/>[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP <br/><br/>[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP <br/><br/>[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP <br/><br/><br/>如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要) <br/><br/>例： <br/><br/>禁止与211.101.46.253的所有连接 <br/><br/>[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP <br/><br/>禁用FTP(21)端口 <br/><br/>[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP <br/><br/>这样写范围太大了,我们可以更精确的定义. <br/><br/>[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP <br/><br/>这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接. <br/><br/>按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了. <br/><br/><br/>最后： <br/><br/>drop非法连接 <br/><br/>[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP <br/><br/>[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP <br/><br/>[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP <br/><br/>允许所有已经建立的和相关的连接 <br/><br/>[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT <br/><br/>[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT <br/><br/><br/>[root@tp ~]# /etc/rc.d/init.d/iptables save <br/><br/><br/>这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用． <br/><br/><br/>[root@tp ~]# service iptables restart <br/><br/><br/>别忘了保存，不行就写一部保存一次。你可以一边保存，一边做实验，看看是否达到你的要求， <br/><br/>上面的所有规则我都试过，没有问题。 <br/><br/>写这篇文章，用了我将近１个月的时间．查找资料，自己做实验，希望对大家有所帮助．如有不全及不完善的地方还请提出。 <br/><br/>因为本篇文章以配置为主.关于IPTABLES的基础知识及指令命令说明等我会尽快传上,当然你可以去网上搜索一下,还是很多的。（<br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=iptables" rel="tag">iptables</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?659</link>
<title><![CDATA[linux下防止syn攻击，端口扫描和死亡之ping ]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 01 Jun 2010 01:55:57 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?659</guid> 
<description>
<![CDATA[ 
	防止syn攻击（DDOOS攻击的一种）<br/>iptables -I INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT<br/>iptables -I FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT<br/>防止各种端口扫描<br/>iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT<br/>Ping洪水攻击（Ping of Death）<br/>iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT<br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E9%2598%25B2%25E6%25AD%25A2%25E6%2594%25BB%25E5%2587%25BB" rel="tag">防止攻击</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?657</link>
<title><![CDATA[Apache利用referer防盗链的使用方法]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 26 May 2010 06:01:03 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?657</guid> 
<description>
<![CDATA[ 
	找到Apache的配置文件，Linux下的位置一般在 /usr/local/apache/conf/httpd.conf <br/><br/><br/>或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf <br/><div class="code"><br/><br/>SetEnvIfNoCase Referer &quot;^http://www.216so.com&quot; local_ref=1 <br/>SetEnvIfNoCase Referer &quot;^http://216so.com&quot; local_ref=1 <br/>&lt;filesmatch &quot;&#92;.(txt&#124;doc&#124;mp3&#124;zip&#124;rar&#124;jpg&#124;gif)&quot;&gt; <br/>Order Allow,Deny <br/>Allow from env=local_ref <br/>&lt;/filesmatch&gt; <br/></div><br/><br/>其中粗体的是您的网址，如果有多个，就加多行 本文来自雷奥网 <br/><br/>斜体的是您需要防盗链的文件后缀，中间用&#124;隔开 <br/><br/>还一种写法，是用正则的，这种写法在各个版本的apache比较通用。 <br/><br/><br/>写法是 <br/><br/><div class="code"><br/>SetEnvIfNoCase Referer &quot;^http://.*&#92;.216so&#92;.com&quot; local_ref=1 <br/>SetEnvIfNoCase Referer &quot;.*&#92;.216so&#92;.com&quot; local_ref=1 <br/>&lt;filesmatch &quot;&#92;.(txt&#124;doc&#124;mp3&#124;zip&#124;rar&#124;jpg&#124;gif)&quot;&gt; <br/>Order Allow,Deny <br/>Allow from env=local_ref <br/>&lt;/filesmatch&gt; <br/><br/>&nbsp;&nbsp;</div><br/><br/>或是再加个<br/>　　SetEnvIfNoCase Referer "^$" local_ref=1<br/>　　有些会删掉 http referer 的 proxy 用户需要这个<br/><br/><br/>其中粗体的部分有一点区别,用正则写法, &#92; 符号代表转义，因为.本身在正则中有自己的作用。 <br/><br/><br/><br/>上面说的是Apache防盗链的使用，现在来说Apache防盗链的破解，说简单点Apache防盗链是通过来路来确定用户是否盗链的，如果自己写采集程序的话，我们完全可以利用程序去模拟referer和useragent。 <br/><br/><br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=apache" rel="tag">apache</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E9%2598%25B2%25E7%259B%2597%25E9%2593%25BE" rel="tag">防盗链</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?656</link>
<title><![CDATA[LAMP 架构服务器性能优化]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 20 May 2010 01:51:48 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?656</guid> 
<description>
<![CDATA[ 
	维护“手机之家”（<a href="http://www.imobile.com.cn)" target="_blank">http://www.imobile.com.cn)</a>的服务器有快两年了，也有些经验心得，写在这里给大家分享。<br/><br/>　　服务器配置如下：redhat linux 9.0、apache 1.3.29、php 4.3.4、mysql 3.23.58，以下建议均在以上平台上跑的很好，当然也跟你的应用有关系，具体实施要根据实际效果来进行。<br/><br/>　　1、众所周知的方法就是使用 Zend Optimizer（简称 ZO，最新版本为 2.5.1） 或者 Zend Performance Suite（简称 ZPS，其中包含 ZO，最新版本为 3.6.0）对 PHP 进行加速。相关软件可到张微波的主页来下载哦，地址为：<a href="http://www.5ilinux.com/blog/archives/000093.html" target="_blank">http://www.5ilinux.com/blog/archives/000093.html</a>。<br/><br/>　　2、apache配置优化（httpd.conf）<br/>1)修改“Timeout”的值为 30-60，如果你得程序没有执行时间需要很长的话，可以修改到 10-15；<br/>2)修改“KeepAlive”的值为“Off”，这个很有效果，也很有争议，我自己的看法是很有效果，而且并没有影响速度，大家可以自行试验；<br/>3)修改“MaxRequestsPerChild”的值为“2048”，这个还在试验中，一是因为怕有内存泄漏，二是因为 apache 进程会因为随着服务时间的延长，会变得越来越胖（我这里的实际情况是某些 apache 进程会狂吃内存到18MB，晕啊：），不过这设置有没有效果，还在试验中；<br/>4)在不使用 .htaccess 的情况下，将其“”部分设置为“None”方式，如果你使用 PHPMYADMIN 进行管理的话，可以使用 PHPMYADMIN 的 COOKIE 权限控制方式。<br/><br/>　　3、卸载不必要的模块，不管是静态编译还是 DSO 模式，以便节省内存占用。具体模块可以参照 apache 的手册，这里就不多说了。PHP 也是同样，我基本上已经把不用的模块都卸载了：）<br/><br/>　　4、使用 mod_gzip 进行加速，很简单，就不多说了。<br/><br/>　　5、如果你的服务器还是负载很高的话，更极端的方式就是在 httpd.conf 里面将日志停掉了，不过一般要保留 errorlog 才好，以便排错，而且要记得，不是把“CustomLog”注释掉就行了，而要使用“CustomLog /dev/null common”这样的方式才好。<br/><br/>　　6、如果你的 PHP 程序使用 Session 对话的话，可以在 php.ini 里面将“session.save_path”设置为“session.save_path = /dev/shm”，因为 /dev/shm 是 linux 系统独有的 TMPFS 文件系统，是以内存为主要存储方式的文件系统，比 RAMDISK 要好，因为可以使用 DISKSWAP 作为补充，而且是系统自带，不需要另行配置，想想吧，从磁盘IO操作到内存操作，速度会快多少？：）你也可以把你所需要的临时文件都写在 /dev/shm 下，只是别忘了，重启就没有啦，我是只存放目标文件的，呵呵。额外的说明资料请看“使用虚拟内存（virtual memory，VM）文件系统和绑定安装”（<a href="http://www-900.ibm.com/developerWorks/cn/linux/filesystem/l-fs3/index.shtml" target="_blank">http://www-900.ibm.com/developerWorks/cn/linux/filesystem/l-fs3/index.shtml</a>）。<br/><br/>　　7、MYSQL 的优化（/etc/my.cnf）<br/>1)确认在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”参数；<br/>2)确认在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”参数；<br/>3)如果不需要的话，可以将二进制日志（binlog）停掉，方法是将“log-bin”注释掉；<br/>4)在内存允许的情况下，对一些参数进行重新配置，目标在于将大部分操作集中于内存中，尽量不进行磁盘操作，对于我的 MYSQL 服务器我是如下修改的，基于 2G 内存情况：<br/><br/>[mysqld]<br/>set-variable = key_buffer=512M<br/>set-variable = max_allowed_packet=4M<br/>set-variable = table_cache=1024<br/>set-variable = thread_cache=64<br/>set-variable = join_buffer_size=32M<br/>set-variable = sort_buffer=32M<br/>set-variable = record_buffer=32M<br/>set-variable = max_connections=512<br/>set-variable = wait_timeout=120<br/>set-variable = interactive_timeout=120<br/>set-variable = max_connect_errors=30000<br/>set-variable = long_query_time=1<br/>set-variable = max_heap_table_size=256M<br/>set-variable = tmp_table_size=128M<br/>set-variable = thread_concurrency=8<br/>set-variable = myisam_sort_buffer_size=128M<br/><br/>你可以根据“show status”命令返回的状态进行微调。我主要注意以下变量的数值，越小越好，最好为零：）<br/>Created_tmp_disk_tables<br/>Created_tmp_tables<br/>Created_tmp_files<br/>Slow_queries<br/><br/>　　8、在启动脚本中使用“--log-slow-queries=/home/logs/mysql_slow.log”参数，以便进行 SQL 语句的优化工作，这个其实是很很重要的工作。记得一定要在 my.cnf 中设置“set-variable = long_query_time=1”才行。<br/><br/>　　9、另外可以使用 4.0.xx 版本的 MYSQL，4.0.xx 版本除了一些性能提升以外，还有 QueryCache 方法，就是在 SQL 语句查询结果没有变动之前，将其结果进行缓存，下次再进行同样的 SQL 语句查询就可以直接反回结果，当然也是以牺牲内存为前提：）<br/><br/>　　10、额外的，对于 LINUX EXT3 文件系统还有一个小技巧可用，就是在修改 /etc/fstab 中的参数，比如“/dev/sdb2 /home ext3 defaults 1 2”改为“/dev/sdb2 /home ext3 noatime 1 2”，“noatime”的意思就是不修改 accesstime，对于磁盘文件读写频繁的服务器也应该可以降低一些效果。不过最好不要远程操作，不然因为修改失误，服务器不能启动了，可别怪我：）<br/><br/>　　好了，基本上我用过的方法已经说过一遍了，有些方法是取自于一些很好的文章，由于未作保留，所以无法写出出处，只能泛泛的表示感谢了。其中有些方法也适用于 Windows 平台，大家可以根据自己的服务器、应用情况去进行应用，大家也可一说说自己的办法，比如改用 ZEUS 来做 webserver，我也在找更多的办法来提升服务器性能，比如基于 LINUX KERNEL v2.4 以上内核的一些性能优化方法，从 network 到 swap（因为内核升级，所以一些老版本内核的方法已经不能再使用了：）。我也会进一步更新这篇文章，让大家能够更好的进行服务器的性能提升工作～<br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://jed.dzhope.com/tag.php?tag=%25E4%25BC%2598%25E5%258C%2596" rel="tag">优化</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?654</link>
<title><![CDATA[Windows下Nginx以服务的方式运行]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Mon, 17 May 2010 02:50:50 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?654</guid> 
<description>
<![CDATA[ 
	从wnmp发布以来，很多朋友就问Windows下如何将Nginx加入服务中，以便于服务器重启后自动运行，我在朋友的留言中回复了，可能不是很好找，便整理在此，便于需要的朋友查找。<br/><br/>假设nginx安装在c:&#92;nginx&#92;下:<br/><br/>1.下载微软服务注册工具srvany.exe, instsrv.exe, srvany-instsrv存放到c:&#92;nginx&#92;目录下<br/><br/>2.安装Nginx服务, 将命令行切换到c:&#92;nginx&#92;,执行下列命令<br/><br/>instsrv NGINX c:&#92;nginx&#92;srvany.exe<br/><br/>3.在c:&#92;nginx&#92;下,新建一个nginx.reg文件，输入一下内容：<br/><br/>Windows Registry Editor Version 5.00<br/><br/>[HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;CurrentControlSet&#92;Services&#92;NGINX&#92;Parameters]<br/>"Application"="C:&#92;&#92;nginx&#92;&#92;nginx.exe"<br/>"AppParameters"=""<br/>"AppDirectory"="C:&#92;&#92;nginx&#92;&#92;"<br/><br/>5.让服务与程序关联起来, 命令行执行<br/><br/>regedit /s nginx.reg<br/><br/>6.编辑启动nginx脚本start-nginx.bat(关闭脚本不用变), 让程序以服务方式运行<br/><br/>@ECHO OFF<br/>net stop nginx<br/>net start nginx<br/>EXIT<br/><br/>完成~<br/><br/>最近一直在研究Linux下的Nginx自动安装，呵呵，鼓励大家迁移到Linux平台...<br/><br/><br/><a href="attachment.php?fid=46">点击这里下载文件</a><br/><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=windows" rel="tag">windows</a> , <a href="http://jed.dzhope.com/tag.php?tag=nginx" rel="tag">nginx</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?652</link>
<title><![CDATA[配置 Nginx 支持 CGI]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 13 May 2010 05:56:51 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?652</guid> 
<description>
<![CDATA[ 
	Nginx 不能直接执行外部可执行程序，如果要让 Nginx 支持 CGI，可以考虑安装 nginx-fcgi：<br/><br/><a href="http://www.nginx.eu/nginx-fcgi.html" target="_blank">http://www.nginx.eu/nginx-fcgi.html</a><br/><br/>当前版本为 nginx-fcgi-0.4.3，需要用到以下&nbsp;&nbsp;perl 库：<br/><br/><div class="code"><br/><br/>perl-FCGI<br/>perl-Getopt<br/>perl-IO<br/>perl-Socket<br/><br/></div><br/><br/>安装 perl-FCGI 、perl-FCGI-ProcManager 和 perl-IO-ALL：<br/><br/><div class="code"><br/><br/>wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz<br/>tar -zxf FCGI-0.67.tar.gz<br/>cd FCGI-0.67<br/>perl Makefile.PL<br/>make &amp;&amp; make install<br/>cd ..<br/><br/>wget http://search.cpan.org/CPAN/authors/id/G/GB/GBJK/FCGI-ProcManager-0.18.tar.gz<br/>tar -zxf FCGI-ProcManager-0.18.tar.gz<br/>cd FCGI-ProcManager-0.18<br/>perl Makefile.PL<br/>make &amp;&amp; make install<br/>cd ..<br/><br/>wget http://search.cpan.org/CPAN/authors/id/I/IN/INGY/IO-All-0.39.tar.gz<br/>tar zxf IO-All-0.39.tar.gz<br/>cd IO-All-0.39<br/>perl Makefile.PL<br/>make &amp;&amp; make install<br/><br/><br/><br/></div><br/><br/>安装 nginx-fcgi 脚本：<br/><div class="code"><br/><br/>wget http://www.nginx.eu/nginx-fcgi/nginx-fcgi.txt<br/><br/>mv nginx-fcgi.txt /usr/sbin/nginx-fcgi<br/><br/>chmod +x /usr/sbin/nginx-fcgi<br/><br/><br/></div><br/><br/>如果不用 sudo 方式运行 nginx-fcgi，请注释掉 nginx-fcgi 脚本中的：<br/><br/><div class="code"><br/><br/>if ( $&gt; == &quot;0&quot; ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;&#92;n&#92;tERROR&#92;tRunning as a root!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;&#92;tSuggested not to do so !!!&#92;n&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit 1;<br/>&#125;<br/><br/></div><br/><br/>启动 nginx-fcgi：<br/><div class="code"><br/><br/>nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock<br/>chown nginx:nginx /var/run/nginx-fcgi.sock<br/><br/><br/><br/></div><br/><br/>注意一定要为 socket 添加 nginx 帐户的权限，否则 cgi 会执行失败。<br/><br/>新建 nginx-fcgi 脚本指令配置，直接从 fastcgi_params 复制模板：<br/><br/><div class="code"><br/><br/>cp /etc/nginx/fastcgi_params /etc/nginx/nginx_fcgi_params<br/></div><br/><br/>去除尾部的：<br/><div class="code"><br/># PHP only, required if PHP was built with –enable-force-cgi-redirect<br/>fastcgi_param&nbsp;&nbsp;REDIRECT_STATUS&nbsp;&nbsp;&nbsp;&nbsp;200;<br/><br/><br/></div><br/><br/>新建示例 cgi 站点配置：<br/><br/><div class="code"><br/>server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;test.local;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;location ~ ^/cgi-bin/.*&#92;.cgi$<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /work/www/test;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_index&nbsp;&nbsp;index.cgi;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp;SCRIPT_FILENAME&nbsp;&nbsp;&nbsp;&nbsp;$document_root$fastcgi_script_name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx_fcgi_params;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_read_timeout&nbsp;&nbsp;&nbsp;&nbsp;5m;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass&nbsp;&nbsp; unix:/var/run/nginx-fcgi.sock;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/><br/></div><br/><br/>重启nginx即可。<br/><div class="code"><br/>/usr/local/nginx/sbin/nginx -s reload<br/></div><br/><br/>添加系统<br/><div class="code"><br/>vi /etc/rc.d/rc.local<br/>增加：<br/>/usr/sbin/nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock<br/>chown www:www /var/run/nginx-fcgi.sock<br/></div><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://jed.dzhope.com/tag.php?tag=cgi" rel="tag">cgi</a>
]]>
</description>
</item><item>
<link>http://jed.dzhope.com/read.php?651</link>
<title><![CDATA[Nginx的Rewrite重写规则]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 13 May 2010 02:10:36 +0000</pubDate> 
<guid>http://jed.dzhope.com/read.php?651</guid> 
<description>
<![CDATA[ 
	Nginx Rewrite规则相关指令<br/><div class="code"><br/><br/>Nginx Rewrite规则相关指令有if、rewrite、set、return、break等，其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下：<br/><br/>rewrite ^/b/(.*)&#92;.html /play.php?video=$1 break;<br/><br/><br/>如果加上if语句，示例如下：<br/><br/>if (!-f $request_filename)<br/><br/>&#123;<br/><br/>rewrite ^/img/(.*)$ /site/$host/images/$1 last;<br/><br/>&#125;<br/><br/><br/><br/></div><br/><br/>Nginx与Apache的Rewrite规则实例对比 <br/><br/><div class="code"><br/><br/>简单的Nginx和Apache 重写规则区别不大，基本上能够完全兼容。例如：<br/><br/>Apache Rewrite 规则：<br/><br/>RewriteRule ^/(mianshi&#124;xianjing)/$ /zl/index.php?name=$1 &#91;L&#93;<br/><br/>RewriteRule ^/ceshi/$ /zl/ceshi.php &#91;L&#93;<br/><br/>RewriteRule ^/(mianshi)_(&#91;a-zA-Z&#93;+)/$ /zl/index.php?name=$1_$2 &#91;L&#93;<br/><br/>RewriteRule ^/pingce(&#91;0-9&#93;*)/$ /zl/pingce.php?id=$1 &#91;L&#93;<br/><br/><br/>Nginx Rewrite 规则：<br/><br/>rewrite ^/(mianshi&#124;xianjing)/$ /zl/index.php?name=$1 last;<br/><br/>rewrite ^/ceshi/$ /zl/ceshi.php last;<br/><br/>rewrite ^/(mianshi)_(&#91;a-zA-Z&#93;+)/$ /zl/index.php?name=$1_$2 last;<br/><br/>rewrite ^/pingce(&#91;0-9&#93;*)/$ /zl/pingce.php?id=$1 last;<br/><br/><br/>由以上示例可以看出，Apache的Rewrite规则改为Nginx的Rewrite规则，其实很简单：Apache的RewriteRule指令换成Nginx的rewrite指令，Apache的&#91;L&#93;标记换成Nginx的last标记，中间的内容不变。<br/><br/><br/>如果Apache的Rewrite规则改为Nginx的Rewrite规则后，使用nginx -t命令检查发现nginx.conf配置文件有语法错误，那么可以尝试给条件加上引号。例如一下的Nginx Rewrite规则会报语法错误：<br/><br/>rewrite&nbsp;&nbsp;^/(&#91;0-9&#93;&#123;5&#125;).html$ /x.jsp?id=$1&nbsp;&nbsp;last;<br/><br/>加上引号就正确了：<br/>rewrite&nbsp;&nbsp;“^/(&#91;0-9&#93;&#123;5&#125;).html$” /x.jsp?id=$1&nbsp;&nbsp;last;<br/><br/>Apache与Nginx的Rewrite规则在URL跳转时有细微的区别：<br/><br/>Apache Rewrite 规则：<br/>RewriteRule&nbsp;&nbsp;^/html/tagindex/(&#91;a-zA-Z&#93;+)/.*$ /$1/ &#91;R=301,L&#93;<br/><br/>Nginx Rewrite 规则：<br/>rewrite&nbsp;&nbsp;^/html/tagindex/(&#91;a-zA-Z&#93;+)/.*$ http://$host/$1/&nbsp;&nbsp;permanent;<br/><br/>以上示例中，我们注意到，Nginx Rewrite 规则的置换串中增加了“http://$host”，这是在Nginx中要求的。<br/><br/>另外，Apache与Nginx的Rewrite规则在变量名称方面也有区别，例如：<br/><br/>Apache Rewrite 规则：<br/>RewriteRule&nbsp;&nbsp;^/user/login/$ /user/login.php?login=1&amp;forward=http://%&#123;HTTP_HOST&#125;&nbsp;&nbsp;&#91;L&#93;<br/><br/>Nginx Rewrite 规则：<br/>rewrite&nbsp;&nbsp;^/user/login/$ /user/login.php?login=1&amp;forward=http://$host&nbsp;&nbsp; last;<br/><br/>Apache与Nginx Rewrite 规则的一些功能相同或类似的指令、标记对应关系：<br/><br/>Apache的RewriteCond指令对应Nginx的if指令；<br/>Apache的RewriteRule指令对应Nginx的rewrite指令；<br/>Apache的&#91;R&#93;标记对应Nginx的redirect标记；<br/>Apache的&#91;P&#93;标记对应Nginx的last标记；<br/>Apache的&#91;R,L&#93;标记对应Nginx的redirect标记；<br/>Apache的&#91;P,L&#93;标记对应Nginx的last标记；<br/>Apache的&#91;PT,L&#93;标记对应Nginx的last标记；<br/><br/>允许指定的域名访问本站，其他域名一律跳转到http://www.aaa.com<br/><br/>Apache Rewrite 规则：<br/>RewriteCond %&#123;HTTP_HOST&#125;&nbsp;&nbsp;&nbsp;&nbsp;^(.*?)&#92;.domain&#92;.com$<br/>RewriteCond %&#123;HTTP_HOST&#125;&nbsp;&nbsp;&nbsp;&nbsp;!^qita&#92;.domain&#92;.com$<br/>RewriteCond %&#123;DOCUMENT_ROOT&#125;/market/%1/index.htm -f<br/>RewriteRule ^/wu/$ /market/%1/index.htm &#91;L&#93;<br/><br/>Nginx的if指令不支持嵌套，也不支持AND、OR等多条件匹配，相比于Apache的RewriteCond，显得麻烦一些，但是，我们可以通过下一页的Nginx配置写法来实现这个示例：<br/><br/>Nginx Rewrite 规则：<br/>if ($host ~* ^(.*?)&#92;.domain&#92;.com$)<br/>&#123;<br/>set $var_wupin_city $1;<br/>set $var_wupin ‘1′;<br/>&#125;<br/>if ($host ~* ^qita&#92;.domain&#92;.com$)<br/>&#123;<br/>set $var_wupin ‘0′;<br/>&#125;<br/>if (!-f $document_root/market/$var_wupin_city/index.htm)<br/>&#123;<br/>set $var_wupin ‘0′;<br/>&#125;<br/>if ($var_wupin ~ ‘1′)<br/>&#123;<br/>rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;<br/>&#125;<br/><br/><br/><br/></div><br/>apache重写规则转换成nginx重写规则网址：<br/><a href="http://www.anilcetin.com/convert-apache-htaccess-to-nginx/" target="_blank">http://www.anilcetin.com/convert-apache-htaccess-to-nginx/</a><br/><br/>Tags - <a href="http://jed.dzhope.com/tag.php?tag=nginx%25E9%2587%258D%25E5%2586%2599%25E8%25A7%2584%25E5%2588%2599" rel="tag">nginx重写规则</a>
]]>
</description>
</item>
</channel>
</rss>