<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[sclife]]></title>
<link>sclife.com.cn/blog/</link>
<description><![CDATA[记录网上的点点滴滴！ 熟称笔记本 !]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[hoifish_010@163.om(hotfish)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>sclife</title>
	<url>sclife.com.cn/blog/images/logos.gif</url>
	<link>sclife.com.cn/blog/</link>
	<description>sclife</description>
</image>

			<item>
			<link>sclife.com.cn/blog/article.asp?id=599</link>
			<title><![CDATA[linux下如何删除老文件]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Wed,19 May 2010 16:59:06 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=599</guid>
		<description><![CDATA[<a href="http://www.linuxboy.net/wordpress/?p=110" target="_blank" rel="external">http://www.linuxboy.net/wordpress/?p=110</a><br/><br/>唉, 要删除2006年的文件<br/>ls -la|grep 2006|awk ‘{print $9}’|xargs rm -rf<br/><br/>2007年的文件<br/>ls -la|grep 2007|awk ‘{print $9}’|xargs rm -rf<br/><br/>今年一月份的文件<br/>ls -la|grep Jan|awk ‘{print $9}’|xargs rm -rf<br/><br/>利用了如下道理:<br/><br/>在Linux中，没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改 过，修改时间=创建时间；如果文件创建后，状态就没有改变过，那么状态改变时间=创建时间；如果文件创建后，没有被读取过，那么访问时间=创建时间，这个 基本不太可能。<br/><br/>与文件相关的几个时间：<br/><br/>1、访问时间，读一次这个文件的内容，这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。<br/><br/>2、修改时间，对文件内容修改一次，这个时间就会更新。比如：vi后保存文件。ls -l列出的时间就是这个时间。<br/><br/>3、状态改变时间。通过chmod命令更改一次文件属性，这个时间就会更新。查看文件的详细的状态、准确的修改时间等，可以通过stat命令+文件名。<br/><br/>比如： [jing@zhjh c]$ stat temp.c<br/><br/> <br/>File: ‘temp.c’<br/>Size: 66 Blocks: 8 IO Block: 4096 \u4e00\u822c\u6587\u4ef6<br/>Device: 807h/2055d Inode: 1191481 Links: 1<br/>Access: (0664/-rw-rw-r–) Uid: ( 500/ jing) Gid: ( 500/ jing)<br/>Access: 2008-03-12 20:19:45.000000000 +0800<br/>Modify: 2008-03-12 20:19:45.000000000 +0800<br/>Change: 2008-03-12 20:19:45.000000000 +0800 <br/><br/>说明：Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。<br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=598</link>
			<title><![CDATA[LVS基本概念及要诀(优化)]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Mon,17 May 2010 15:30:01 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=598</guid>
		<description><![CDATA[<p><span style="color: #0000ff">原文链接：<a href="http://bbs.linuxtone.org/thread-2056-1-1.html" target="_blank" style="color: #0000ff; text-decoration: underline">http://bbs.linuxtone.org/thread-2056-1-1.html</a></span> <span style="color: #000000">IT运维专家网--&quot;自由平等，互助分享！&quot;</span></p>
<div class="t_msgfontfix">
<table cellspacing="0" cellpadding="0">
    <tbody>
        <tr>
            <td id="postmessage_4837" class="t_msgfont">作者：NetSeek <a href="http://www.linuxtone.org/" target="_blank">http://www.<span class="t_tag" onclick="tagshow(event)" href="sclife.com.cn/blog/tag.php?name=linux">linux</span>tone.org</a><br />
            <strong>一、基本术语:</strong><br />
            <font size="2">Load Balancer(<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B8%BA%D4%D8">负载</span>均衡器)：<br />
            Load Balancer是整个<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BC%AF%C8%BA">集群</span><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CF%B5%CD%B3">系统</span>的前端，负责把客户请求转发到Real <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Server">Server</span>上。<br />
            Backup是备份Load Balancer，当Load Balancer不可用时接替它，成为实际的Load Balancer。<br />
            Load Balancer通过Ldirectord监测各Real Server的健康状况。在Real Server不可用时把它从群中剔除，恢复时重新加入。<br />
            Server Array(<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B7%FE%CE%F1%C6%F7">服务器</span>群)：<br />
            Server Array是一组<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D4%CB%D0%D0">运行</span>实际<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D3%A6%D3%C3">应用</span><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B7%FE%CE%F1">服务</span>的机器，比如WEB, Mail, FTP, DNS, Media等等。在实际应用中，Load Balancer和Backup也可以兼任Real Server的角色。以下的测试就是一台服务器既担任了LVSserver,同时也是realserver节点.<br />
            Shared Storage(共享存储)：<br />
            Shared Storage为所有Real Server提供共享存储空间和一致的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%FD%BE%DD">数据</span>内容。<br />
            Director: 前端负载均衡器即运行LVS服务可以针对<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=web">web</span>、ftp、<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=cache">cache</span>、mms甚至<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=mysql">mysql</span>等服务做load balances。<br />
            RealServer: 后端需要负载均衡的服务器，可以为各类系统，Linux、Solaris、Aix、BSD、Windows都可，甚至Director本身也可以作为 RealServer使用.<br />
            LVS( Linux Virtual Server),Linux下的负载均衡器，支持LVS-NAT、 LVS-DR、LVS-TUNL三种不同的方式，nat用的不是很多，主要用的是DR、TUNL方式。DR方式适合所有的RealServer同一网段下，即接在同一个交换机上.<br />
            TUNL方式就对于RealServer的位置可以任意了，完全可以跨地域、空间，只要系统支持Tunnel就可以,方便以后扩充的话直接Tunl方式即可</font><br />
            <br />
            <br />
            <strong><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BB%F9%B4%A1">基础</span>知识介绍：</strong><br />
            1、LVS基础及介绍<br />
            LVS是Linux Virtual Server的简写，意即Linux虚拟服务器，是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立，是<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D6%D0%B9%FA">中国</span>国内最早出现的自由<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C8%ED%BC%FE">软件</span>项目之一。<br />
            <font color="#ff0000">目前有三种IP负载均衡<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BC%BC%CA%F5">技术</span>（VS/NAT、VS/TUN和VS/DR）； 十种调度算法（rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=sed">sed</span>|nq）</font><br />
            【参考资料:】<br />
            1)官方<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D6%D0%CE%C4">中文</span>参考资料: <a href="http://www.linuxvirtualserver.org/zh/index.html" target="_blank">http://www.linuxvirtualserver.org/zh/index.html</a><br />
            [LVS项目介绍] [LVS集群的体系结构] [LVS集群中的IP负载均衡技术]<br />
            [LVS集群的负载调度]<br />
            2)LinuxTone 相关LVS技术档<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BB%E3%D7%DC">汇总</span>: <a href="http://bbs.linuxtone.org/thread-1191-1-1.html" target="_blank">http://bbs.linuxtone.org/thread-1191-1-1.html</a><br />
            <br />
            <strong>2、 LVS 三种IP负载均衡技术对比:</strong><br />
            三种IP负载均衡技术的优缺点归纳在下表中：<br />
            <table class="t_table" cellspacing="0">
                <tbody>
                    <tr>
                        <td width="175"><br />
                        &nbsp;</td>
                        <td>VS/NAT</td>
                        <td>VS/TUN</td>
                        <td>VS/DR</td>
                    </tr>
                    <tr>
                        <td width="175">Server</td>
                        <td>any</td>
                        <td>Tunneling</td>
                        <td>Non-arp device</td>
                    </tr>
                    <tr>
                        <td width="175">server network</td>
                        <td>private</td>
                        <td>LAN/WAN</td>
                        <td>LAN</td>
                    </tr>
                    <tr>
                        <td width="175">server number</td>
                        <td>low (10~20)</td>
                        <td>High (100)</td>
                        <td>High (100)</td>
                    </tr>
                    <tr>
                        <td>server gateway</td>
                        <td>load balancer</td>
                        <td width="140">own router</td>
                        <td>Own router</td>
                    </tr>
                </tbody>
            </table>
            <br />
            【注】 以上三种方法所能支持最大服务器数目的估计是假设调度器使用100M网卡，调度器的硬件配置与后端服务器的硬件配置相同，而且是对一般Web服务。使用更 高的硬件配置（如千兆网卡和更快的处理器）作为调度器，调度器所能调度的服务器数量会相应增加。当应用不同时，服务器的数目也会相应地改变。所以，以上数 据估计主要是为三种方法的伸缩性进行量化比较。<br />
            <br />
            <strong>3、LVS目前实现的几种调度算法</strong><br />
            IPVS在<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C4%DA%BA%CB">内核</span>中的负载均衡调度是以连接为粒度的。在HTTP协议（非持久）中，每个对象从WEB服务器上获取都需要建立一个TCP连接，同一用户的不同请求会被调度到不同的服务器上，所以这种细粒度的调度在一定程度上可以避免单个用户<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B7%C3%CE%CA">访问</span>的突发性引起服务器间的负载不平衡。<br />
            在内核中的连接调度算法上，IPVS已实现了以下十种调度算法：<br />
            * 轮叫调度（Round-Robin Scheduling）<br />
            * 加权轮叫调度（Weighted Round-Robin Scheduling）<br />
            * 最小连接调度（Least-Connection Scheduling）<br />
            * 加权最小连接调度（Weighted Least-Connection Scheduling）<br />
            * 基于局部性的最少链接（Locality-Based Least Connections Scheduling）<br />
            * 带复制的基于局部性最少链接（Locality-Based Least Connections with Replication Scheduling）<br />
            * 目标地址散列调度（Destination Hashing Scheduling）<br />
            * 源地址散列调度（Source Hashing Scheduling）<br />
            * 最短预期延时调度（Shortest Expected Delay Scheduling）<br />
            * 不排队调度（Never Queue Scheduling）<br />
            对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,<br />
            <br />
            <br />
            Ldirecotrd<font face="宋体 ">配置选项及</font>ipvsadm<font face="宋体 ">使用参数</font>.<br />
            <table class="t_table" cellspacing="0" style="width: 557px">
                <tbody>
                    <tr>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 ">ldirectord</font><font face="宋体 ">配置选项</font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td width="156">&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 ">ipvsadm</font><font face="宋体 ">使用的参数</font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 ">ipvsadm -L</font><font face="宋体 ">的输出</font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 ">LVS</font><font face="宋体 ">转发方法</font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                    </tr>
                    <tr>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">gate</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td width="156">&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">-g</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">Route</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">LVS-DR</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                    </tr>
                    <tr>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">ipip</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td width="156">&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">-i</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">Tunnel</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">LVS-TUN</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                    </tr>
                    <tr>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">masq</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td width="156">&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">-m</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">Masq</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                        <td>&nbsp;&nbsp;<br />
                        <p align="left"><font face="宋体 "><font style="font-size: 12pt">LVS-NAT</font></font></p>
                        <br />
                        &nbsp;&nbsp;</td>
                    </tr>
                </tbody>
            </table>
            <br />
            <br />
            <strong>4、集群<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BC%DC%B9%B9">架构</span>时我们应该采用什么样的调度算法?</strong><br />
            <br />
            <font face="宋体 ">在一般的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CD%F8%C2%E7">网络</span>服务（如</font>HTTP<font face="宋体 ">和</font>Mail Service<font face="宋体 ">等）调度中，我会使用加权最小连接调度</font>wlc<font face="宋体 ">或者加权轮叫调度</font>wrr<font face="宋体 ">算法。</font><br />
            <br />
            <font face="宋体 ">基于局部性的最少链接</font>LBLC<font face="宋体 ">和带复制的基于局部性最少链接</font>LBLCR<font face="宋体 ">主要适用于</font>Web Cache<font face="宋体 ">集群。</font><br />
            <br />
            <font face="宋体 ">目标地址散列调度和源地址散列调度是用静态映射方法，可能主要适合防火墙调度。</font><br />
            <br />
            <font face="宋体 ">最短预期延时调度</font>SED<font face="宋体 ">和不排队调度</font>NQ<font face="宋体 ">主要是对处理时间相对比较长的网络服务。</font><br />
            <br />
            <font face="宋体 ">其实，它们的适用范围不限于这些。我想最好参考内核中的连接调度算法的实现原理，看看那种调度方法适合你的应用。</font><br />
            <br />
            <strong>5、LVS的ARP问题</strong><br />
            2.4.x kernels:<br />
            Hidden Patch<br />
            arptable<br />
            <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=iptables">iptables</span><br />
            <br />
            <strong>2.6.x kernels: （关闭arp查询响应请求）</strong><br />
            net.ipv4.conf.eth0.arp_ignore = 1<br />
            net.ipv4.conf.eth0.arp_announce = 2<br />
            net.ipv4.conf.all.arp_ignore = 1<br />
            net.ipv4.conf.all.arp_announce = 2<br />
            arping tools<br />
            <br />
            <br />
            <strong>二、基础知识及一些要点.</strong><br />
            1、InActConn并不代表错误连接，它是指不活跃连接(Inactive Connections)，<br />
            我们将处于TCP ESTABLISH状态以外的连接都称为不活跃连接，例如处于SYN_RECV状态的连接，处于TIME_WAIT状态的连接等。<br />
            <br />
            2、用四个参数来关闭arp查询响应请求：<br />
            echo 1 &gt; /proc/sys/net/ipv4/conf/lo/arp_ignore<br />
            echo 2 &gt; /proc/sys/net/ipv4/conf/lo/arp_announce<br />
            echo 1 &gt; /proc/sys/net/ipv4/conf/all/arp_ignore<br />
            echo 2 &gt; /proc/sys/net/ipv4/conf/all/arp_announce<br />
            <br />
            3、ipvsadm -L -n --stats<br />
            Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes<br />
            连接数 输入包 输出包 输入<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C1%F7%C1%BF">流量</span> 输出流量<br />
            <br />
            4、注意事项:<br />
            1）在LVS方案中，虚拟ip地址与普通网络接口大大不同，这点需要特别注意。<br />
            虚拟ip地址的广播地址是它本身，子网掩码是255.255.255.255。 为什么要这样呢？因为有若干机器要使用同一个ip地址，<br />
            用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=lvs">lvs</span>将不能正常转发访问请求。<br />
            <br />
            2）假如两台VS之间使用的互备关系，那么当一台VS接管LVS服务时，可能会网络不通，这时因为路由器的MAC<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BB%BA%B4%E6">缓存</span>表里关于vip这个地址的MAC地 址还是被替换的VS的MAC，有两种解决方法，一种是修改新VS的MAC地址，另一种是使用send_arp <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C3%FC%C1%EE">命令</span>（<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=piranha">piranha</span>软件包里带的一个小<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B9%A4%BE%DF">工具</span>） 格式如下：<br />
            send_arp:<br />
            send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr<br />
            这个命令不一定非要在VS上执行，只+要在同一VLAN即可。<br />
            /sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW<br />
            <br />
            5.Virtual Server via Direct Routing（VS/DR）<br />
            VS/DR通过改写请求报文的MAC地址，将请求发送到真实服务器，而真实服务器将响应直接返回给客户。同VS/TUN技术一样，VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销，对集群中的真实服务器也没有必须支持IP隧道协议的要求，但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。<br />
            <br />
            6. LVS <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BE%AD%D1%E9">经验</span>:<br />
            1). LVS调度的最小单位是&ldquo;连接&rdquo;。<br />
            2). 当apache的KeepAlive被设置成Off时，&ldquo;连接&rdquo;才能被较均衡的调度。<br />
            3). 在不指定-p参数时，LVS才真正以&ldquo;连接&rdquo;为单位按&ldquo;权值&rdquo;调度流量。<br />
            4). 在指定了-p参数时，则一个client在一定时间内，将会被调度到同一台RS。<br />
            5). 可以通过&rdquo;ipvsadm &ndash;set tcp tcpfin udp&rdquo;来调整TCP和UDP的超时，让连接淘汰得快一些。<br />
            6). 在NAT<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C4%A3%CA%BD">模式</span>时，RS的PORT参数才有意义。<br />
            7). DR和TUN模式时，InActConn 是没有意义的(Thus the count in the InActConn column for LVS-DR, LVS-Tun is<br />
            inferred rather than real.)<br />
            /sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW<br />
            <br />
            <strong>三、LVS <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D0%D4%C4%DC">性能</span>调优</strong><br />
            <strong>Least services in System or Compile kernel.</strong><br />
            <br />
            <strong>Performace Tuning base LVS:</strong><br />
            LVS self tuning( ipvsadm Timeout (tcp tcpfin udp)).<br />
            ipvsadm -Ln --timeout<br />
            Timeout (tcp tcpfin udp): 900 120 300<br />
            ipvsadm --set tcp tcpfin udp<br />
            <br />
            <br />
            <strong>Improving TCP/IP performance</strong><br />
            net.ipv4.tcp_tw_recyle=1<br />
            net.ipv4.tcp_tw_reuse=1<br />
            net.ipv4.tcp_max_syn_backlog=8192<br />
            net.ipv4.tcp_keepalive_time=1800<br />
            net.ipv4.tcp_fin_timeout=30<br />
            net.core.rmem_max=16777216<br />
            net.core.wmem_max=16777216<br />
            net.ipv4.tcp_rmem=4096 87380 16777216<br />
            net.ipv4.tcp_wmem=4096 65536 16777216<br />
            net.core.netdev_max_backlog=3000</td>
        </tr>
    </tbody>
</table>
<div id="relatedtags">&nbsp;</div>
<script type="text/javascript" src="tag.php?action=relatetag&amp;rtid=2056" reload="1"></script>
</div>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=597</link>
			<title><![CDATA[sysctl.conf优化方案(完整)]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Mon,17 May 2010 11:51:19 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=597</guid>
		<description><![CDATA[<a href="http://blueicer.blog.51cto.com/395686/118394" target="_blank" rel="external">http://blueicer.blog.51cto.com/395686/118394</a><br/><br/>sysctl.conf优化方案-----完整的<br/>关于sysctl.conf的优化方案网上有各种版本方案，大多数都是抄来抄去的，让新人看了很迷茫。下现出一个完整的方案！<br/>###################################################################################<br/>所有rfc相关的选项都是默认启用的，因此网上的那些还自己写rfc支持的都可以扔掉了 <br/>###################################################################################<br/>net.inet.ip.sourceroute=0 <br/>net.inet.ip.accept_sourceroute=0 <br/>############################################################ <br/>通过源路由，攻击者可以尝试到达内部IP地址 --包括RFC1918中的地址，所以 <br/>不接受源路由信息包可以防止你的内部网络被探测。 <br/>################################################################ <br/>net.inet.tcp.dro&#112;_synfin=1 <br/>################################################################## <br/>安全参数，编译内核的时候加了options TCP_Dro&#112;_SYNFIN才可以用，可以阻止某些OS探测。 <br/>################################################################# <br/>kern.maxvnodes=8446 <br/>######################################################### <br/>vnode 是对文件或目录的一种内部表达。 因此， 增加可以被操作系统利用的 vnode 数量将降低磁盘的 I/O。 <br/>一般而言， 这是由操作系统自行完成的，也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈， <br/>而系统的 vnode 不足， 则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。 <br/>要查看当前在用的 vnode 数量： <br/># sysctl vfs.numvnodes <br/>vfs.numvnodes: 91349 <br/>要查看最大可用的 vnode 数量： <br/># sysctl kern.maxvnodes <br/>kern.maxvnodes: 100000 <br/>如果当前的 vnode 用量接近最大值，则将 kern.maxvnodes 值增大 1,000 可能是个好主意。 <br/>您应继续查看 vfs.numvnodes 的数值， 如果它再次攀升到接近最大值的程度， <br/>仍需继续提高 kern.maxvnodes。 在 top(1) 中显示的内存用量应有显著变化， <br/>更多内存会处于活跃 (active) 状态。 <br/>################################################################### <br/><br/>kern.maxproc: 964 <br/>######################################################### <br/>Maximum number of processes <br/>################################################################### <br/>kern.maxprocperuid: 867 <br/>######################################################### <br/>Maximum processes allowed per userid <br/>################################################################### <br/>因为我的maxusers设置的是256，20+16*maxusers＝4116。 <br/>maxprocperuid至少要比maxproc少1，因为init(8) 这个系统程序绝对要保持在运作状态。 <br/>我给它设置的2068。 <br/><br/>kern.maxfiles: 1928 <br/>######################################################### <br/>系统中支持最多同时开启的文件数量，如果你在运行数据库或大的很吃描述符的进程，那么应该设置在20000以上， <br/>比如kde这样的桌面环境，它同时要用的文件非常多。 <br/>一般推荐设置为32768或者65536。 <br/>#################################### <br/>kern.argmax: 262144 <br/>######################################################### <br/>maximum number of bytes (or characters) in an argument list. <br/>命令行下最多支持的参数，比如你在用find命令来批量删除一些文件的时候 <br/>find . -name &#34;*.old&#34; -del&#101;te，如果文件数超过了这个数字，那么会提示你数字太多的。 <br/>可以利用find . -name &#34;*.old&#34; -ok rm {} \;来删除。 <br/>默认的参数已经足够多了，因此不建议再做修改。 <br/>################################################################### <br/>kern.securelevel: -1 <br/>######################################################### <br/>-1：这是系统默认级别，没有提供任何内核的保护错误；&nbsp;&nbsp;<br/>0：基本上作用不多，当你的系统刚启动就是0级别的，当进入多用户模式的时候就自动变成1级了。&nbsp;&nbsp;<br/>1：在这个级别上，有如下几个限制：&nbsp;&nbsp;<br/>　　a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块；&nbsp;&nbsp;<br/>　　b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存；&nbsp;&nbsp;<br/>　　c. 不能直接往已经装在(mounted)的磁盘写东西，也就是不能格式化磁盘，但是可以通过标准的内核接口执行写操作；&nbsp;&nbsp;<br/>　　d. 不能启动X-windows，同时不能使用chflags来修改文件属性；&nbsp;&nbsp;<br/>2：在 1 级别的基础上还不能写没装载的磁盘，而且不能在1秒之内制造多次警告，这个是防止DoS控制台的；&nbsp;&nbsp;<br/>3：在 2 级别的级别上不允许修改IPFW防火墙的规则。&nbsp;&nbsp;<br/>　　如果你已经装了防火墙，并且把规则设好了，不轻易改动，那么建议使用3级别，如果你没有装防火墙，而且还准备装防火墙的话，不建议使用。 <br/>我们这里推荐使用 2 级别，能够避免比较多对内核攻击。 <br/>################################################################### <br/>kern.maxfilesperproc: 1735 <br/>######################################################### <br/>每个进程能够同时打开的最大文件数量，网上很多资料写的是32768 <br/>除非用异步I/O或大量线程，打开这么多的文件恐怕是不太正常的。 <br/>我个人建议不做修改，保留默认。 <br/>################################################################### <br/><br/>kern.ipc.maxsockbuf: 262144 <br/>######################################################### <br/>最大的套接字缓冲区，网上有建议设置为2097152（2M）、8388608（8M）的。 <br/>我个人倒是建议不做修改，保持默认的256K即可，缓冲区大了可能造成碎片、阻塞或者丢包。 <br/>#################################### <br/><br/>kern.ipc.somaxconn: 128 <br/>######################################################### <br/>最大的等待连接完成的套接字队列大小，即并发连接数。 <br/>高负载服务器和受到Dos攻击的系统也许会因为这个队列被塞满而不能提供正常服务。 <br/>默认为128，推荐在1024-4096之间，根据机器和实际情况需要改动，数字越大占用内存也越大。 <br/>#################################### <br/><br/>kern.ipc.nmbclusters: 4800 <br/>######################################################### <br/>这个值用来调整系统在开机后所要分配给网络 mbufs 的 cluster 数量， <br/>由于每个 cluster 大小为 2K，所以当这个值为 1024 时，也是会用到 2MB 的核心内存空间。 <br/>假设我们的网页同时约有 1000 个联机，而 TCP 传送及接收的暂存区大小都是 16K， <br/>则最糟的情况下，我们会需要 (16K+16K) * 1024，也就是 32MB 的空间， <br/>然而所需的 mbufs 大概是这个空间的二倍，也就是 64MB，所以所需的 cluster 数量为 64MB/2K，也就是 32768。 <br/>对于内存有限的机器，建议值是 1024 到 4096 之间，而当拥有海量存储器空间时，我们可以将它设定为 4096 到 32768 之间。 <br/>我们可以使用 netstat 这个指令并加上参数 -m 来查看目前所使用的 mbufs 数量。 <br/>要修改这个值必须在一开机就修改，所以只能在 /boot/loader.conf 中加入修改的设定 <br/>kern.ipc.nmbclusters=32768 <br/>################################################################### <br/><br/>kern.ipc.shmmax: 33554432 <br/>######################################################################################## <br/>共享内存和信号灯(&#34;System VIPC&#34;)如果这些过小的话，有些大型的软件将无法启动 <br/>安装xine和mplayer提示的设置为67108864，即64M， <br/>如果内存多的话，可以设置为134217728，即128M <br/>################################################################### <br/><br/>kern.ipc.shmall: 8192 <br/>######################################################### <br/>共享内存和信号灯(&#34;System VIPC&#34;)如果这些过小的话，有些大型的软件将无法启动 <br/>安装xine和mplayer提示的设置为32768 <br/>################################################################### <br/>kern.ipc.shm_use_phys: 0 <br/>######################################################################################## <br/>如果我们将它设成 1，则所有 System V 共享内存 (share memory，一种程序间沟通的方式)部份都会被留在实体的内存 (physical memory) 中， <br/>而不会被放到硬盘上的 swap 空间。我们知道物理内存的存取速度比硬盘快许多，而当物理内存空间不足时， <br/>部份数据会被放到虚拟的内存上，从物理内存和虚拟内存之间移转的动作就叫作 swap。如果时常做 swap 的动作， <br/>则需要一直对硬盘作 I/O，速度会很慢。因此，如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间， <br/>或者是共享内存空间很大时，我们可以将这个值打开。 <br/>这一项，我个人建议不做修改，除非你的内存非常大。 <br/>################################################################### <br/><br/>kern.ipc.shm_allow_removed: 0 <br/>######################################################################################## <br/>共享内存是否允许移除？这项似乎是在fb下装vmware需要设置为1的，否则会有加载SVGA出错的提示 <br/>作为服务器，这项不动也罢。 <br/>###################################################################<br/> <br/>接上<br/>kern.ipc.numopensockets: 12 <br/>######################################################################################## <br/>已经开启的socket数目，可以在最繁忙的时候看看它是多少，然后就可以知道maxsockets应该设置成多少了。 <br/>#################################### <br/>kern.ipc.maxsockets: 1928 <br/>######################################################################################## <br/>这是用来设定系统最大可以开启的 socket 数目。如果您的服务器会提供大量的 FTP 服务， <br/>而且常快速的传输一些小档案，您也许会发现常传输到一半就中断。因为 FTP 在传输档案时， <br/>每一个档案都必须开启一个 socket 来传输，但关闭 socket 需要一段时间，如果传输速度很快， <br/>而档案又多，则同一时间所开启的 socket 会超过原本系统所许可的值，这时我们就必须把这个值调大一点。 <br/>除了 FTP 外，也许有其它网络程序也会有这种问题。 <br/>然而，这个值必须在系统一开机就设定好，所以如果要修改这项设定，我们必须修改 /boot/loader.conf 才行 <br/>kern.ipc.maxsockets=&#34;16424&#34; <br/>################################################################### <br/>kern.ipc.nsfbufs: 1456 <br/>######################################################################################## <br/>经常使用 sendfile(2) 系统调用的繁忙的服务器，&nbsp;&nbsp;<br/>有必要通过 NSFBUFS 内核选项或者在 /boot/loader.conf (查看 loader(8) 以获得更多细节) 中设置它的值来调节 sendfile(2) 缓存数量。 <br/>这个参数需要调节的普通原因是在进程中看到 sfbufa 状态。sysctl kern.ipc.nsfbufs 变量在内核配置变量中是只读的。&nbsp;&nbsp;<br/>这个参数是由 kern.maxusers 决定的，然而它可能有必要因此而调整。 <br/>在/boot/loader.conf里加入 <br/>kern.ipc.nsfbufs=&#34;2496&#34; <br/>################################################################### <br/><br/>kern.maxusers: 59 <br/>######################################################################################## <br/>maxusers 的值决定了处理程序所容许的最大值，20+16*maxusers 就是你将得到的所容许处理程序。 <br/>系统一开机就必须要有 18 个处理程序 (process)，即便是简单的执行指令 man 又会产生 9 个 process， <br/>所以将这个值设为 64 应该是一个合理的数目。 <br/>如果你的系统会出现 proc table full 的讯息的话，可以就把它设大一点，例如 128。 <br/>除非您的系统会需要同时开启很多档案，否则请不要设定超过 256。 <br/>可以在 /boot/loader.conf 中加入该选项的设定， <br/>kern.maxusers=256 <br/>#################################### <br/>kern.coredump: 1 <br/>######################################################################################## <br/>如果设置为0，则程序异常退出时不会生成core文件，作为服务器，不建议这样。 <br/>#################################### <br/>kern.corefile: %N.core <br/>######################################################################################## <br/>可设置为kern.corefile=&#34;/data/coredump/%U-%P-%N.core&#34; <br/>其中 %U是UID，%P是进程ID，%N是进程名，当然/data/coredump必须是一个实际存在的目录 <br/>#################################### <br/><br/>vm.swap_idle_enabled: 0 <br/>vm.swap_idle_threshold1: 2 <br/>vm.swap_idle_threshold2: 10 <br/>######################### <br/>在有很多用户进入、离开系统和有很多空闲进程的大的多用户系统中很有用。 <br/>可以让进程更快地进入内存，但它会吃掉更多的交换和磁盘带宽。 <br/>系统默认的页面调度算法已经很好了，最好不要更改。 <br/>######################## <br/><br/>vfs.ufs.dirhash_maxmem: 2097152 <br/>######################### <br/>默认的dirhash最大内存,默认2M <br/>增加它有助于改善单目录超过100K个文件时的反复读目录时的性能 <br/>建议修改为33554432（32M） <br/>############################################################ <br/><br/>vfs.vmiodirenable: 1 <br/>################################################<br/>这个变量控制目录是否被系统缓存。大多数目录是小的，在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 (典型的是512字节)。 <br/>当这个变量设置为关闭 (0) 时，缓存器仅仅缓存固定数量的目录，即使您有很大的内存。&nbsp;&nbsp;<br/>而将其开启 (设置为1) 时，则允许缓存器用 VM 页面缓存来缓存这些目录，让所有可用内存来缓存目录。 <br/>不利的是最小的用来缓存目录的核心内存是大于 512 字节的物理页面大小(通常是 4k)。 <br/>我们建议如果您在运行任何操作大量文件的程序时保持这个选项打开的默认值。&nbsp;&nbsp;<br/>这些服务包括 web 缓存，大容量邮件系统和新闻系统。 <br/>尽管可能会浪费一些内存，但打开这个选项通常不会降低性能。但还是应该检验一下。 <br/>################################################################################## <br/><br/>vfs.hirunningspace: 1048576 <br/>########################################################### <br/>这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可， <br/>但当我们有多颗硬盘时，我们可以将它调大为 4MB 或 5MB。 <br/>注意这个设置成很高的值(超过缓存器的写极限)会导致坏的性能。 <br/>不要盲目的把它设置太高！高的数值会导致同时发生的读操作的迟延。 <br/>############################################################ <br/><br/>vfs.write_behind: 1 <br/>######################################################## <br/>这个选项预设为 1，也就是打开的状态。在打开时，在系统需要写入数据在硬盘或其它储存设备上时， <br/>它会等到收集了一个 cluster 单位的数据后再一次写入，否则会在一个暂存区空间有写入需求时就立即写到硬盘上。 <br/>这个选项打开时，对于一个大的连续的文件写入速度非常有帮助。但如果您遇到有很多行程延滞在等待写入动作时，您可能必须关闭这个功能。 <br/>########################################################### <br/>net.local.stream.sendspace: 8192 <br/>################################################################# <br/>本地套接字连接的数据发送空间 <br/>建议设置为65536 <br/>################################################################## <br/>net.local.stream.recvspace: 8192 <br/>################################################################# <br/>本地套接字连接的数据接收空间 <br/>建议设置为65536 <br/>################################################################## <br/><br/>net.inet.ip.portrange.lowfirst: 1023 <br/>net.inet.ip.portrange.lowlast: 600 <br/>net.inet.ip.portrange.first: 49152 <br/>net.inet.ip.portrange.last: 65535 <br/>net.inet.ip.portrange.hifirst: 49152 <br/>net.inet.ip.portrange.hilast: 65535 <br/>################################################## <br/>以上六项是用来控制TCP及UDP所使用的port范围，这个范围被分成三个部份，低范围、预设范围、及高范围。 <br/>这些是你的服务器主动发起连接时的临时端口的范围，预设的已经1万多了，一般的应用就足够了。 <br/>如果是比较忙碌的FTP server，一般也不会同时提供给1万多人访问的， <br/>当然如果很不幸，你的服务器就要提供很多，那么可以修改first的值，比如直接用1024开始 <br/>######################################################## <br/><br/>net.inet.ip.redirect: 1 <br/>######################################################## <br/>设置为0，屏蔽ip重定向功能 <br/>########################################################## <br/>net.inet.ip.rtexpire: 3600 <br/>net.inet.ip.rtminexpire: 10 <br/>####################################################### <br/>很多apache产生的CLOSE_WAIT状态，这种状态是等待客户端关闭，但是客户端那边并没有正常的关闭，于是留下很多这样的东东。 <br/>建议都修改为2 <br/>######################################################## <br/><br/>net.inet.ip.intr_queue_maxlen: 50 <br/>####################################################### <br/>Maximum size of the IP input queue，如果下面的net.inet.ip.intr_queue_dro&#112;s一直在增加， <br/>那就说明你的队列空间不足了，那么可以考虑增加该值。 <br/>########################## <br/>net.inet.ip.intr_queue_dro&#112;s: 0 <br/>#################### <br/>Number of packets dro&#112;ped from the IP input queue,如果你sysctl它一直在增加， <br/>那么增加net.inet.ip.intr_queue_maxlen的值。 <br/>####################### <br/><br/>net.inet.ip.fastforwarding: 0 <br/>############################# <br/>如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表，节约路由的计算时间 <br/>但会需要大量的内核内存空间来保存路由表。 <br/>如果内存够大，打开吧，呵呵 <br/>############################# <br/><br/>net.inet.ip.random_id: 0 <br/>##################### <br/>默认情况下，ip包的id号是连续的，而这些可能会被攻击者利用，比如可以知道你nat后面带了多少主机。 <br/>如果设置成1，则这个id号是随机的，嘿嘿。 <br/>##################### <br/>net.inet.icmp.maskrepl: 0 <br/>############################ <br/>防止广播风暴，关闭其他广播探测的响应。默认即是，无须修改。 <br/>###############################<br/> <br/>net.inet.icmp.icmplim: 200 <br/>############################## <br/>限制系统发送ICMP速率，改为100吧，或者保留也可，并不会给系统带来太大的压力。 <br/>########################### <br/>net.inet.icmp.icmplim_output: 1 <br/>################################### <br/>如果设置成0，就不会看到提示说Limiting icmp unreach response from 214 to 200 packets per second 等等了 <br/>不过禁止输出容易让我们忽视攻击的存在。这个自己看着办吧。 <br/>###################################### <br/>net.inet.icmp.dro&#112;_redirect: 0 <br/>net.inet.icmp.log_redirect: 0 <br/>################################### <br/>设置为1，屏蔽ICMP重定向功能 <br/>################################### <br/>net.inet.icmp.bmcastecho: 0 <br/>############################ <br/>防止广播风暴，关闭广播ECHO响应，默认即是，无须修改。 <br/>############################### <br/><br/>net.inet.tcp.mssdflt: 512 <br/>net.inet.tcp.minmss: 216 <br/>############################### <br/>数据包数据段最小值，以上两个选项最好不动！或者只修改mssdflt为1460，minmss不动。 <br/>############################# <br/><br/>net.inet.tcp.keepidle: 7200000 <br/>###################### <br/>TCP的套接字的空闲时间，默认时间太长，可以改为600000（10分钟）。 <br/>########################## <br/>net.inet.tcp.sendspace: 32768 <br/>########################## <br/>最大的待发送TCP数据缓冲区空间，应用程序将数据放到这里就认为发送成功了，系统TCP堆栈保证数据的正常发送。 <br/>#################################### <br/>net.inet.tcp.recvspace: 65536 <br/>################################### <br/>最大的接受TCP缓冲区空间，系统从这里将数据分发给不同的套接字，增大该空间可提高系统瞬间接受数据的能力以提高性能。 <br/>################################### <br/>这二个选项分别控制了网络 TCP 联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K，而接收暂存区为 64K。 <br/>如果需要加速 TCP 的传输，可以将这二个值调大一点，但缺点是太大的值会造成系统核心占用太多的内存。 <br/>如果我们的机器会同时服务数百或数千个网络联机，那么这二个选项最好维持默认值，否则会造成系统核心内存不足。 <br/>但如果我们使用的是 gigabite 的网络，将这二个值调大会有明显效能的提升。 <br/>传送及接收的暂存区大小可以分开调整， <br/>例如，假设我们的系统主要做为网页服务器，我们可以将接收的暂存区调小一点，并将传送的暂存区调大，如此一来，我们就可以避免占去太多的核心内存空间。 <br/>net.inet.udp.maxdgram: 9216 <br/>######################### <br/>最大的发送UDP数据缓冲区大小，网上的资料大多都是65536，我个人认为没多大必要， <br/>如果要调整，可以试试24576。 <br/>############################## <br/>net.inet.udp.recvspace: 42080 <br/>################## <br/>最大的接受UDP缓冲区大小，网上的资料大多都是65536，我个人认为没多大必要， <br/>如果要调整，可以试试49152。 <br/>####################### <br/>以上四项配置通常不会导致问题，一般说来网络流量是不对称的，因此应该根据实际情况调整，并观察其效果。 <br/>如果我们将传送或接收的暂存区设为大于 65535，除非服务器本身及客户端所使用的操作系统都支持 TCP 协议的 windows scaling extension (请参考 RFC 1323 文件)。 <br/>FreeBSD默认已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 选项)。 <br/>################################################### <br/><br/>net.inet.tcp.log_in_vain: 0 <br/>################## <br/>记录下任何TCP连接，这个一般情况下不应该更改。 <br/>#################### <br/>net.inet.tcp.blackhole: 0 <br/>################################## <br/>建议设置为2，接收到一个已经关闭的端口发来的所有包，直接dro&#112;，如果设置为1则是只针对TCP包 <br/>##################################### <br/>net.inet.tcp.delayed_ack: 1 <br/>########################### <br/>当一台计算机发起TCP连接请求时，系统会回应ACK应答数据包。 <br/>该选项设置是否延迟ACK应答数据包，把它和包含数据的数据包一起发送。 <br/>在高速网络和低负载的情况下会略微提高性能，但在网络连接较差的时候， <br/>对方计算机得不到应答会持续发起连接请求，反而会让网络更加拥堵，降低性能。 <br/>因此这个值我建议您看情况而定，如果您的网速不是问题，可以将封包数量减少一半 <br/>如果网络不是特别好，那么就设置为0，有请求就先回应，这样其实浪费的网通、电信的带宽速率而不是你的处理时间 <br/>############################ <br/><br/>net.inet.tcp.inflight.enable: 1 <br/>net.inet.tcp.inflight.debug: 0 <br/>net.inet.tcp.inflight.rttthresh: 10 <br/>net.inet.tcp.inflight.min: 6144 <br/>net.inet.tcp.inflight.max: 1073725440 <br/>net.inet.tcp.inflight.stab: 20 <br/>########################### <br/>限制 TCP 带宽延迟积和 NetBSD 的 TCP/Vegas 类似。&nbsp;&nbsp;<br/>它可以通过将 sysctl 变量 net.inet.tcp.inflight.enable 设置成 1 来启用。&nbsp;&nbsp;<br/>系统将尝试计算每一个连接的带宽延迟积，并将排队的数据量限制在恰好能保持最优吞吐量的水平上。 <br/>这一特性在您的服务器同时向使用普通调制解调器，千兆以太网，乃至更高速度的光与网络连接 (或其他带宽延迟积很大的连接) 的时候尤为重要， <br/>特别是当您同时使用滑动窗缩放，或使用了大的发送窗口的时候。&nbsp;&nbsp;<br/>如果启用了这个选项，您还应该把 net.inet.tcp.inflight.debug 设置为 0 (禁用调试)， <br/>对于生产环境而言， 将 net.inet.tcp.inflight.min 设置成至少 6144 会很有好处。&nbsp;&nbsp;<br/>然而， 需要注意的是，这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。 <br/>这个限制特性减少了在路由和交换包队列的堵塞数据数量，也减少了在本地主机接口队列阻塞的数据的数量。 <br/>在少数的等候队列中、交互式连接，尤其是通过慢速的调制解调器，也能用低的 往返时间操作。 <br/>但是，注意这只影响到数据发送 (上载/服务端)。对数据接收(下载)没有效果。 <br/>调整 net.inet.tcp.inflight.stab 是 不 推荐的。 <br/>这个参数的默认值是 20，表示把 2 个最大包加入到带宽延迟积窗口的计算中。&nbsp;&nbsp;<br/>额外的窗口似的算法更为稳定，并改善对于多变网络环境的相应能力，&nbsp;&nbsp;<br/>但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 inflight 算法低许多)。&nbsp;&nbsp;<br/>对于这些情形， 您可能会希望把这个参数减少到 15， 10， 或 5；&nbsp;&nbsp;<br/>并可能因此而不得不减少 net.inet.tcp.inflight.min (比如说， 3500) 来得到希望的效果。 <br/>减少这些参数的值， 只应作为最后不得已时的手段来使用。 <br/>############################ <br/>net.inet.tcp.syncookies: 1 <br/>######################### <br/>SYN cookies是一种用于通过选择加密的初始化TCP序列号，可以对回应的包做验证来降低SYN&#39;洪水&#39;攻击的影响的技术。 <br/>默认即是，不需修改 <br/>######################## <br/><br/>net.inet.tcp.msl: 30000 <br/>####################### <br/>这个值网上很多文章都推荐的7500， <br/>还可以改的更小一些(如2000或2500)，这样可以加快不正常连接的释放过程(三次握手2秒、FIN_WAIT4秒)。 <br/>######################### <br/>net.inet.tcp.always_keepalive: 1 <br/>########################### <br/>帮助系统清除没有正常断开的TCP连接，这增加了一些网络带宽的使用，但是一些死掉的连接最终能被识别并清除。 <br/>死的TCP连接是被拨号用户存取的系统的一个特别的问题，因为用户经常断开modem而不正确的关闭活动的连接。 <br/>############################# <br/>net.inet.udp.checksum: 1 <br/>######################### <br/>防止不正确的udp包的攻击，默认即是，不需修改 <br/>############################## <br/>net.inet.udp.log_in_vain: 0 <br/>####################### <br/>记录下任何UDP连接,这个一般情况下不应该修改。 <br/>####################### <br/>net.inet.udp.blackhole: 0 <br/>#################### <br/>建议设置为1，接收到一个已经关闭的端口发来的所有UDP包直接dro&#112; <br/>####################### <br/><br/>net.inet.raw.maxdgram: 8192 <br/>######################### <br/>Maximum outgoing raw IP datagram size <br/>很多文章建议设置为65536，好像没多大必要。 <br/>###################################### <br/>net.inet.raw.recvspace: 8192 <br/>###################### <br/>Maximum incoming raw IP datagram size <br/>很多文章建议设置为65536，好像没多大必要。 <br/>####################### <br/>net.link.ether.inet.max_age: 1200 <br/>#################### <br/>调整ARP清理的时间，通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。 <br/>这项似乎大家都未做改动，我建议不动或者稍微减少，比如300（HP-UX默认的5分钟） <br/>####################### <br/>net.inet6.ip6.redirect: 1 <br/>############################### <br/>设置为0，屏蔽ipv6重定向功能 <br/>########################### <br/><br/>net.isr.direct: 0 <br/>######################################################### <br/>所有MPSAFE的网络ISR对包做立即响应,提高网卡性能，设置为1。 <br/>#################################### <br/><br/>hw.ata.wc: 1 <br/>##################### <br/>这个选项用来打开 IDE 硬盘快取。当打开时，如果有数据要写入硬盘时，硬盘会假装已完成写入，并将数据快取起来。 <br/>这种作法会加速硬盘的存取速度，但当系统异常关机时，比较容易造成数据遗失。 <br/>不过由于关闭这个功能所带来的速度差异实在太大，建议还是保留原本打开的状态吧，不做修改。 <br/>################### <br/><br/>security.bsd.see_other_uids: 1 <br/>security.bsd.see_other_gids: 1 <br/>##################### <br/>不允许用户看到其他用户的进程,因此应该改成0，]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=596</link>
			<title><![CDATA[ linux并发连接上百万的配置]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Mon,17 May 2010 11:45:16 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=596</guid>
		<description><![CDATA[原文链接：<a href="http://bbs.linuxtone.org/thread-1516-1-1.html" target="_blank" rel="external">http://bbs.linuxtone.org/thread-1516-1-1.html</a> IT运维专家网--&#34;自由平等，互助分享！&#34; linux并发连接上百万的配置<br/>从 七猫的藏经阁 作者：Diviner<br/>To support over 500k users, you *need*<br/><br/>- A 64 bits hardware/kernel (AMD64, Opterons)<br/>- At least 8GB of ram<br/>- A recent linux kernel (2.6.x)<br/><br/>About tuning, I prefer to not fully disclose them because servers are targets of many attacks, so it&#39;s better not help hackers.<br/><br/>The most touchy thing is the IP route cache : You have to tune it o&#114; else the machine dro&#112;s many connections<br/><br/>(hint : rhash_entries=... in the boot append string)<br/>hints :<br/>echo 1 &gt; /proc/sys/net/ipv4/route/gc_interval<br/>echo 150 &gt;/proc/sys/net/ipv4/route/gc_timeout<br/>echo 2 &gt;/proc/sys/net/ipv4/route/gc_elasticity<br/><br/>- Use of hugeTLB pages<br/>hint :<br/>echo xxx &gt;/proc/sys/vm/nr_hugepages<br/><br/>Tune tcp :<br/>echo &#34;4096 49152 131072&#34; &gt;/proc/sys/net/ipv4/tcp_wmem<br/>echo xxxx &gt;/proc/sys/net/ipv4/tcp_max_syn_backlog<br/>echo xxxx &gt;/proc/sys/net/core/somaxconn<br/>echo 1200000 &gt; /proc/sys/net/ipv4/tcp_max_tw_buckets<br/>echo 7 &gt;/proc/sys/net/ipv4/tcp_retries2<br/>echo &#34;600000 650000 700000&#34; &gt;/proc/sys/net/ipv4/tcp_mem<br/>echo 0 &gt;/proc/sys/net/ipv4/tcp_timestamps<br/>echo 0 &gt;/proc/sys/net/ipv4/tcp_window_scaling<br/>echo 0 &gt;/proc/sys/net/ipv4/tcp_sack<br/>echo 330000 &gt;/proc/sys/net/ipv4/tcp_max_orphans<br/>echo &#34;10000 62000&#34; &gt;/proc/sys/net/ipv4/ip_local_port_range<br/><br/><br/>others :<br/>echo 1300000 &gt;/proc/sys/fs/file-max <br/><br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=595</link>
			<title><![CDATA[Apache的Order Allow,Deny 详解]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Mon,17 May 2010 10:47:37 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=595</guid>
		<description><![CDATA[FROM:<a href="http://hi.baidu.com/stpehenfeng/blog/item/4fdb823387cc49ff1b4cff2f.html" target="_blank" rel="external">http://hi.baidu.com/stpehenfeng/blog/item/4fdb823387cc49ff1b4cff2f.html</a><br/> <br/>Allow和Deny可以用于apache的conf文件或者.htaccess文件中（配合Directory, Location, Files等），用来控制目录和文件的访问授权。<br/>所以，最常用的是：<br/>o&#114;der Deny,Allow<br/>Allow from All<br/><br/>注意“Deny,Allow”中间只有一个逗号，也只能有一个逗号，有空格都会出错；单词的大小写不限。上面设定的含义是先设定“先检查禁止设定，没有禁止的全部允许”，而第二句没有Deny，也就是没有禁止访问的设定，直接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置，开放所有内容的访问权。<br/><br/>按照上面的解释，下面的设定是无条件禁止访问：<br/>o&#114;der Allow,Deny<br/>Deny from All<br/><br/>如果要禁止部分内容的访问，其他的全部开放：<br/>o&#114;der Deny,Allow<br/>Deny from ip1 ip2<br/>或者<br/>o&#114;der Allow,Deny<br/>Allow from all<br/>Deny from ip1 ip2<br/><br/>apache会按照order决定最后使用哪一条规则，比如上面的第二种方式，虽然第二句allow允许了访问，但由于在order中allow不是最后规则，因此还需要看有没有deny规则，于是到了第三句，符合ip1和ip2的访问就被禁止了。注意，order决定的“最后”规则非常重要，下面是两个错误的例子和改正方式：<br/><br/>o&#114;der Deny,Allow<br/>Allow from all<br/>Deny from domain.org<br/>错误：想禁止来自domain.org的访问，但是deny不是最后规则，apache在处理到第二句allow的时候就已经匹配成功，根本就不会去看第三句。<br/>解决方法：Order Allow,Deny，后面两句不动，即可。<br/><br/>o&#114;der Allow,Deny<br/>Allow from ip1<br/>Deny from all<br/>错误：想只允许来自ip1的访问，但是，虽然第二句中设定了allow规则，由于order中deny在后，所以会以第三句deny为准，而第三句的范围中又明显包含了ip1（all include ip1），所以所有的访问都被禁止了。<br/>解决方法一：直接去掉第三句。<br/>解决方法二：<br/>o&#114;der Deny,Allow<br/>Deny from all<br/>Allow from ip1<br/><br/> <br/><br/>下面是测试过的例子：<br/>--------------------------------<br/>o&#114;der deny,allow<br/>allow from all<br/>deny from 219.204.253.8<br/>#全部都可以通行<br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from 219.204.253.8<br/>allow from all<br/>#全部都可以通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from 219.204.253.8<br/>allow from all<br/>#只有219.204.253.8不能通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from all<br/>deny from 219.204.253.8<br/>#只有219.204.253.8不能通行<br/>-------------------------------<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from all<br/>allow from 219.204.253.8<br/>#全部都不能通行 <br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from 219.204.253.8<br/>deny from all<br/>#全部都不能通行 <br/>-------------------------------<br/>o&#114;der deny,allow<br/>allow from 219.204.253.8<br/>deny from all<br/>#只允许219.204.253.8通行 <br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from all<br/>allow from 219.204.253.8<br/>#只允许219.204.253.8通行 <br/>-------------------------------<br/>--------------------------------<br/>o&#114;der deny,allow<br/>#全部都可以通行（默认的）<br/>-------------------------------<br/>o&#114;der allow,deny<br/>#全部都不能通行（默认的）<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from all<br/>#全部都不能通行<br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from all<br/>#全部都不能通行<br/>-------------------------------<br/>对于上面两种情况，如果换成allow from all，则全部都可以通行！<br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from 219.204.253.8<br/>#只有219.204.253.8不能通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from 219.204.253.8<br/>#全部都不能通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from 219.204.253.8<br/>#只允许219.204.253.8通行<br/>-------------------------------<br/>o&#114;der deny,allow<br/>allow from 219.204.253.8<br/>#全部都可以通行<br/>-------------------------------<br/>-------------------------------<br/>o&#114;der deny,allow<br/>allow from 218.20.253.2<br/>deny from 218.20<br/>#代表拒绝218.20开头的IP，但允许218.20.253.2通过；而其它非218.20开头的IP也都允许通过。<br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from 218.20.253.2<br/>deny from 218.20<br/>#和上面的差不多，只是掉换的order语句中的allow、deny先后顺序，但最终结果表示全部都拒绝！<br/><br/>form:<a href="http://hi.baidu.com/enjoypain/blog/item/f48c7aecdba298d12f2e21ac.html" target="_blank" rel="external">http://hi.baidu.com/enjoypain/blog/item/f48c7aecdba298d12f2e21ac.html</a><br/>&nbsp;&nbsp;<br/>前段时间做了个Apache的HTTP代理服务器，其中的order allow，deny这部分弄的不太懂，于是上网找资料看，谁知道越看越糊涂，其中有些难以分辨对错甚至是误导。就像破解windows系统密码的一些文章那样，很多都是人云亦云的，并没有经过测试。废话少说，先把我经过测试后分析总结出来的结论show出来，相信这对大家的理解非常有帮助。<br/><br/> <br/><br/>总则——<br/><br/>影响最终判断结果的只有两点：<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&#114;der语句中allow、deny的先后顺序；<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow、deny语句中各自包含的范围。<br/><br/> <br/><br/>温馨提醒——<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改完配置后要保存好并重启Apache服务，配置才能生效；<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开头字母不分大小写； <br/><br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow、deny语句不分先后顺序，谁先谁后不影响最终判断结果；但都会被判断到；<br/><br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&#114;der语句中，“allow,deny”之间“有且只有”一个逗号（英文格式的），而且先后顺序很重要；<br/><br/>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache有一条缺省规则，“order allow,deny”本身就默认了拒绝所有的意思，因为deny在allow的后面；同理，“order deny,allow”本身默认的是允许所有；当然，最终判断结果还要综合下面的allow、deny语句中各自所包含的范围；（也就是说order语句后面可以没有allow、deny语句）<br/><br/>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow、deny语句中，第二个单词一定是“from”，否则Apache会因错而无法启动，<br/><br/>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “order allow,deny”代表先判断allow语句再判断deny语句，反之亦然。<br/><br/> <br/><br/>上面说的都是要记住的，而下面说的是我独创的理解方法。如果有人看了而没有豁然开朗的感觉，那算是我的失败！<br/><br/> <br/><br/>判断原则分4步走——<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先判断默认的；<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后判断逗号前的；<br/><br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后判断逗号后的；<br/><br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最终按顺序叠加而得出判断结果。<br/><br/> <br/><br/>上面三点我说的简单而形象，主要是为了便于记忆。暂时不理解不要紧，继续看下面详细的解说自然会明白。下面以一个普通例子来做解释——<br/><br/>o&#114;der deny,allow<br/><br/>allow from 218.20.253.2<br/><br/>deny from 218.20<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所谓“首先判断默认的”，就是判断“order deny,allow”这句，它默认是允许所有；<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所谓“然后判断逗号前的”，因为在本例子中的order语句里面，deny在逗号的前面，所以现在轮到判断下面的deny语句了——“deny from 218.20”；<br/><br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所谓“最后判断逗号后的”，因为在本例子中的order语句里面，allow在逗号的后面，所以最后轮到判断下面的allow语句了——“allow from 218.20.253.2”。<br/><br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所谓“最终按顺序叠加而得出判断结果”，这是一个形象化了的说法，我把每一步判断都看作一个“不透明的图层”，然后一步步按顺序叠加上去，最终得出的“图像”就是判断结果。<br/><br/> <br/><br/>用过作图软件的人应该都知道“图层”是怎么回事，我估计Apache关于order allow deny这方面的设计理念和photoshop等作图软件关于图层的设计理念是一样的。即“游戏规则”是一样的。<br/><br/>那么上面的例子就可以是这么一个步骤和图像——<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先画一个白色的大圆，代表“order deny,allow”语句，默认意思是允许所有；<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后画一个小一点的黑色圆，代表“deny from 218.20”语句，意思是拒绝所有以218.20开头的IP，放进白色的大圆里面；<br/><br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后再画一个白色的圆，代表“allow from 218.20.253.2”语句，意思是允许218.20.253.2通过，放在黑色圆的上面。<br/><br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到此为止，我们已经可以看到一个结果了，白色大圆上面有一个黑色圆，黑色圆上面还有一个白色圆。最后，我们所能看到的黑色部分就是拒绝通行的，剩下的白色部分都是允许通行的。判断的结果就是这么简单形象！<br/><br/> <br/><br/>如果不懂的用作图软件，我们再来个非常贴近生活的比喻——<br/><br/>把上面的例子改动一点点，以便更好的理解：<br/><br/>o&#114;der deny,allow<br/><br/>allow from 218.20.253.2<br/><br/>deny from 219.30<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先拿一张A4白纸，代表第order语句，意思是允许全部；<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后拿一张黑色纸剪一个圆，放在A4纸里面的某个位置上，代表deny语句，意思是拒绝所有以219.30开头的IP；<br/><br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后拿白纸再剪一个圆，放在黑色圆的旁边，代表allow语句，意思是允许218.20.253.2通过；注意，这个例子不是放进黑色圆里面了，因为deny和allow语句不再有相互包含的关系了。<br/><br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A4纸上面有一个黑色圆和一个白色圆，结果自然很明显了。不过白色的A4纸上再放一个白色的圆，显然是多余的了，因为大家都是白色的，都代表允许，所以就重复了，可以去掉白色的圆而不会影响判断结果。<br/><br/> <br/><br/>如果看到这里还没明白，那一定是我还有什么没说清楚的。那么请好好分析我所做过的测试例子，将在最后列出来。<br/><br/>在这里再啰嗦一下，allow、deny语句后面跟的参数有多种形式，有不同的表达方式，我在网上看到的做法是deny from IP1 IP2 IP3或allow from domain.com等。其它的表达方式大家再找别的资料看吧。我想说的是另一种表达方式：<br/><br/>o&#114;der deny,allow<br/><br/>allow from IP1 IP2<br/><br/>allow from domain.info<br/><br/>allow from 219.20.55.0/24<br/><br/>deny from all<br/><br/>我没具体验证过这是否对，不过这样是可以正常启动Apache服务的，按道理应该是正确的表达方式。哈哈，像我这样的入门者只能这样了，还希望大家多多指教！<br/><br/>下面是测试过的例子：<br/>--------------------------------<br/>o&#114;der deny,allow<br/>allow from all<br/>deny from 219.204.253.8<br/>#全部都可以通行<br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from 219.204.253.8<br/>allow from all<br/>#全部都可以通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from 219.204.253.8<br/>allow from all<br/>#只有219.204.253.8不能通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from all<br/>deny from 219.204.253.8<br/>#只有219.204.253.8不能通行<br/>-------------------------------<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from all<br/>allow from 219.204.253.8<br/>#全部都不能通行 <br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from 219.204.253.8<br/>deny from all<br/>#全部都不能通行 <br/>-------------------------------<br/>o&#114;der deny,allow<br/>allow from 219.204.253.8<br/>deny from all<br/>#只允许219.204.253.8通行 <br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from all<br/>allow from 219.204.253.8<br/>#只允许219.204.253.8通行 <br/>-------------------------------<br/>--------------------------------<br/>o&#114;der deny,allow<br/>#全部都可以通行（默认的）<br/>-------------------------------<br/>o&#114;der allow,deny<br/>#全部都不能通行（默认的）<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from all<br/>#全部都不能通行<br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from all<br/>#全部都不能通行<br/>-------------------------------<br/>对于上面两种情况，如果换成allow from all，则全部都可以通行！<br/>-------------------------------<br/>o&#114;der deny,allow<br/>deny from 219.204.253.8<br/>#只有219.204.253.8不能通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>deny from 219.204.253.8<br/>#全部都不能通行<br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from 219.204.253.8<br/>#只允许219.204.253.8通行<br/>-------------------------------<br/>o&#114;der deny,allow<br/>allow from 219.204.253.8<br/>#全部都可以通行<br/>-------------------------------<br/>-------------------------------<br/>o&#114;der deny,allow<br/>allow from 218.20.253.2<br/>deny from 218.20<br/>#代表拒绝218.20开头的IP，但允许218.20.253.2通过；而其它非218.20开头的IP也都允许通过。<br/>-------------------------------<br/>o&#114;der allow,deny<br/>allow from 218.20.253.2<br/>deny from 218.20<br/>#和上面的差不多，只是掉换的order语句中的allow、deny先后顺序，但最终结果表示全部都拒绝！<br/><br/> <br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=594</link>
			<title><![CDATA[LAMP 安全设置]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Mon,17 May 2010 09:35:46 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=594</guid>
		<description><![CDATA[ lamp安全加固<br/>本文来自: IT运维专家网(LinuxTone.Org) 作者: kindle 日期: 前天 16:12 阅读: 103 人 打印 收藏 <br/>lamp, 加固<br/>原文链接：<a href="http://bbs.linuxtone.org/thread-6253-1-1.html" target="_blank" rel="external">http://bbs.linuxtone.org/thread-6253-1-1.html</a> IT运维专家网--&#34;自由平等，互助分享！&#34; 本帖最后由 kindle 于 2010-5-15 23:46 编辑 <br/><br/>新人报道第一贴，发个以前自己总结的文章首先参考<br/>Securing_&amp;_Hardening_Linux_v1.0<br/>L.A.M.P环境配置文档更新<br/>CentOS下Apache 2.x的安装、优化及安全设置<br/>做完配置，接下来开始入正题<br/>﻿apache方面:<br/>1.修改banner<br/>编译源代码，修改默认的banner<br/>ServerTokens ProductOnly<br/>ServerSignature Off<br/>在apache的源码包中找到ap_release.h将<br/>#define AP_SERVER_BASEPRODUCT “Apache”<br/>修改为<br/>#define AP_SERVER_BASEPRODUCT “Microsoft-IIS/6.0”<br/>os/unix下的os.h文件<br/>#define PLATFORM “Unix”<br/>修改为<br/>#define PLATFORM “Win32“<br/>2.修改默认的http状态响应码404,503等默认页面<br/>3.Apache的访问权限控制<br/>htpasswd -b -c /(存放密码文件路径)/.htpasswd username password<br/>Alias /hack “/var/www/html/hack/”<br/>&lt;Directory “/var/www/html/hack”&gt;<br/>authname “test”<br/>authtype basic<br/>authuserfile /var/www/html/hack/.htpasswd<br/>require user kindle<br/>&lt;/Directory&gt;<br/>4.关闭危险指令<br/>清除FollowSymlinks指令<br/>关闭索引目录<br/>Options Indexes FollowSymLinks<br/>关闭CGI执行程序<br/>5.open_basedir 限制目录<br/>用法:php_admin_value open_basedir /var/www<br/>php_admin_value open_basedir 引起的上传文件失败解决方法<br/>将上传文件的临时目录加入到php_admin_value open_basedir后面，最后看起来是这样的：<br/>&lt;VirtualHost *:80&gt;<br/>php_admin_value open_basedir “/usr/local/apache/htdocs/www/:/tmp/”<br/>&lt;/VirtualHost&gt;<br/>注意：两个目录之间是冒号隔开。<br/>把PHP脚本操作限制在web目录可以避免程序员使用copy函数把系统文件拷贝到web目录。move_uploaded_file不受open_basedir的限制，所以不必修改php.ini里upload_tmp_dir的值。<br/>6.掌握Apache的Order Allow Deny判断原则<br/>1. 首先判断默认的；<br/>2. 然后判断逗号前的；<br/>3. 最后判断逗号后的；<br/>4. 最终按顺序叠加而得出判断结果。<br/>ex:<br/>apache的php扩展名解析漏洞<br/>&lt;Files ~ ”\.(php.|php3.)”&gt;<br/>o&#114;der Allow,Deny<br/>Deny from all<br/>&lt;/Files&gt;<br/>apache设置上传目录无执行权限<br/>&lt;Directory “/www/home/upload”&gt;<br/>&lt;Files ~ “.php”&gt;<br/>o&#114;der allow,deny<br/>Deny from all<br/>&lt;/Files&gt;<br/>&lt;/Directory&gt;<br/>7.mod_rewrite重写URL<br/>重写规则的作用范围<br/>1．使用在Apache主配置文件httpd.conf中。<br/>2．使用在httpd.conf里定义的配置中。<br/>3．使用在基本目录的跨越配置文件.htaccess中。<br/>1.url重定向80到443端口<br/>RewriteEngine on<br/>RewriteCond %{SERVER_PORT} !^443$<br/>RewriteRule ^/?(.*)$ <a href="https://www.kindle.com/" target="_blank" rel="external">https://www.kindle.com/</a>$1 [L,R]<br/>含义是这样的：为了让用户访问传统的<a href="http://" target="_blank" rel="external">http://</a>转到<a href="https://" target="_blank" rel="external">https://</a>上来，用了一下rewrite规则:<br/>第一句：启动rewrite引擎<br/>第二句：rewrite的条件是访问的服务器端口不是443端口<br/>第三句：这是正则表达式，^是开头，$是结束，/?表示有没有/都可以（0或1个），(.*)是任何数量的任意字符<br/>整句的意思是讲：启动rewrite模块，将所有访问非443端口的请求，url地址内容不变，将<a href="http://" target="_blank" rel="external">http://</a>变成<a href="https://" target="_blank" rel="external">https://</a><br/>9.Speling模块去除url大小写<br/>确认speling模块存在并已加载<br/>启动speling<br/>&lt;Directory “/usr/local/downloads”&gt;<br/>CheckSpelling .<br/>AllowOverride None<br/>o&#114;der allow,deny<br/>Allow from all<br/>&lt;/Directory&gt;<br/>8. Limit模块限制IP连接数<br/>下载模块 <a href="http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz" target="_blank" rel="external">http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz</a><br/>安装:<br/>tar zxvf mod_limitipconn-0.04.tar.gz<br/>cd mod_limitipconn-0.04<br/>make APXS=/usr/local/apache/bin/apxs&nbsp;&nbsp; ß—–这里要按你自己的路径设置<br/>make install APXS=/usr/local/apache/bin/apxs ß—–这里要按你自己的路径设置<br/>编辑httpd.conf<br/>添加<br/>全局变量:<br/>&lt; IfModule mod_limitipconn.c &gt;<br/>&lt; Location / &gt;&nbsp;&nbsp;&nbsp;&nbsp;# 所有虚拟主机的/目录<br/>MaxConnPerIP 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 每IP只允许3个并发连接<br/>NoIPLimit image/*&nbsp;&nbsp; # 对图片不做IP限制<br/>&lt; /Location &gt;<br/>&lt; Location /mp3 &gt;&nbsp;&nbsp; # 所有主机的/mp3目录<br/>MaxConnPerIP 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 每IP只允许一个连接请求<br/>OnlyIPLimit audio/mpeg video&nbsp;&nbsp;&nbsp;&nbsp; # 该限制只对视频和音频格式的文件<br/>&lt; /Location &gt;<br/>&lt; /IfModule &gt;<br/>9.让apache支持安全HTTPS协议<br/>yum -y install mod_ssl<br/>cd /etc/httpd/conf&nbsp;&nbsp;&nbsp;&nbsp; 进入HTTP服务器配置文件所在目录<br/>rm -rf ssl.*/server.*&nbsp;&nbsp; 删除默认或残留的服务器证书相关文件<br/>rpm -qa |grep openssl<br/>openssl genrsa -out www.kindle.com.key 1024 建立服务器密钥<br/>openssl req -new –key www.kindle.com.key -out www.kindle.com.csr 建立服务器公钥<br/>openssl x509 -req -days 365 -in www.kindle.com.csr -signkey www.kindle.com.key -out www.kindle.com.crt&nbsp;&nbsp; 建立服务器证书<br/>/etc/rc.d/init.d/httpd restart&nbsp;&nbsp;重启服务<br/>netstat -ntpl |grep 443<br/>可以到<a href="http://www.startssl.com" target="_blank" rel="external">http://www.startssl.com</a>获取合法证书(免费)<br/>10.安装配置mod_security<br/>下载：<a href="http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz" target="_blank" rel="external">http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz</a><br/><a href="http://fedoranews.org/jorge/mod_security/mod_security.conf" target="_blank" rel="external">http://fedoranews.org/jorge/mod_security/mod_security.conf</a><br/>安装：下载到/opt/soft目录下。<br/># tar –zxvf modsecurity-1.8.7.tar.gz<br/># cd modsecurity-1.8.7<br/>#cd apache2<br/># /opt/apache/bin/ apxs -cia mod_security.c<br/>#copy mod_security.conf /opt/apache/conf<br/>配置：<br/>在/opt/apache/conf/httpd.conf中添加下面一行：<br/>Include conf/mod_security.conf<br/>/opt/apache/bin/apachectl stop<br/>/opt/apache/bin/apachectl startssl<br/>更详细的mod_security的配置<br/><a href="http://www.modsecurity.org/docum" target="_blank" rel="external">http://www.modsecurity.org/docum</a> ... ultipage/index.html<br/>Php方面:<br/>1.打开php的安全模式<br/>php的安全模式是个非常重要的内嵌的安全机制，能够控制一些php中的函数，比如system()，同时把很多文件操作函数进行了权限控制，也不允许对某些关键文件的文件，比如/etc/passwd但是默认的php.ini是没有打开安全模式的，我们把它打开：safe_mode = on<br/>当safe_mode打开时，safe_mode_gid被关闭，那么php脚本能够对文件进行访问，而且相同组的用户也能够对文件进行访问。建议设置为：safe_mode_gid = off<br/>如果不进行设置，可能我们无法对我们服务器网站目录下的文件进行操作了，比如我们需要对文件进行操作的时候。<br/>2.安全模式下执行程序主目录<br/>如果安全模式打开了，但是却是要执行某些程序的时候，可以指定要执行程序的主目录:safe_mode_exec_dir = D:/usr/bin<br/>一般情况下是不需要执行什么程序的，所以推荐不要执行系统程序目录，可以指向一个目录，然后把需要执行的程序拷贝过去，比如：safe_mode_exec_dir = D:/tmp/cmd<br/>但是，我更推荐不要执行任何程序，那么就可以指向我们网页目录：<br/>safe_mode_exec_dir = D:/usr/www<br/>3.安全模式下包含文件<br/>如果要在安全模式下包含某些公共文件，那么就修改一下选项：<br/>safe_mode_include_dir = D:/usr/www/include/<br/>其实一般php脚本中包含文件都是在程序自己已经写好了，这个可以根据具体需要设置。<br/>4.控制php脚本能访问的目录<br/>使用open_basedir选项能够控制PHP脚本只能访问指定的目录，这样能够避免PHP脚本访问.不应该访问的文件，一定程度上限制了phpshell的危害，我们一般可以设置为只能访问网站目录：<br/>open_basedir = /var/www/html<br/>5.关闭危险函数<br/>如果打开了安全模式，那么函数禁止是可以不需要的，但是我们为了安全还是考虑进去。比如，我们觉得不希望执行包括system()等在那的能够执行命令的php函数，或者能够查看php信息的phpinfo()等函数，那么我们就可以禁止它们：<br/>disable_functions = system,passthru,exec,shell_exec,popen,phpinfo<br/>如果你要禁止任何文件和目录的操作，那么可以关闭很多文件操作<br/>disable_functions = phpinfo,exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source<br/>以上只是列了部分不叫常用的文件处理函数，你也可以把上面执行命令函数和这个函数结合，<br/>就能够抵制大部分的phpshell了。<br/>注:disable_classes可以禁用某些类，如果有多个用逗号分隔类名<br/>6.关闭PHP版本信息在http头中的泄漏<br/>我们为了防止黑客获取服务器中php版本的信息，可以关闭该信息斜路在http头中：<br/>expose_php = Off<br/>比如黑客在 telnet www.12345.com 80 的时候，那么将无法看到PHP的信息。<br/>7.关闭注册全局变量<br/>在PHP中提交的变量，包括使用POST或者GET提交的变量，都将自动注册为全局变量，能够直接访问，这是对服务器非常不安全的，所以我们不能让它注册为全局变量，就把注册全局变量选项关闭：<br/>register_globals = Off<br/>当然，如果这样设置了，那么获取对应变量的时候就要采用合理方式，比如获取GET提交的变量var，那么就要用$_GET[&#39;var&#39;]来进行获取，这个php程序员要注意。<br/>8.打开magic_quotes_gpc来防止SQL注入<br/>SQL注入是非常危险的问题，小则网站后台被入侵，重则整个服务器沦陷，所以一定要小心。php.ini中有一个设置：<br/>magic_quotes_gpc = Off<br/>这个默认是关闭的，如果它打开后将自动把用户提交对sql的查询进行转换，比如把 ‘ 转为 \’等，这对防止sql注射有重大作用。所以我们推荐设置为：<br/>magic_quotes_gpc = On<br/>9.错误信息控制<br/>一般php在没有连接到数据库或者其他情况下会有提示错误，一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息，这类信息提供给黑客后，是不安全的，所以一般服务器建议禁止错误提示：<br/>display_errors = Off<br/>如果你却是是要显示错误信息，一定要设置显示错误的级别，比如只显示警告以上的信息：<br/>error_reporting = E_WARNING &amp; E_ERROR<br/>当然，我还是建议关闭错误提示。<br/>10.错误日志<br/>建议在关闭display_errors后能够把错误信息记录下来，便于查找服务器运行的原因：<br/>log_errors = On<br/>同时也要设置错误日志存放的目录，建议根apache的日志存在一起：<br/>error_log = D:/usr/local/apache2/logs/php_error.log<br/>注意：给文件必须允许apache用户的和组具有写的权限。<br/>11.关闭远程文件打开<br/>allow_url_fopen = off<br/>防止黑客远程远程包含漏洞<br/>12.Php.ini包含补丁文件<br/>在php.ini中引用。在配置文件内引用的话，将影响到所以的网站，包含所有页面<br/>在php.ini中，找到此节：<br/>; Automatically add files before o&#114; after any PHP document.<br/>;auto_prepend_file = “phpids.php”<br/>;auto_append_file = “alert.php”<br/>默认是空，请添加所包含的文件。同时找到：<br/>; UNIX: “/path1:/path2″<br/>;include_path = “.:/php/includes”<br/>;<br/>; Windows: “\path1;\path2″<br/>include_path = “.;F:\PHPnow\htdocs”13.使用Suhosin保护PHP应用系统，具体参考<a href="http://www.hardened-php.net/suhosin/configuration.html" target="_blank" rel="external">http://www.hardened-php.net/suhosin/configuration.html</a><br/>mysql方面:<br/>1.修改root用户口令，删除空口令<br/>缺省安装的MySQL的root用户是空密码的，为了安全起见，必须修改为强密码，所谓的强密码，至少8位，由字母、数字和符号组成的不规律密码。使用MySQL自带的命令mysaladmin修改root密码，同时也可以登陆数据库，修改数据库mysql下的user表的字段内容，修改方法如下所示：<br/># /usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用mysqladmin<br/>#mysql&gt; use mysql;<br/>#mysql&gt; up&#100;ate user set password=password(‘upassword’) wh&#101;re user=’root’;<br/>#mysql&gt; flush privileges; //强制刷新内存授权表，否则用的还是在内存缓冲的口令<br/>2.删除默认数据库和数据库用户<br/>一般情况下，MySQL数据库安装在本地，并且也只需要本地的php脚本对mysql进行读取，所以很多用户不需要，尤其是默认安装的用户。MySQL初始化后会自动生成空用户和test库，进行安装的测试，这会对数据库的安全构成威胁，有必要全部删除，最后的状态只保留单个root即可，当然以后根据需要增加用户和数据库。<br/>#mysql&gt; show databases;<br/>#mysql&gt; dro&#112; database test; //删除数据库test<br/>#use mysql;<br/>#del&#101;te from db; //删除存放数据库的表信息，因为还没有数据库信息。<br/>#mysql&gt; del&#101;te from user wh&#101;re not (user=’root’) ; // 删除初始非root的用户<br/>#mysql&gt; del&#101;te from user wh&#101;re user=’root’ and password=”; //删除空密码的root，尽量重复操作<br/>Query OK, 2 rows affected (0.00 sec)<br/>#mysql&gt; flush privileges; //强制刷新内存授权表。<br/>3.改变默认mysql管理员帐号<br/>4.关于密码的管理<br/>密码是数据库安全管理的一个很重要因素，不要将纯文本密码保存到数据库中。如果你的计算机有安全危险，入侵者可以获得所有的密码并使用它们。相反，应使用MD5()、SHA1()或单向哈希函数。也不要从词典中选择密码，有专门的程序可以破解它们，请选用至少八位，由字母、数字和符号组成的强密码。在存取密码时，使用mysql的内置函数password（）的sql语句，对密码进行加密后存储。例如以下方式在users表中加入新用户。<br/>#mysql&gt; ins&#101;rt into users values (1,password(1234),’test’);<br/>5.使用独立用户运行msyql<br/>绝对不要作为使用root用户运行MySQL服务器。这样做非常危险，因为任何具有FILE权限的用户能够用root创建文件(例如，~root/.bashrc)。mysqld拒绝使用root运行，除非使用–user=root选项明显指定。应该用普通非特权用户运行mysqld。正如前面的安装过程一样，为数据库建立独立的linux中的mysql账户，该账户用来只用于管理和运行MySQL。<br/>要想用其它Unix用户启动mysqld，，增加user选项指定/etc/my.cnf选项文件或服务器数据目录的my.cnf选项文件中的[mysqld]组的用户名。<br/>#vi /etc/my.cnf<br/>[mysqld]<br/>user=mysql<br/>该命令使服务器用指定的用户来启动，无论你手动启动或通过mysqld_safe或mysql.server启动，都能确保使用mysql的身份。也可以在启动数据库是，加上user参数。<br/># /usr/local/mysql/bin/mysqld_safe –user=mysql &amp;<br/>作为其它linux用户而不用root运行mysqld，你不需要更改user表中的root用户名，因为MySQL账户的用户名与linux账户的用户名无关。确保mysqld运行时，只使用对数据库目录具有读或写权限的linux用户来运行。<br/>6.禁止远程连接数据库<br/>在命令行netstat -ant下看到，默认的3306端口是打开的，此时打开了mysqld的网络监听，允许用户远程通过帐号密码连接数本地据库，默认情况是允许远程连接数据的。为了禁止该功能，启动skip-networking，不监听sql的任何TCP/IP的连接，切断远程访问的权利，保证安全性。假如需要远程管理数据库，可通过安装PhpMyadmin来实现。假如确实需要远程连接数据库，至少修改默认的监听端口，同时添加防火墙规则，只允许可信任的网络的mysql监听端口的数据通过。<br/># vi /etc/my.cf<br/>将#skip-networking注释去掉。<br/># /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止数据库<br/>#/usr/local/mysql/bin/mysqld_safe –user=mysql &amp; //后台用mysql用户启动mysql<br/>7.限制连接用户的数量<br/>数据库的某用户多次远程连接，会导致性能的下降和影响其他用户的操作，有必要对其进行限制。可以通过限制单个账户允许的连接数量来实现，设置my.cnf文件的mysqld中的max_user_connections变量来完成。GRANT语句也可以支持 资源控制选项来限制服务器对一个账户允许的使用范围。<br/>#vi /etc/my.cnf<br/>[mysqld]<br/>max_user_connections 2<br/>8.用户目录权限限制<br/>默认的mysql是安装在/usr/local/mysql，而对应的数据库文件在/usr/local/mysql/var目录下，因此，必须保证该目录不能让未经授权的用户访问后把数据库打包拷贝走了，所以要限制对该目录的访问。确保mysqld运行时，只使用对数据库目录具有读或写权限的linux用户来运行。<br/># chown -R root&nbsp;&nbsp;/usr/local/mysql/&nbsp;&nbsp;//mysql主目录给root<br/># chown -R mysql.mysql /usr/local/mysql/var //确保数据库目录权限所属mysql用户<br/>9.命令历史记录保护<br/>数据库相关的shell操作命令都会分别记录在.bash_history，如果这些文件不慎被读取，会导致数据库密码和数据库结构等信息泄露，而登陆数据库后的操作将记录在.mysql_history文件中，如果使用up&#100;ate表信息来修改数据库用户密码的话，也会被读取密码，因此需要删除这两个文件，同时在进行登陆或备份数据库等与密码相关操作时，应该使用-p参数加入提示输入密码后，隐式输入密码，建议将以上文件置空。<br/># rm .bash_history .mysql_history&nbsp;&nbsp;//删除历史记录<br/># ln -s /dev/null .bash_history&nbsp;&nbsp; //将shell记录文件置空<br/># ln -s /dev/null .mysql_history&nbsp;&nbsp;//将mysql记录文件置空<br/>10.禁止MySQL对本地文件存取<br/>在mysql中，提供对本地文件的读取，使用的是load data local infile命令，默认在5.0版本中，该选项是默认打开的，该操作令会利用MySQL把本地文件读到数据库中，然后用户就可以非法获取敏感信息了，假如你不需要读取本地文件，请务必关闭。应该禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。网络上流传的一些攻击方法中就有用它LOAD DATA LOCAL INFILE的，同时它也是很多新发现的SQL Injection攻击利用的手段！黑客还能通过使用LOAD DATALOCAL INFILE装载“/etc/passwd”进一个数据库表，然后能用Sel&#101;ct显示它，这个操作对服务器的安全来说，是致命的。可以在my.cnf中添加local-infile=0，或者加参数local-infile=0启动mysql。<br/>#/usr/local/mysql/bin/mysqld_safe –user=mysql –local-infile=0 &amp;<br/>#mysql&gt; load data local infile ’sqlfile.txt’ into table users fields terminated by ‘,’;<br/>#ERROR 1148 (42000): The used command is not allowed with this MySQL version<br/>–local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令，假如需要获取本地文件，需要打开，但是建议关闭。<br/>11.MySQL服务器权限控制<br/>MySQL权限系统的主要功能是证实连接到一台给定主机的用户，并且赋予该用户在数据库上的Sel&#101;ct、Ins&#101;rt、Up&#100;ate和Del&#101;te等权限（详见user超级用户表）。它的附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。<br/>管理员可以对user，db，host等表进行配置，来控制用户的访问权限，而user表权限是超级用户权限。只把user表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户，你应该把在user表中的权限设成’N&#39;并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权，FILE权限给予你用LOAD DATA INFILE和Sel&#101;ct … INTO OUTFILE语句读和写服务器上的文件，任何被授予FILE权限的用户都能读或写MySQL服务器能读或写的任何文件。(说明用户可以读任何数据库目录下的文件，因为服务器可以访问这些文件）。 FILE权限允许用户在MySQL服务器具有写权限的目录下创建新文件，但不能覆盖已有文件在user表的File_priv设置Y或N。，所以当你不需要对服务器文件读取时，请关闭该权限。<br/>#mysql&gt; load data infile ’sqlfile.txt’ into table loadfile.users fields terminated by ‘,’;<br/>Query OK, 4 rows affected (0.00 sec) //读取本地信息sqlfile.txt’<br/>Records: 4&nbsp;&nbsp;Del&#101;ted: 0&nbsp;&nbsp;Skipped: 0&nbsp;&nbsp;Warnings: 0<br/>#mysql&gt; up&#100;ate user set File_priv=’N’ wh&#101;re user=’root’; //禁止读取权限<br/>Query OK, 1 row affected (0.00 sec)<br/>Rows matched: 1&nbsp;&nbsp;Changed: 1&nbsp;&nbsp;Warnings: 0<br/>mysql&gt; flush privileges; //刷新授权表<br/>Query OK, 0 rows affected (0.00 sec)<br/>#mysql&gt; load data infile ’sqlfile.txt’ into table users fields terminated by ‘,’; //重登陆读取文件<br/>#ERROR 1045 (28000): Access denied for user ‘root’@&#39;localhost’ (using password: YES) //失败<br/># mysql&gt; sel&#101;ct * from loadfile.users into outfile ‘test.txt’ fields terminated by ‘,’;<br/>ERROR 1045 (28000): Access denied for user ‘root’@&#39;localhost’ (using password: YES)<br/>为了安全起见，随时使用SHOW GRANTS语句检查查看谁已经访问了什么。然后使用REVOKE语句删除不再需要的权限。<br/>12.使用chroot方式来控制MySQL的运行目录<br/>Chroot是linux中的一种系统高级保护手段，它的建立会将其与主系统几乎完全隔离，也就是说，一旦遭到什么问题，也不会危及到正在运行的主系统。这是一个非常有效的办法，特别是在配置网络服务程序的时候。<br/>13.关闭对无关的Web程序访问的支持<br/>如果不打算让Web访问使用MySQL数据库，没有提供诸如PHP这样的Web语言的时候，重新设置或编译你的PHP，取消它们对MySQL的默认支持。假如服务器中使用php等web程序，试试用Web形式非法的请求，如果得到任何形式的MySQL错误，立即分析原因，及时修改Web程序，堵住漏洞，防止MySQL暴露在web面前。<br/>对于Web的安全检查，在MySQL官方文档中这么建议，对于web应用，至少检查以下清单：<br/>试试用Web形式输入单引号和双引号(‘’’和‘”’)。如果得到任何形式的MySQL错误，立即分析原因。<br/>试试修改动态URL，可以在其中添加%22(‘”’)、%23(‘#’)和%27(‘’’)。<br/>试试在动态URL中修改数据类型，使用前面示例中的字符，包括数字和字符类型。你的应用程序应足够安全，可以防范此类修改和类似攻击。<br/>试试输入字符、空格和特殊符号，不要输入数值字段的数字。你的应用程序应在将它们传递到MySQL之前将它们删除或生成错误。将未经过检查的值传递给MySQL是很危险的！<br/>将数据传给MySQL之前先检查其大小。<br/>用管理账户之外的用户名将应用程序连接到数据库。不要给应用程序任何不需要的访问权限。<br/>14.数据库备份策略<br/>使用 mysqldump进行备份非常简单，如果要备份数据库” nagios_db_backup ”，使用命令，同时使用管道gzip命令对备份文件进行压缩，建议使用异地备份的形式，可以采用Rsync等方式，将备份服务器的目录挂载到数据库服务器，将数据库文件备份打包在，通过crontab定时备份数据：<br/>#!/bin/sh<br/>time=`date +”(“%F”)”%R`<br/>$/usr/local/mysql/bin/mysqldump -u nagios -pnagios nagios | gzip &gt;/home/sszheng/nfs58/nagiosbackup/nagios_backup.$time.gz<br/># crontab -l<br/># m h&nbsp;&nbsp;dom mon dow&nbsp;&nbsp; command<br/>00 00 * * * /home/sszheng/shnagios/backup.sh<br/>恢复数据使用命令：<br/>gzip -d nagios_backup.\(2008-01-24\)00\:00.gz<br/>nagios_backup.(2008-01-24)00:00<br/>#mysql –u root -p nagios&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;/home/sszheng/nfs58/nagiosbackup/nagios_backup.\(2008-01-24\)12\:00<br/>15. Mysqld安全相关启动选项<br/>–local-infile[={0|1}]<br/>如果用–local-infile=0启动服务器，则客户端不能使用LOCAL in LOAD DATA语句。<br/>–old-passwords<br/>强制服务器为新密码生成短(pre-4.1)密码哈希。当服务器必须支持旧版本客户端程序时，为了保证兼容性这很有用。<br/>(OBSOLETE) –safe-show-database<br/>在以前版本的MySQL中，该选项使SHOW DATABASES语句只显示用户具有部分权限的数据库名。在MySQL 5.1中，该选项不再作为现在的 默认行为使用，有一个SHOW DATABASES权限可以用来控制每个账户对数据库名的访问。<br/>–safe-user-cr&#101;ate<br/>如果启用，用户不能用GRANT语句创建新用户，除非用户有mysql.user表的Ins&#101;rt权限。如果你想让用户具有授权权限来创建新用户，你应给用户授予下面的权限：<br/>mysql&gt; GRANT Ins&#101;rt(user) ON mysql.user TO ‘user_name’@&#39;host_name’;<br/>这样确保用户不能直接更改权限列，必须使用GRANT语句给其它用户授予该权限。<br/>–secure-auth<br/>不允许鉴定有旧(pre-4.1)密码的账户。<br/>16.information_schema 安全<br/>在用户角度来看，INFORMATION_SCHEMA只是一个以插件方式存在的存储引擎，编译安装的时候<br/>–disable-information-schema 就行了<br/>added TRIGGER_ACL check for I_S.TRIGGERS<br/><a href="http://bugs.mysql.com/bug.php?id=38837" target="_blank" rel="external">http://bugs.mysql.com/bug.php?id=38837</a><br/><a href="http://bugs.mysql.com/bug.php?id=27629" target="_blank" rel="external">http://bugs.mysql.com/bug.php?id=27629</a><br/>Phpmyadmin里隐藏方法<br/>$cfg[&#39;servers&#39;][$i][&#39;hide_db&#39;] = ‘information_schema’;<br/>再用vsftpd结合pam_mysql基本上一个web服务器大致就完工了<br/>Iptables方面:<br/>iptables -F<br/>iptables -X<br/>iptables -Z<br/>iptables -A INPUT -i lo -j ACCEPT<br/>iptables -P INTPUT Dro&#112;<br/>iptables -A INPUT -p tcp –dport 21 -j ACCEPT<br/>iptables -A INPUT -p tcp –dport 22 -j ACCEPT<br/>iptables -A INPUT -p tcp –dport 80 -j ACCEPT<br/>iptables -A INPUT -p tcp -dport 80 -m recent -name BAD_HTTP_ACCESS -up&#100;ate -seconds 60 -hitcount 30 -j REJECT<br/>iptables -A INPUT -p tcp -dport 80 -m recent -name BAD_HTTP_ACCESS -set -j ACCEPT<br/>iptables -P OUTPUT Dro&#112;<br/>iptables&nbsp;&nbsp;-A OUTPUT -p tcp –sport 80 -j ACCEPT<br/>iptables&nbsp;&nbsp;-A OUTPUT -p tcp –sport 21 -j ACCEPT<br/>iptables&nbsp;&nbsp;-A OUTPUT -p tcp –sport 22 -j ACCEPT<br/>iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT<br/>iptables -A OUTPUT -p tcp -dport 80 -m recent -name BAD_HTTP_ACCESS -up&#100;ate -seconds 60 -hitcount 30 -j REJECT<br/>iptables -A INPUT -p tcp -dport 80 -m recent -name BAD_HTTP_ACCESS -set -j ACCEPT<br/>iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT<br/>如果您还不放心的话，最后用各类安全扫描工具扫描下服务器是否存在其他漏洞 <br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=593</link>
			<title><![CDATA[Apache mod_cache ]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Thu,13 May 2010 10:38:07 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=593</guid>
		<description><![CDATA[Apache 的缓存方式有两种，一种是基于硬盘文件的缓存，由 mod_disk_cache 实现，另一种是使用内存缓存，由 mod_mem_cache 实现，不过它们都是依赖 mod_cache 模块的，mod_cache 模块提供了一些缓存配置的指令供它们使用，而 mod_file_cache 模块是搭配 mod_mem_cache 模块使用的，下面分别进行介绍。<br/><br/>1、基于硬盘文件的缓存<br/>基于硬盘文件存储的缓存由 mod_disk_cache 模块实现，先看个简单的配置例子：<br/><br/>&lt;IfModule mod_cache.c&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheDefaultExpire 86400<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;IfModule mod_disk_cache.c&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheEnable disk /<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheRoot /tmp/apacheCache<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheDirLevels 5<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheDirLength 4<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheMaxFileSize 1048576<br/>&nbsp;&nbsp;&nbsp;&nbsp;CacheMinFileSize 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/IfModule&gt;<br/>&lt;/IfModule&gt;<br/><br/>把上面的配置加到 Apache 的 httpd.conf 文件中，如果缓存相关的模块都已经编译进了 Apache 的核心，则无需加载模块，直接就能使用上面的指令。指令的详细说明如下：<br/><br/>CacheDefaultExpire：设定缓存过期的时间（秒），默认是1小时，只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效<br/>CacheEnable：启用缓存，第1个参数是缓存类弄，这里当然是 disk了，第2个参数是缓存路径，指的是 url 路径，这里是缓存所有的东西，直接写上“/”即可，如“/docs”则只缓存 /docs 下的所有文件<br/>CacheRoot：缓存文件所在的目录，运行 Apache 的用户（如daemon 或 nobody）要能对其进行读写，如果不清楚的话可以直接设置成 777，请手动建立该目录并设置好访问权限<br/>CacheDirLevels：缓存目录的深度，默认是3，这里设置为5<br/>CacheDirLength：缓存目录名的字符长度，默认是4，这里设置为5<br/>CacheMaxFileSize 和 CacheMaxFileSize：缓存文件的最大值和最小值（byte），当超过这个范围时将不再缓存，这里设置为 1M 和 10bytes<br/>基于硬盘文件存储的文件基本上就这些内容，设置好后重启 Apache 应该就能使用了。一切正常的话，可以在缓存目录下看到 Apache 自动建立的一些目录和缓存的数据文件。<br/><br/>2、基于内存的缓存<br/>基于内存的缓存主要由 mod_mem_cache 模块实现，还是看个简单的配置吧，这样比较直观:-)<br/><br/>&lt;IfModule mod_cache.c&gt;<br/>&nbsp;&nbsp; &lt;IfModule mod_mem_cache.c&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheEnable mem /<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMaxObjectCount 20000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMaxObjectSize 1048576<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMaxStreamingBuffer 65536<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMinObjectSize 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheRemovalAlgorithm GDSF<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheSize 131072<br/>&nbsp;&nbsp; &lt;/IfModule&gt;<br/>&lt;/IfModule&gt;<br/><br/>简单说一下上面一些指令的意思：<br/><br/>CacheEnable：启用缓存，使用基于内存的方式存储<br/>MCacheMaxObjectCount：在内存中最多能存储缓存对象的个数，默认是1009，这里设置为20000<br/>MCacheMaxObjectSize：单个缓存对象最大为 1M，默认是10000bytes<br/>MCacheMaxStreamingBuffer：在缓冲区最多能够放置多少的将要被缓存对象的尺寸，这里设置为 65536，该值通常小于100000或 MCacheMaxObjectSize 设置的值<br/>MCacheMinObjectSize：单个缓存对象最小为10bytes，默认为1bytes<br/>MCacheRemovalAlgorithm：清除缓存所使用的算法，默认是 GDSF，还有一个是LRU，可以查一下 Apache 的官方文档，上面有些介绍<br/>MCacheSize：缓存数据最多能使用的内存，单位是 kb，默认是100kb，这里设置为128M<br/>保存重启 Apache 基于内存的缓存系统应该就能生效了，根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用，只要指明不同的URL路径即可。<br/><br/>3、注意事项<br/>使用缓存需要注意如下事项：<br/><br/>要使用缓存，必须使用指令 CacheEnable 启用它，目前可用的缓存类型为 disk 或 mem，禁止缓存可以使用 CacheDisable，如 CacheDisable /private<br/>待缓存的 URL 返回的状态值必须为： 200、203、300、301 或 410<br/>URL 的请求方式必须是 GET 方式<br/>发送请求时，头部中包含 “Authorization: ”的字符串时，返回的内容将不会被缓存<br/>URL 包含查询字符串，如问号?后的那些东西，除非返回的内容包含“Expires:”，否则不会被缓存<br/>如果返回的状态值是 200，则返回的头部信息必须包含以下的一种才会被缓存：Etag、Last-Modified、Expires，除非设置了指令 CacheIgnoreNoLastMod On<br/>如果返回内容的头部信息“Cache-Control:”中包含“private”，除非设置了指令 CacheStorePrivate On，否则不会被缓存<br/>如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”，除非设置了指令 CacheStoreNoStore On，否则不会被缓存<br/>如果返回内容的头部信息“Vary:”中包含了“*”，不会被缓存<br/><br/>4、其它一些指令的介绍<br/>如果你的网站有几个文件的访问非常频繁而又不经常变动，则可以在 Apache 启动的时候就把它们的内容缓存到内存中（当然要启用内存缓存系统），使用的是 mod_file_cache 模块，具体如下：<br/>有多个文件可以用空格格开<br/>MMapFile /var/www/html/index.html /var/www/html/articles/index.html<br/>上面是缓存文件的内容到内存中，除此之外，还可以只缓存文件的打开句柄到内存中，当有请求进来的时候，Apache 直接从内存中获取文件的句柄，返回内容，和 MMapFile 指令很像，具体如下：<br/>CacheFile /var/www/html/index.html /var/www/html/articles/index.html<br/>上面两个指令所缓存的文件如果有修改的话，必须重启 Apache 或使用 graceful 之类的方式强制使 Apache 更新缓存数据，否则当用户访问的时候获取的不是最新的数据。<br/><br/>有时候需要根据某些特殊的头部信息来决定是否进行缓存，则可以使用如下指令：<br/>当头部信息中包含 Set-Cookie 时则跳过不进行缓存操作<br/>CacheIgnoreHeaders Set-Cookie<br/>有时候需要缓存的时候跳过 URL 中的查询字符串？使用如下指令：<br/>CacheIgnoreQueryString On<br/><br/>Apache 的缓存系统不仅可以缓存服务器本身的文件，也可以缓存通过代理得到的内容，对了，Apache 可以像 Squid 一样做代理，而且做的还不错，下篇文章就介绍一下 Apache 的代理功能吧。善用 Apache 的缓存功能，可以让你的网站速度提升不少。做为一个网站来说，虽然可用的各种缓存方案很多，但在 Web 服务器层做缓存的效率还是很值得一试的。<br/><br/><br/><br/>apache编译安装的时候没有启用cache功能，默认情况下，apache安装完以后，是不允许被cache的。访问量大增，需要cache功能，重新编译：<br/><br/>[-]#/usr/local/apache2/bin/apxs -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c<br/><br/><br/>和mod_disk_cache.c<br/><br/>mod_mem_cache.c<br/><br/>会在/usr/local/apache2/modules下自动生成mod_cache.so,mod_disk_cache.so和mod_mem_cache.so<br/><br/><br/>httpd.conf配置以及详解如下<br/><br/><br/>LoadModule cache_module modules/mod_cache.so<br/><br/>LoadModule disk_cache_module modules/mod_disk_cache.so<br/><br/>LoadModule mem_cache_module modules/mod_mem_cache.so<br/><br/><br/>&lt;IfModule mod_cache.c&gt;<br/><br/>CacheForceCompletion 100<br/><br/>CacheDefaultEXPire 3600<br/><br/>CacheMaxExpire 86400<br/><br/>CacheLastModifiedFactor 0.1<br/><br/><br/>&lt;IfModule mod_disk_cache.c&gt;<br/><br/>CacheEnable disk /<br/><br/>CacheRoot “/var/cache/mod_proxy”<br/><br/>CacheSize 327680<br/><br/>CacheDirLength 4<br/><br/>CacheDirLevels 5<br/><br/>CacheGcInterval 4<br/><br/>&lt;/IfModule&gt;<br/><br/>&lt;IfModule mod_mem_cache.c&gt;<br/><br/>CacheEnable mem /<br/><br/>MCacheSize 8192<br/><br/>MCacheMaxObjectCount 10000<br/><br/>MCacheMinObjectSize 1<br/><br/>MCacheMaxObjectSize 51200<br/><br/>&lt;/IfModule&gt;<br/><br/>&lt;/IfModule&gt;<br/><br/><br/><br/>####################################################<br/><br/>参考数据<br/><br/>mod_cache： <br/><br/>CacheEnable: 启动 mod_cache，其后接两个参数。第一个参数指定快取的种类，应设为 mem (内存快取) 或 disk (磁盘高速缓存) 之其一；第二个参数指定使用快取的 URI 路径，如果对整个网XP (或虚拟主机) 进行快取，简单指定为根目录(/) 即可。 <br/><br/>CacheForceCompletion: 这个值指定当 HTTP request 被取消时，内容的产生动作要完成的百分比；预设是 60(%)。<br/><br/>CacheDefaultExpire: 指定快取的预设过期秒数；默认值是一小时 (3600)。 <br/><br/>CacheMaxExpire: 指定快取最大的过期秒数；默认值是一天 (86400)。 <br/><br/>CacheLastModifiedFactor: 用来从响应里 Last Modified 信息算出 expir date。计算方式是：expire period (过期时距) = 最后更新后至今的时间间距 *CacheLastModifiedFactor而expire date = 目前时间 + expire period不过无论如何，过期时间不能超过 CacheMaxExpire 的设定值。<br/><br/><br/>mod_disk_cache： <br/><br/>CacheRoot: 指定磁盘高速缓存所使用的目录。<br/><br/>CacheSize: 以 KByte 为单位指定快取使用的磁盘空间大小。<br/><br/>CacheDirLength: 指定各目录 (的键值) 存在于快取阶层 (hierarchy) 中所使用的字符数。<br/><br/>CacheDirLevels: 指定快取的目录层数； CacheDirLength 与此 CacheDirLevels设定值相乘不能超过 20。<br/><br/>CacheGcInterval: 指定收垃圾 (Garbage Collection) 的动作间隔时间；单位是小时。不过根据 Apache2 文件，这个指令还 没有被实作 。<br/><br/>mod_mem_cache： <br/><br/>MCacheSize: 以 KByte 为单位指定快取使用的内存空间大小。<br/><br/>MCacheMaxObjectCount: 指定快取对象数目的最大值；默认值是 1009。<br/><br/>MCacheMaxObjectSize: 指定最大可快取对象的大小，单位是 Byte；默认值是10000 (Bytes)。<br/><br/>MCacheMinObjectSize: 指定最小可快取对象的大小，单位是 Byte；默认值是 0 (Bytes)。<br/><br/><br/>配apache mod_cache 后 httpd -k start<br/><br/>apache出现以下信息：<br/><br/>Cannot load /usr/local/apache/modules/mod_cache.so into server: /usr/local/apache/modules/mod_cache.so: undefined symbol: cache_generate_key_default<br/><br/>正规解决方案:<br/><br/>modules/cache下面有很多的.c文件，大致用途如：<br/>mod_cache.c 编译得到mod_cache.so 主要用来控制整个apache的cache功能。<br/>mod_file_cache.c,mod_mem_cache.c,mod_disk_cache.c这个三个文件编译后得到各自的cache支持模块。<br/><br/>mod_cache.c还需要其他的程序来进行工作，包括cache_*.c这些文件。因此apxs动态加载一个模块的时候，需要把这些文件和mod_cache.c 一起编译：/usr/local/apache2/bin/apxs -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c<br/><br/><br/><br/>本帖最后由 netbox 于 2010-5-13 22:55 编辑 <br/><br/>补充：apache官方已经将mod_mem_cache从apache最新的文档的模块列表时清除掉了，根据apache社区的一些讨论，可能是mod_mem_cache的实现机制导致它在apache多进程模式下共享内存缓存的开销比较大。官方推荐使用mod_disk_cache来取代的mod_mem_cache.<br/>LoadModule cache_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_cache.so<br/>LoadModule disk_cache_module modules/mod_disk_cache.so<br/>CacheRoot /cache <br/>CacheEnable disk / <br/>CacheDirLevels 5<br/>CacheDirLength 3<br/>CacheMaxExpire 3600<br/>CacheIgnoreHeaders Set-Cookie <br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=592</link>
			<title><![CDATA[apache2.2的优化及模块安装]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Linux系统使用]]></category>
			<pubDate>Thu,13 May 2010 09:54:51 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=592</guid>
		<description><![CDATA[<a href="http://blog.chinaunix.net/u/29960/showart_1409188.html" target="_blank" rel="external">http://blog.chinaunix.net/u/29960/showart_1409188.html</a><br/><br/>apache2.2的优化及模块安装2008-04-18 22:53一、安装<br/><br/># 解压缩<br/>tar jxvf httpd-2.2.2.tar.bz2<br/>cd httpd-2.2.0<br/><br/># vi server/mpm/worker/worker.c<br/>找到下面几行，并改成如下的数值，其目的是在源码中修改apache可支持的最大线程数和最大客户端数目。<br/># define DEFAULT_SERVER_LIMIT 256<br/># define MAX_SERVER_LIMIT 40000<br/># define DEFAULT_THREAD_LIMIT 256<br/># define MAX_THREAD_LIMIT 40000<br/><br/># 编译和安装 apr 1.2<br/>cd srclib/apr<br/>./configure –prefix=/home/liuchao/local/apr<br/>make<br/>make install<br/><br/># 编译和安装 apr-util 1.2<br/>cd ../apr-util<br/>./configure –prefix=/home/local/apr-util –with-apr=/home/local/apr<br/>make<br/>make install<br/><br/>优化编译选项及配置apache可加载的模块<br/>patch -p1 &lt; ../mod_limitipconn-0.22/apachesrc.diff<br/>/usr/local/apache2.2.3/bin/apxs -c -i -a mod_limitipconn.c<br/>/usr/local/apache2.2/bin/apxs -c -i -a mod_evasive20.c<br/><br/>更改2Glogs<br/>export CFLAGS=”-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE”<br/>然后编译cronolog即可<br/>CHOST=”i686-pc-linux-gnu”<br/>CFLAGS=”-march=pentium4 -O3 -pipe -fomit-frame-pointer”<br/>CXXFLAGS=”-march=pentium4 -O3 -pipe -fomit-frame-pointer”<br/><br/>./configure –prefix=/usr/local/apache2.2.3 –enable-mods-shared=all –enable-so –with-mpm=worker –enable-deflate –enable-cache –enable-disk-cache –enable-mem-cache –enable-file-cache –enable-proxy –enable-rewrite –enable-charset-lite –enable-suexec –with-suexec-bin=/usr/sbin/suexec –disable-ipv6 -disable-dav –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util<br/><br/># 编译及安装<br/>gmake &amp;&amp; make install<br/><br/>二、优化apache配置选项<br/><br/>在主配置文件httpd.conf注释下一行，这样做的目的是把apache的功能配置分成小文件，便于修改和移植<br/>Include conf/Includes/*.conf<br/><br/>修改MPM（多道处理器）参数<br/># cd /usr/local/apache2.2<br/># vi conf/extra/httpd-mpm.conf<br/>找到如下选项，并改成对应的数值<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerLimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadLimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;128<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8192<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 256<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadsPerChild&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 128<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxRequestsPerChild&nbsp;&nbsp;&nbsp;&nbsp;0<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerLimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadLimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 256<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadsPerChild&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxRequestsPerChild&nbsp;&nbsp;&nbsp;&nbsp; 500<br/><br/>测试过的配置：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerLimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadLimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;256<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadsPerChild&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxRequestsPerChild&nbsp;&nbsp; 0<br/><br/>修改apache2.2子进程所有者<br/># vi /usr/local/apache2.2/conf/httpd.conf<br/>把daemon改为nobody<br/>User nobody<br/>Group nobody<br/><br/>一般说来，可以不需要的模块包括：<br/>#LoadModule env_module libexec/mod_env.so<br/>#LoadModule negotiation_module libexec/mod_negotiation.so<br/>#LoadModule status_module libexec/mod_status.so<br/>#server side include已经过时了<br/>#LoadModule includes_module libexec/mod_include.so<br/>#不需要将没有缺省index文件的目录下所有文件列出<br/>#LoadModule autoindex_module libexec/mod_autoindex.so<br/>#尽量不使用CGI：一直是Apache安全问题最多的地方<br/>#LoadModule cgi_module libexec/mod_cgi.so<br/>#LoadModule asis_module libexec/mod_asis.so<br/>#LoadModule imap_module libexec/mod_imap.so<br/>#LoadModule action_module libexec/mod_actions.so<br/>#不使用安全认证可以大大提高访问速度<br/>#LoadModule access_module libexec/mod_access.so<br/>#LoadModule auth_module libexec/mod_auth.so<br/>#LoadModule setenvif_module libexec/mod_setenvif.so<br/>最好保留的有：<br/>#用于定制log格式<br/>LoadModule config_log_module libexec/mod_log_config.so<br/>#用于增加文件应用的关联<br/>LoadModule mime_module libexec/mod_mime.so<br/>#用于缺省index文件：index.php等<br/>LoadModule dir_module libexec/mod_dir.so<br/><br/>可用可不用的有：<br/>#比如：需要在~/username/下调试php可以将<br/>LoadModule userdir_module libexec/mod_userdir.so<br/>#比如：需要将以前的URL进行转向或者需要使用CGI scrīpt-alias<br/>LoadModule alias_module libexec/mod_alias.so<br/><br/>三、配置模块<br/><br/>1.配置静态页面压缩输出模块deflate<br/><br/>使用mod_deflate模块<br/><br/>在httpd.conf中加入以下设置：<br/><br/>SetOutputFilter DEFLATE<br/>DeflateFilterNote ratio<br/>SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)＄ no-gzip dont-vary<br/>SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)＄ no-gzip dont-vary<br/>SetEnvIfNoCase Request_URI \.pdf＄ no-gzip dont-vary<br/><br/>或者<br/><br/>DeflateFilterNote ratio<br/>AddOutputFilterByType DEFLATE text/*<br/>AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscrīpt<br/><br/>两种配置方法的作用差不多，其目的主要是把一些不必要压缩的文件禁止压缩。<br/><br/>2.配置mod_cache模块<br/><br/># cd /usr/local/apache2.2/conf/Includes<br/># vi mod_cache.conf<br/>在配置文件里添加如下语句<br/><br/>LoadModule disk_cache_module modules/mod_disk_cache.so<br/><br/>CacheRoot /<br/>CacheSize 256<br/>CacheEnable disk /<br/>CacheDirLevels 5<br/>CacheDirLength 3<br/><br/>LoadModule mem_cache_module modules/mod_mem_cache.so<br/><br/>CacheEnable mem /<br/>MCacheSize 4096<br/>MCacheMaxObjectCount 100<br/>MCacheMinObjectSize 1<br/>MCacheMaxObjectSize 2048<br/><br/>vi /usr/local/apache2/conf/httpd.conf<br/>在末尾添加上：<br/><br/>CacheForceCompletion 100<br/>CacheDefaultExpire 3600<br/>CacheMaxExpire 86400<br/>CacheLastModifiedFactor 0.1<br/><br/>设置虚拟目录<br/>然后保存退出。启动apache<br/><br/>参数的解释：<br/>mod_cache：<br/>CacheEnable: 启动 mod_cache，其后接两个参数。第一个参数指定快取的种类，应设为 mem (记忆体快取) 或 disk (磁碟快取) 之其一；第二个参数指定使用快取的 URI 路径，如果对整个网站 (或虚拟主机) 进行快取，简单指定为根目录(/) 即可。<br/>CacheForceCompletion: 这个值指定当 HTTP request 被取消时，内容的产生动作要完成的百分比；预设是 60(%)。<br/>CacheDefaultExpire: 指定快取的预设过期秒数；预设值是一小时 (3600)。<br/>CacheMaxExpire: 指定快取最大的过期秒数；预设值是一天 (86400)。<br/>CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。<br/>计算方式是：<br/>expire period (过期时距) = 最后更新后至今的时间间距 * CacheLastModifiedFactor<br/>而<br/>expire date = 目前时间 + expire period<br/>不过无论如何，过期时间不能超过 CacheMaxExpire 的设定值。<br/><br/>现在。如果用squid对该服务器进行反向代理的话，就可以通过cache 实现web的加速了<br/><br/>3.配置mod_expires模块<br/><br/>mod_expires可以减少10%左右的重复请求，让重复的用户对指定的页面请求结果都CACHE在本地，根本不向服务器发出请求。<br/><br/>mod_expires的安装配置：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExpiresActive on<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType image/gif “access plus 1 month”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType text/css “now plus 1 month”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExpiresDefault “now plus 1 day”<br/><br/>注释：<br/>所有的.gif文件1个月以后过期<br/>所有的文件缺省1天以后过期<br/><br/>4.配置dosevasive模块<br/>/usr/local/apache2.2/bin/apxs -i -a -c mod_dosevasive20.c<br/><br/>编辑httpd.conf，加入以下内容：<br/><br/>LoadModule dosevasive20_module modules/mod_dosevasive20.so<br/><br/>DOSHashTableSize 3097<br/>DOSPageCount 2<br/>DOSSiteCount 50<br/>DOSPageInterval 1<br/>DOSSiteInterval 1<br/>DOSBlockingPeriod 10<br/><br/>5.配置mod_limitipconn模块<br/><br/>mod_limitipconn.c是一个非官方的apache防止多线程下载模块，可以用来作为WEB文件的下载限制，但是它是使用ExtendedStatus On形式，工作在应用层。当同一个IP的连接到达限制的时候，apache对get请求发送：<br/><br/>HTTP/1.1 503 Service Temporarily Unavailable<br/><br/>从而使用户不能下载，但并不能阻止这种攻击，仍旧允许连接的。<br/><br/># /usr/local/apache2.2/bin/apxs -c -i -a mod_limitipconn.c<br/><br/>修改apache配置文件：<br/><br/># vi /usr/local/apache/conf/httpd.conf<br/><br/>同时需要设置以下参数在 httpd.conf 中 , 也可以在单个虚拟服务器中。<br/>　<br/>ExtendedStatus On<br/><br/>修改配置文件:<br/><br/>1 全局控制:<br/><br/>　　在httpd.conf加上以下几行:<br/><br/>　　<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 所有虚拟主机的/目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　MaxConnPerIP 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 每IP只允许3个并发连接<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NoIPLimit image/*&nbsp;&nbsp;&nbsp;&nbsp;# 对图片不做IP限制<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>　　&nbsp;&nbsp;&nbsp;&nbsp;# 所有主机的/mp3目录<br/>　　　　MaxConnPerIP 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 每IP只允许一个连接请求&nbsp;&nbsp;&nbsp;&nbsp;<br/>　　　　OnlyIPLimit audio/mpeg video&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 该限制只对视频和音频格式的文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>2 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:<br/><br/>　　&lt; VirtualHost xx.xxx.xx.xx &gt;<br/>　　　　ServerAdmin chenlf@chinalinuxpub.com<br/>　　　　ServerName server.domain.com<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerAlias *.domain.com<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UseCanonicalName OFF<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualDocumentRoot /htdoc/domain/%1<br/>　　&lt; IfModule mod_limitipconn.c &gt;<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt; Location / &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 所有虚拟主机的/目录<br/>　　　　　　MaxConnPerIP 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 每IP只允许3个并发连接<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　NoIPLimit image/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 对图片不做IP限制<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt; /Location &gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　&lt; Location /mp3 &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 所有主机的/mp3目录<br/>　　　　　　MaxConnPerIP 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 每IP只允许一个连接请求&nbsp;&nbsp;&nbsp;&nbsp;<br/>　　　　　　OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　&lt; /Location &gt;<br/>　　&lt; /IfModule &gt;<br/>　　ErrorLog /home/my/logs/error_log<br/>　　CustomLog /home/my/logs/access_log common<br/>&lt; /VirtualHost &gt;<br/><br/>重启apache，用多线程的下载工具下载时，大于3个线程，其余的将得到信息：<br/>HTTP/1.1 503 Service Temporarily Unavailable<br/><br/>或者根据User_Agent判断，把已知的多线程工具都给deny 掉<br/>in httpd.conf<br/>…..<br/>BrowserMatch “NetAnt” badguy<br/>BrowserMatch “GetRight” badguy<br/>BrowserMatch “JetCar” badguy<br/>BrowserMatch “Mass Downloader” badguy<br/>BrowserMatch “ReGet” badguy<br/>BrowserMatch “DLExpert” badguy<br/>BrowserMatch “FlashGet” badguy<br/>BrowserMatch “Offline Explorer” badguy<br/>BrowserMatch “Teleport” badguy<br/>………..<br/><br/>o&#114;der deny,allow<br/>deny from env=badguy<br/>allow from all<br/><br/>注意httpd里面应该有 mod_setenvif模块。<br/>在你的apache的conf文件里面加入<br/>LoadModule limitipconn_module lib/apache/mod_limitipconn.so<br/>ExtendedStatus On<br/><br/>6.安装modsecurity（mod_security 可以加强apache的安全性，特别是在防sql 注入上有很好的效果。）<br/>下载站点：<a href="http://www.modsecurity.org/download/" target="_blank" rel="external">http://www.modsecurity.org/download/</a><br/><br/># /usr/local/httpd220/bin/apxs -cia mod_security.c<br/>打开httpd.conf查看是否有如下文字加入<br/><br/>在httpd.conf中添加下列一段mod_security的配置文件<br/><br/>LoadModule security_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modules/mod_security.so<br/><br/>SecFilterEngine On<br/>SecFilterCheckURLEncoding On<br/>SecFilterDefaultAction “deny,log,status:500″<br/>#SecFilterForceByteRange 32 126<br/>#SecFilterScanPOST On<br/>SecAuditLog logs/audit_log<br/>###<br/>SecFilter “\.\./”<br/>#####<br/>SecFilter /etc/*passwd<br/>SecFilter /bin/*sh<br/><br/>#for CSS (Cascading Style Sheets) attack<br/>SecFilter “&lt;( | *scrīpt”<br/>SecFilter “&lt;(.| +&gt;”<br/>#for sql attack<br/>SecFilter “del&#101;te[ ]+from”<br/>SecFilter “ins&#101;rt[ ]+into”<br/>SecFilter “sel&#101;ct.+from”<br/>SecFilter “union[ ]+from”<br/>SecFilter “dro&#112;[ ]”<br/><br/>四、滚卷log<br/><br/>编译前设置export CFLAGS=”-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE”<br/>使其支持2G以上文件。<br/><br/>ErrorLog “|/usr/local/sbin/cronolog&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/apache2.2/logs/error_%Y%m%d.log”<br/>CustomLog “|/usr/local/sbin/cronolog&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/apache2.2/logs/access_%Y%m%d.log” combined<br/>用gzip压缩每天的日志：<br/>30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log<br/>日志的定期删除：<br/>30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f<br/><br/>运行语法检查命令检查语法，出现错误后继续调整。<br/># ./bin/apachectl -t<br/><br/>html网页跳转<br/><br/>使apache的日志文件里不记录图片文件<br/>&nbsp;&nbsp;&nbsp;&nbsp; 找到:&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogFormat “%h %l %u %t \”%r\” %&gt;s %b \”%{Referer}i\” \”%{User-Agent}i\”&#34; combined<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogFormat “%h %l %u %t \”%r\” %&gt;s %b” common<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogFormat “%{Referer}i -&gt; %U” referer<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogFormat “%{User-agent}i” agent<br/>&nbsp;&nbsp;&nbsp;&nbsp;再后面加上图片文件的类型<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.gif＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.GIF＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.jpg＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.JPG＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.png＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.js＄&nbsp;&nbsp;&nbsp;&nbsp;gif-image&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.bmp＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.css＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.mid＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.swf＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.mmf＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.wma＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf Request_URI \.midi＄ gif-image<br/>&nbsp;&nbsp;&nbsp;&nbsp;日志<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CustomLog /usr/local/apache/logs/access.log combined env=!gif-image<br/><br/>使用两个<br/>ProxyPassReverse / <a href="http://%" target="_blank" rel="external">http://%</a>{HTTP_HOST}:8088/<br/>RewriteEngine on&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;<br/>RewriteCond&nbsp;&nbsp;&nbsp;&nbsp; %{REQUEST_URI} !.*\.(gif|png|jpg)＄<br/>RewriteRule ^/(.*) <a href="http://%" target="_blank" rel="external">http://%</a>{HTTP_HOST}:8088/ ＄1 [P]<br/><br/>Linux下检测Apache进程数量并自动重启的脚本<br/><br/>在/etc/crontab里,定时执行检测脚本,检测系统的Apache,和Mysql进程是否超出标准,超标的话,自动重启,没有的话,记录进程数据.<br/><br/>Crontab的内容(每30分钟执行一次,并将结果记录在/var/log/chksys.log)<br/><br/>0,30 * * * * root /usr/local/chksys.sh &gt;&gt; /var/log/chksys.log<br/><br/>/usr/local/chksys.sh代码:<br/><br/>#!/bin/bash<br/>#check apache,mysql thread and auto reboot system<br/>#Powered by ipaddr(aspbiz)<br/><br/>#config<br/>MaxApacheThread=300<br/>MaxMysqlThread=250<br/><br/>NeedReboot=0<br/><br/>ApacheThread=`ps -A|grep http|wc -l`<br/>MysqlThread=`ps -A|grep mysql|wc -l`<br/><br/>if [ ＄ApacheThread -gt ＄MaxApacheThread ]<br/>then<br/>NeedReboot=1<br/>fi<br/><br/>if [ ＄MysqlThread -gt ＄MaxMysqlThread ]<br/>then<br/>NeedReboot=1<br/>fi<br/><br/>if [ ＄NeedReboot -eq 1 ]<br/>then<br/>echo “—————————–”<br/>echo ＄(date +”%y-%m-%d %H:%M:%S”<br/>echo “—————————–”<br/>echo “Apache:＄ApacheThread;Mysql:＄MysqlThread.”<br/>echo “System is busy,reboot”<br/>reboot<br/>else<br/>echo “—————————–”<br/>echo ＄(date +”%y-%m-%d %H:%M:%S”<br/>echo “—————————–”<br/>echo “Apache:＄ApacheThread;Mysql:＄MysqlThread.”<br/>echo “System is normal”<br/>fi<br/><br/>SVN服务器搭建完全手册<br/>cvs, 版本控制, 系统维护, Linux, svn准备，下载所需要文件.<br/>检查已安装的 Apache2 是否已经安装了 mod_dav .<br/>编译SVN，遇到的问题和解决方法<br/>使用 默认文件系统(fsfs) 保存数据<br/>使用 Berkeley DB 保存数据<br/>配置Apache和SVN，测试.<br/>其它小结<br/>从Windows平台上数据转移<br/>配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息.<br/>基于路径的权限控制<br/>常用SVN命令<br/>相关资源<br/>准备，下载所需要文件<br/>本文测试环境<br/><br/>Linux MY_SERVER 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux<br/><br/>Apache 2.2.2<br/><br/>最新的版本 Subversion 可以在这里找到 ：<a href="http://subversion.tigris.org/project_packages.html" target="_blank" rel="external">http://subversion.tigris.org/project_packages.html</a><br/><br/>检查已安装的 Apache2 是否已经安装了 mod_dav<br/>如果已经成功安装了Apache，使用 httpd -M 来查看有没有安装 dav_module，如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache，否则即使编译通过了svn,apache也会启动不起来.<br/><br/>编译APACHE2.2<br/><br/>修改部分源代码<br/><br/># vi server/mpm/worker/worker.c<br/><br/>找到下面几行，并改成如下的数值，其目的是在源码中修改apache可支持的 最大线程数和最大客户端数目。<br/><br/># define DEFAULT_SERVER_LIMIT 256<br/># define MAX_SERVER_LIMIT 40000<br/># define DEFAULT_THREAD_LIMIT 256<br/># define MAX_THREAD_LIMIT 40000<br/><br/>编译配置<br/>优化编译选项及配置apache可加载的模块<br/><br/># CFLAGS=”-O6 -mpentiumpro -fomit-frame-pointer” CXX=gcc CXXFLAGS=”-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti” \<br/>&gt; ./configure –prefix=/usr/local/apache2.2 –enable-mods-shared=all \<br/>&gt; –enable-so –with-mpm=worker –enable-deflate \<br/>&gt; –enable-cache –enable-disk-cache –enable-mem-cache –enable-file-cache \<br/>&gt; –enable-proxy –enable-suexec<br/><br/>编译及安装<br/><br/># gmake &amp;&amp; make install<br/><br/>优化apache配置选项<br/>修改MPM（多道处理器）参数<br/><br/># cd /usr/local/apache2.2<br/># vi conf/extra/httpd-mpm.conf<br/><br/>找到如下选项，并改成对应的数值<br/><br/>ServerLimit 64<br/>ThreadLimit 128<br/>StartServers 8<br/>MaxClients 8192<br/>MinSpareThreads 50<br/>MaxSpareThreads 256<br/>ThreadsPerChild 128<br/>MaxRequestsPerChild 0<br/><br/>修改apache2.2子进程所有者<br/><br/># vi /usr/local/apache2.2/conf/httpd.conf<br/>把daemon改为nobody<br/>User nobody<br/>Group nobody<br/><br/>编译SVN，遇到的问题和解决方法<br/>使用默认的文件系统保存数据.<br/><br/>最终完整通过安装和测试的编译参数为：<br/><br/>./configure –with-apxs=/usr/local/apache2/bin/apxs \<br/>–with-apr=/home/src/server/httpd-2.2.2/srclib/apr \<br/>–with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-util<br/><br/># make<br/># make install<br/><br/>其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹，根据实际情况调整一下.<br/><br/>遇到问题<br/>–with-apr 和 –with-apr-util 如果没有加上的话，即使编译成功了也会出现<br/>Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument<br/><br/>这样的错误提示.<br/><br/>暂时不能使用 Berkeley DB [* 已解决]<br/>svn保存文件更新数据库的方法有两个，一种是直接使用 fs (filesystem)来保存,另一种是通过Oracle提供支持的开源数据库 Berkeley DB 进行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就会configure时就会报错.<br/><br/>configure: error: APR-UTIL was installed independently, it won’t be<br/>possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4<br/><br/>我想 apr-unit 暂时不支持吧，我们就用默认的fs好了.<br/><br/>在make 的时候可能会遇到缺少 srclib/apr/libapr-1.la，srclib/apr-util/libaprutil-1.la 两个文件，找不到而make error.<br/>解决办法：/usr/local/apache2/lib/ 中找到，将其复制到源代码文件夹相应的位置中.<br/><br/>Up&#100;ate!!!<br/>使用 BerkeleyDB 保存数据<br/>安装 BerkeleyDB<br/><br/>cd /usr/local/src<br/>$ wget <a href="http://downloads.sleepycat.com/db-4.3.29.tar.gz" target="_blank" rel="external">http://downloads.sleepycat.com/db-4.3.29.tar.gz</a><br/>$ tar xzvf db-4.3.29.tar.gz<br/>$ cd /usr/local/src/db-4.3.29/build_unix<br/>$ ../dist/configure –enable-compat185<br/>$ make<br/>$ make install<br/>更新apr和apr-util源代码<br/><br/># 清理编译后的.la文件<br/>$ cd /usr/local/src/httpd-2.2.3<br/>$ make clean<br/>$ cd /usr/local/src/subversion-1.3.2<br/>$ rm -rf apr<br/>$ rm -rf apr-util<br/>$ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./<br/>$ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./<br/>编译安装<br/><br/># /configure –with-apxs=/usr/local/apache2/bin/apxs \<br/>&gt; –with-berkeley-db=/usr/local/BerkeleyDB.4.3 \<br/>&gt; –with-ssl<br/># make<br/># make install<br/><br/>遇到问题<br/>BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误.<br/>configure: error: APR-UTIL was installed independently, it won’t be<br/>possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4<br/><br/>主要是apr-util 暂时不支持4.4的版本.<br/><br/>必须更新apr，apr-util 源代码.<br/>subversion-1.3.2 自带的 apr-util 的版本是0.9.6的,必须升级为 1.2.7 虽然能编译过去。但在 svn checkout 的时候会提示<br/><br/>svn: REPORT request failed on ‘/!svn/vcc/default’<br/>svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server.<br/><br/>这个问题困扰了我很长时间，Google和官方论坛都无结果。后来昨天竟然自己无意中解决了，感动的得哭了:)<br/><br/>配置Apache和SVN，测试<br/>成功编译svn后会在 httpd.conf 中自动加上<br/><br/>LoadModule dav_svn_module modules/mod_dav_svn.so<br/>LoadModule authz_svn_module modules/mod_authz_svn.so<br/><br/>两个模块，没有的话，自行加上或检测是否真的编译成功.<br/><br/>假设我们现在要将一个名为 Lair 的项目导入到 SVN中<br/><br/>Apache的配置<br/>在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入<br/><br/>DAV svn<br/>SVNPath /home/svn/Lair<br/><br/>可以参考以下apache的配置，实现数据加密传输，用户身份验证.<br/><br/>Listen 443<br/><br/>AddType application/x-x509-ca-cert .crt<br/>AddType application/x-pkcs7-crl .crl.<br/><br/>SSLPassPhraseDialog exec:/etc/sendsslpwd<br/>SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)<br/>SSLSessionCacheTimeout 300<br/>SSLMutex file:/usr/local/apache2/logs/ssl_mutex<br/><br/>DocumentRoot /var/SVNRoot<br/>ServerName svn.yousite.com:443<br/>ServerAdmin webmaster@yousite.com<br/><br/>DAV svn<br/>SVNPath /var/SVNRoot<br/>AuthzSVNAccessFile /etc/svnserve.conf<br/>Satisfy Any<br/>AuthType Basic<br/>AuthName “yousite SVN Repository”<br/>AuthUserFile /etc/httpd-passwords.txt<br/>Require valid-user<br/><br/>SSLEngine on<br/>SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br/>SSLCertificateFile /etc/ssl/server.crt<br/>SSLCertificateKeyFile /etc/ssl/server.key<br/><br/>更详细的配置说明文档 <a href="http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html" target="_blank" rel="external"><a href="http://svnbook.red-bean.com/" target="_blank" rel="external">http://svnbook.red-bean.com/</a>nightly/en/svn.ref.mod_dav_svn.conf.html</a><br/><br/>配置，并且测试SVN，<br/>创建一个新用户,用了保存仓库.<br/><br/>useradd -m svn<br/><br/>创建一个新模块<br/><br/># su daemon #(apache是以daemon用户运行的,所以要切换身份，否则可能会报目录访问权限错误)<br/># svnadmin cr&#101;ate –fs-type fsfs /home/svn/Lair<br/><br/>导入原来的项目<br/><br/>svn import /var/www/Lair <a href="http://localhost/svn/Lair" target="_blank" rel="external">http://localhost/svn/Lair</a> -m ‘Initial import’<br/><br/>重新建立工作目录<br/><br/># rm -rf /var/www/Lair ##(注意备份!!)<br/># svn checkout <a href="http://localhost/svn/Lair" target="_blank" rel="external">http://localhost/svn/Lair</a><br/><br/>测试打开 <a href="http://localhost/svn/Lair" target="_blank" rel="external">http://localhost/svn/Lair</a><br/><br/>如能看到一个你项目录列表，说明您成功了。<br/><br/>其它小结<br/>数据转移:<br/>从 Windows 平台 SVN 服务器转移<br/>如果windows svn储存的格式也是dbd的话，直接将SVN的文件夹copy过来即可.然后<br/>执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏.<br/><br/>最后注意权限,确保 db 目录下的所有文件可写。<br/><br/>chmod 755 db<br/>chmod 666 db/*<br/><br/>否则checkout时出现以下错误，多数是因为 文件或者目录权限问题 引起的，可以尝试用 chown 或者 chmod 命令修改一下权限<br/><br/>Could not open the requested SVN filesystem<br/><br/>Could not open the requested SVN filesystem<br/><br/>另外一种方法没有测试过，原理大致和mysqldump一样，将svn导出为文本文件，然后重新导入，好处是可以避免因为存储格式不同而导致的数据转移困难。<br/><br/># dump data to file (assuming a repo @ c:\repo):<br/><br/>svnadmin dump c:\repo &gt; c:\repo.txt<br/># Copy the file over to linux:<br/>mkdir /repo<br/>svnadmin cr&#101;ate /repo<br/>svnadmin load /repo &lt; /repo.txt<br/><br/>设置访问控制<br/>当 httpd.conf 中 设置 AuthzSVNAccessFile 时，可以设置不同用户对不同目录的访问控制.以下是一个例子.<br/><br/>[groups]<br/>root = admin.root<br/>web = user1,user2<br/>soft = user3,user4<br/><br/>[/]<br/>@root = rw<br/><br/>[/www]<br/><br/>@web = rw<br/><br/>[/soft]<br/>@soft = rw<br/><br/>详细的说明文档：<a href="http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html" target="_blank" rel="external"><a href="http://svnbook.red-bean.com/" target="_blank" rel="external">http://svnbook.red-bean.com/</a>nightly/en/svn.serverconfig.httpd.html</a><br/><br/>配置文件，使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息(自动属性).<br/>Windows : C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config<br/>Linux : ~\.subversion\config<br/>[miscellany]<br/><br/>enable-auto-props = yes<br/>[auto-props]<br/>*.php=svn:keywords=Id<br/>*.html=svn:keywords=Id<br/><br/>关于自动属性的更高级讨论<br/><br/>几条常用svn 命令<br/>$ svn up&#100;ate<br/>$ svn add “filename”<br/>$ svn commit<br/><br/>参考<br/><a href="http://subversion.tigris.org/faq.html" target="_blank" rel="external">http://subversion.tigris.org/faq.html</a> [FAQ]<br/><a href="http://svnbook.red-bean.com/" target="_blank" rel="external">http://svnbook.red-bean.com/</a> [文档]<br/><a href="http://www.svnforum.org/" target="_blank" rel="external">http://www.svnforum.org/</a> [论坛]<br/><a href="http://d.hatena.ne.jp/cooldaemon/searchdiary?word=%2a%5bSubversion%5d" target="_blank" rel="external">http://d.hatena.ne.jp/cooldaemon/searchdiary?word=%2a%5bSubversion%5d</a><br/><a href="http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html" target="_blank" rel="external">http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html</a><br/><a href="http://www.germane-software.com/~ser/R_n_R/subversion.html" target="_blank" rel="external">http://www.germane-software.com/~ser/R_n_R/subversion.html</a>#ftn.N45<br/><a href="http://zen.sh.nu/book/zh/index.html" target="_blank" rel="external">http://zen.sh.nu/book/zh/index.html</a><br/><br/> <br/><br/> <br/><br/>写的挺好的，收藏了 <br/> <br/><br/> <br/> 原文地址 <a href="http://www.xpv.cn/home/apache22deyouhuajimokuaianzhuang.html" target="_blank" rel="external">http://www.xpv.cn/home/apache22deyouhuajimokuaianzhuang.html</a>&nbsp;&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=591</link>
			<title><![CDATA[MyISAM和InnoDB的一些记录]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Mysql数据管理]]></category>
			<pubDate>Tue,11 May 2010 16:27:49 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=591</guid>
		<description><![CDATA[MyISAM和InnoDB的一些记录<br/>key_buffer_size - 这对MyISAM表来说非常重要。如果只是使用MyISAM表，可以把它设置为可用内存的 30-40%。合理的值取决于索引大小、数据量以及负载。<br/>记住，MyISAM表会使用操作系统的缓存来缓存数据，因此需要留出部分内存给它们，很多情况下数据比索引大多了。尽管如此，需要总是检查是否所有的 key_buffer 都被利用了。<br/>.MYI 文件只有 1GB，而 key_buffer 却设置为 4GB 的情况是非常少的。这么做太浪费了。如果你很少使用MyISAM表，那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。<br/><br/>innodb_buffer_pool_size - 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以，然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来，无需留给操作系统太多的内存，因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。如果你的数据量不大，并且不会暴增，那么无需把 innodb_buffer_pool_size 设置的太大了。<br/><br/><br/>innodb_additional_pool_size - 这个选项对性能影响并不太多，至少在有差不多足够内存可分配的操作系统上是这样。不过如果你仍然想设置为 20MB(或者更大)，因此就需要看一下Innodb其他需要分配的内存有多少。<br/><br/>innodb_log_file_size 在高写入负载尤其是大数据集的情况下很重要。这个值越大则性能相对越高，但是要注意到可能会增加恢复时间。我经常设置为 64-512MB，跟据服务器大小而异。innodb_log_buffer_size 默认的设置在中等强度写入负载以及较短事务的情况下，服务器性能还可以。如果存在更新操作峰值或者负载较大，就应该考虑加大它的值了。如果它的值设置太高了，可能会浪费内存。它每秒都会刷新一次，因此无需设置超过1秒所需的内存空间。通常 8-16MB 就足够了。越小的系统它的值越小。<br/><br/>innodb_flush_logs_at_trx_commit 是否为Innodb比MyISAM慢1000倍而头大？看来也许你忘了修改这个参数了。默认值是 1，这意味着每次提交的更新事务（或者每个事务之外的语句）都会刷新到磁盘中，而这相当耗费资源，尤其是没有电池备用缓存时。很多应用程序，尤其是从 MyISAM转变过来的那些，把它的值设置为 2 就可以了，也就是不把日志刷新到磁盘上，而只刷新到操作系统的缓存上。日志仍然会每秒刷新到磁盘中去，因此通常不会丢失每秒1-2次更新的消耗。如果设置为 0 就快很多了，不过也相对不安全了。MySQL服务器崩溃时就会丢失一些事务。设置为 2 指挥丢失刷新到操作系统缓存的那部分事务。<br/><br/>table_cache - 打开一个表的开销可能很大。例如MyISAM把MYI文件头标志该表正在使用中。你肯定不希望这种操作太频繁，所以通常要加大缓存数量，使得足以最大限度地缓存打开的表。它需要用到操作系统的资源以及内存，对当前的硬件配置来说当然不是什么问题了。如果你有200多个表的话，那么设置为 1024 也许比较合适（每个线程都需要打开表），如果连接数比较大那么就加大它的值。我曾经见过设置为 100,000 的情况。<br/><br/>thread_cache - 线程的创建和销毁的开销可能很大，因为每个线程的连接/断开都需要。我通常至少设置为 16。如果应用程序中有大量的跳跃并发连接并且 Threads_Cr&#101;ated 的值也比较大，那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。<br/><br/>query_cache - 如果你的应用程序有大量读，而且没有应用程序级别的缓存，那么这很有用。不要把它设置太大了，因为想要维护它也需要不少开销，这会导致MySQL变慢。通常设置为 32-512Mb。设置完之后最好是跟踪一段时间，查看是否运行良好。在一定的负载压力下，如果缓存命中率太低了，就启用它。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>sclife.com.cn/blog/article.asp?id=590</link>
			<title><![CDATA[开始mysql的慢查询]]></title>
			<author>hoifish_010@163.om(hotfish)</author>
			<category><![CDATA[Mysql数据管理]]></category>
			<pubDate>Tue,11 May 2010 16:03:55 +0800</pubDate>
			<guid>sclife.com.cn/blog/default.asp?id=590</guid>
		<description><![CDATA[<a href="http://faq.comsenz.com/viewnews-58" target="_blank" rel="external">http://faq.comsenz.com/viewnews-58</a><br/><br/>在运营网站的过程中，可能会遇到网站突然变慢的问题，一般情况下和 MySQL 慢有关系，可以通过开启慢查询，找到影响效率的 SQL ，然后采取相应的措施。下面介绍一下如何开启慢查询：<br/><br/>1、开启慢查询 <br/><br/>找到 MySQL 的配置文件 ，my.cnf （Windows 为 my.ini ），在 MySQL 下增加下面几行：<br/><br/>long_query_time=2<br/>log-slow-queries= /usr/var/slowquery.log<br/>上面的 2 是查询的时间，即当一条 SQL 执行时间超过2秒的时候才记录，/usr/var/slowquery.log 是日志记录的位置。<br/><br/>然后重新启动MySQL服务<br/><br/><br/>一步通过：cat /usr/local/mysql51/tmp/mysql_slow.log| grep Query_time: | awk &#39;{print $3}&#39; | sort|uniq -c|sort -rn <br/>(对数据的查询时间排序)<br/>二步通过：然后vi /usr/local/mysql51/tmp/mysql_slow.log 通过时间 找到问题的语句<br/><br/><br/>mysql 5.1的方法<br/><br/>slow_query_log<br/>long_query_time=2<br/>slow_query_log_file=/usr/local/mysql51/tmp/mysql_slow.log <br/><br/>==============================================================<br/>MYSQL记录慢速查询SQL语句2009-08-05 13:28在一个 SQL 服务器中，数据表都是保存在磁盘上的。索引为服务器提供了一种在表中查找特定数据行的方法，而不用搜索整个表。当必须要搜索整个表时，就称为表扫描。通常来说，您可能只希望获得表中数据的一个子集，因此全表扫描会浪费大量的磁盘 I/O，因此也就会浪费大量时间。当必须对数据进行连接时，这个问题就更加复杂了，因为必须要对连接两端的多行数据进行比较。<br/><br/>当然，表扫描并不总是会带来问题；有时读取整个表反而会比从中挑选出一部分数据更加有效（服务器进程中查询规划器用来作出这些决定）。如果索引的使用效率很低，或者根本就不能使用索引，则会减慢查询速度，而且随着服务器上的负载和表大小的增加，这个问题会变得更加显著。执行时间超过给定时间范围的查询就称为慢速查询。<br/><br/>您可以配置 mysqld 将这些慢速查询记录到适当命名的慢速查询日志中。管理员然后会查看这个日志来帮助他们确定应用程序中有哪些部分需要进一步调查。清单 1 给出了要启用慢速查询日志需要在 my.cnf 中所做的配置。<br/><br/><br/>清单 1. 启用 MySQL 慢速查询日志<br/>[mysqld]<br/>; enable the slow query log, default 10 seconds<br/>log-slow-queries<br/>; log queries taking longer than 5 seconds<br/>long_query_time = 5<br/>; log queries that don&#39;t use indexes even if they take less than long_query_time<br/>; MySQL 4.1 and newer only<br/>log-queries-not-using-indexes<br/> <br/><br/><br/>这三个设置一起使用，可以记录执行时间超过 5 秒和没有使用索引的查询。请注意有关 log-queries-not-using-indexes 的警告：您必须使用 MySQL 4.1 或更高版本。慢速查询日志都保存在 MySQL 数据目录中，名为 hostname-slow.log。如果希望使用一个不同的名字或路径，可以在 my.cnf 中使用 log-slow-queries = /new/path/to/file 实现此目的。<br/><br/>阅读慢速查询日志最好是通过 mysqldumpslow 命令进行。指定日志文件的路径，就可以看到一个慢速查询的排序后的列表，并且还显示了它们在日志文件中出现的次数。一个非常有用的特性是 mysqldumpslow 在比较结果之前，会删除任何用户指定的数据，因此对同一个查询的不同调用被计为一次；这可以帮助找出需要工作量最多的查询。<br/> <br/><br/><br/>]]></description>
		</item>
		
</channel>
</rss>
