<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></title> 
<link>http://www.bizeway.net/index.php</link> 
<description><![CDATA[网务通 - 网务公司发展之路]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></copyright>
<item>
<link>http://www.bizeway.net/read.php?613</link>
<title><![CDATA[Apache Rewrite解决问号匹配的写法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Mon, 05 Nov 2012 09:33:35 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?613</guid> 
<description>
<![CDATA[ 
	<p>这个问题我用了一个上午终于解决了，需求是这样的：</p><p>A地址：域名/ProductView.jsp?lClassID=200</p><p>B地址：域名/goods.php?id=3</p><p>实现把用户输A地址跳到B地址，就是跳转的功能。</p><p>原先用我用最常的方法实现如：RewriteRule ^ProductView.jsp?lClassID=200$&nbsp;&nbsp;&nbsp; goods.php?id=3 [L]<br />看上去是没有问题的，但在地址上输入跳转不了。后来网上查了一下资料如下：</p><p>规则： <br />引用自 <br />文本<br />. 任意一个单字符<br />[chars] 字符类: &quot;chars&quot;中的任意一个字符<br />[^chars] 字符类: 不在&quot;chars&quot;中的字符<br />text1&#124;text2 选择: text1 或 text2</p><p>量词<br />? 前面的字符出现 0 或 1 次<br />* 前面的字符出现 0 或 N 次(N &gt; 0)<br />+ 前面的字符出现 1 或 N 次(N &gt; 1</p><p>原来这样：?号把前面的p也作为参数了，p?（&#92;?）就变成了$1,当在地址中输入<a href="http://www.geekso.com/ProductView.jslClassID=200">http://www.geekso.com/ProductView.jslClassID=200</a> 可实现跳转,但这显然不是需求那样的.<br />本来都想放弃用重写了，在网上又找了一下终于找到了，功夫不负有心人啊，<br />解决方法如下：</p><p>RewriteCond %{QUERY_STRING} ^lClassID=200$<br />RewriteRule ^ProductView&#92;.jsp$ goods&#92;.php&#92;?id=3 [L]</p><p>我找到的相关资料:</p><p>把 /abc?id=123&nbsp; =&gt;&nbsp; /def.php?id=123 的写法：</p><p>RewriteEngine on<br />RewriteCond %{QUERY_STRING} ^id=(.+)$<br />RewriteRule ^/abc$ /def.php?sid=%1 [L]</p><p>RewriteRule 不会去匹配 ? 后面的字符串，需要用RewriteCond来匹配<br /></p><br/>Tags - <a href="tag.php?tag=apache" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?598</link>
<title><![CDATA[查看 Apache并发请求数及其TCP连接状态]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Tue, 17 Apr 2012 07:46:45 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?598</guid> 
<description>
<![CDATA[ 
	服务器上的一些统计数据：<br/><br/>1)统计80端口连接数<br/>netstat -nat&#124;grep -i "80"&#124;wc -l<br/><br/>2）统计httpd协议连接数<br/>ps -ef&#124;grep httpd&#124;wc -l<br/><br/>3）、统计已连接上的，状态为“established<br/>netstat -na&#124;grep ESTABLISHED&#124;wc -l<br/><br/>4)、查出哪个IP地址连接最多,将其封了.<br/>netstat -na&#124;grep ESTABLISHED&#124;awk {print $5}&#124;awk -F: {print $1}&#124;sort&#124;uniq -c&#124;sort -r +0n<br/><br/>netstat -na&#124;grep SYN&#124;awk {print $5}&#124;awk -F: {print $1}&#124;sort&#124;uniq -c&#124;sort -r +0n<br/><br/>---------------------------------------------------------------------------------------------<br/><br/>1、查看apache当前并发访问数：<br/>netstat -an &#124; grep ESTABLISHED &#124; wc -l<br/><br/>对比httpd.conf中MaxClients的数字差距多少。<br/><br/>2、查看有多少个进程数：<br/>ps aux&#124;grep httpd&#124;wc -l<br/><br/>3、可以使用如下参数查看数据<br/>server-status?auto<br/><br/>#ps -ef&#124;grep httpd&#124;wc -l<br/>1388<br/>统计httpd进程数，连个请求会启动一个进程，使用于Apache服务器。<br/>表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整。<br/><br/>#netstat -nat&#124;grep -i "80"&#124;wc -l<br/>4341<br/>netstat -an会打印系统当前网络链接状态，而grep -i "80"是用来提取与80端口有关的连接的，wc -l进行连接数统计。<br/>最终返回的数字就是当前所有80端口的请求总数。<br/><br/>#netstat -na&#124;grep ESTABLISHED&#124;wc -l<br/>376<br/>netstat -an会打印系统当前网络链接状态，而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。<br/>最终返回的数字就是当前所有80端口的已建立连接的总数。<br/><br/>netstat -nat&#124;&#124;grep ESTABLISHED&#124;wc - 可查看所有建立连接的详细记录<br/><br/>查看Apache的并发请求数及其TCP连接状态：<br/>　　Linux命令：<br/>netstat -n &#124; awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'<br/><br/>（这条语句是从 新浪互动社区事业部 新浪互动社区事业部技术总监王老大那儿获得的，非常不错）返回结果示例：<br/>　　LAST_ACK 5<br/>　　SYN_RECV 30<br/>　　ESTABLISHED 1597<br/>　　FIN_WAIT1 51<br/>　　FIN_WAIT2 504<br/>　　TIME_WAIT 1057<br/>　　其中的<br/>SYN_RECV表示正在等待处理的请求数；<br/>ESTABLISHED表示正常数据传输状态；<br/>TIME_WAIT表示处理完毕，等待超时结束的请求数。<br/><br/>---------------------------------------------------------------------------------------------<br/><br/>查看Apache并发请求数及其TCP连接状态<br/><br/>查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：<br/>　　Linux命令：<br/><br/>ps -ef &#124; grep httpd &#124; wc -l<br/><br/>　　返回结果示例：<br/>　　1388<br/>　　表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整，我这组服务器中每台的峰值曾达到过2002。<br/> <br/>查看Apache的并发请求数及其TCP连接状态：<br/>　　Linux命令：<br/> <br/>netstat -n &#124; awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'<br/>返回结果示例：<br/>　　LAST_ACK 5<br/>　　SYN_RECV 30<br/>　　ESTABLISHED 1597<br/>　　FIN_WAIT1 51<br/>　　FIN_WAIT2 504<br/>　　TIME_WAIT 1057<br/>　　其中的SYN_RECV表示正在等待处理的请求数；ESTABLISHED表示正常数据传输状态；TIME_WAIT表示处理完毕，等待超时结束的请求数。<br/>　　状态：描述<br/><br/>　　CLOSED：无连接是活动 的或正在进行<br/><br/>　　LISTEN：服务器在等待进入呼叫<br/><br/>　　SYN_RECV：一个连接请求已经到达，等待确认<br/><br/>　　SYN_SENT：应用已经开始，打开一个连接<br/><br/>　　ESTABLISHED：正常数据传输状态<br/><br/>　　FIN_WAIT1：应用说它已经完成<br/><br/>　　FIN_WAIT2：另一边已同意释放<br/><br/>　　ITMED_WAIT：等待所有分组死掉<br/><br/>　　CLOSING：两边同时尝试关闭<br/><br/>　　TIME_WAIT：另一边已初始化一个释放<br/><br/>　　LAST_ACK：等待所有分组死掉<br/><br/> <br/><br/>如发现系统存在大量TIME_WAIT状态的连接，通过调整内核参数解决，<br/>vim /etc/sysctl.conf<br/>编辑文件，加入以下内容：<br/>net.ipv4.tcp_syncookies = 1<br/>net.ipv4.tcp_tw_reuse = 1<br/>net.ipv4.tcp_tw_recycle = 1<br/>net.ipv4.tcp_fin_timeout = 30<br/>然后执行 /sbin/sysctl -p 让参数生效。<br/><br/>net.ipv4.tcp_syncookies = 1 表示开启SYN cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br/>net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br/>net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭。<br/>net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间<br/>下面附上TIME_WAIT状态的意义：<br/><br/>客户端与服务器端建立TCP/IP连接后关闭SOCKET后，服务器端连接的端口<br/>状态为TIME_WAIT<br/><br/>是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢？<br/>有没有什么情况使主动关闭的socket直接进入CLOSED状态呢？<br/><br/>主动关闭的一方在发送最后一个 ack 后<br/>就会进入 TIME_WAIT 状态 停留2MSL（max segment lifetime）时间<br/>这个是TCP/IP必不可少的，也就是“解决”不了的。<br/><br/>也就是TCP/IP设计者本来是这么设计的<br/>主要有两个原因<br/>1。防止上一次连接中的包，迷路后重新出现，影响新连接<br/>（经过2MSL，上一次连接中所有的重复包都会消失）<br/>2。可靠的关闭TCP连接<br/>在主动关闭方发送的最后一个 ack(fin) ，有可能丢失，这时被动方会重新发<br/>fin, 如果这时主动方处于 CLOSED 状态 ，就会响应 rst 而不是 ack。所以<br/>主动方要处于 TIME_WAIT 状态，而不能是 CLOSED 。<br/><br/>TIME_WAIT 并不会占用很大资源的，除非受到攻击。<br/><br/>还有，如果一方 send 或 recv 超时，就会直接进入 CLOSED 状态<br/><br/>如何合理设置apache httpd的最大连接数？<br/><br/>手头有一个网站在线人数增多，访问时很慢。初步认为是服务器资源不足了，但经反复测试，一旦连接上，不断点击同一个页面上不同的链接，都能迅速打开，这种现象就是说明apache最大连接数已经满了，新的访客只能排队等待有空闲的链接，而如果一旦连接上，在keeyalive 的存活时间内（KeepAliveTimeout，默认5秒）都不用重新打开连接，因此解决的方法就是加大apache的最大连接数。<br/><br/>1.在哪里设置？<br/>apache 2.24，使用默认配置（FreeBSD 默认不加载自定义MPM配置），默认最大连接数是250<br/><br/>在/usr/local/etc/apache22/httpd.conf中加载MPM配置（去掉前面的注释）：<br/># Server-pool management (MPM specific)<br/>Include etc/apache22/extra/httpd-mpm.conf<br/><br/>可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf，但里面根据httpd的工作模式分了很多块，哪一部才是当前httpd的工作模式呢？可通过执行 apachectl -l 来查看：<br/>Compiled in modules:<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;core.c<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;prefork.c<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;http_core.c<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mod_so.c<br/><br/>看到prefork 字眼，因此可见当前httpd应该是工作在prefork模式，prefork模式的默认配置是：<br/><IfModule mpm_prefork_module><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MinSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;150<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxRequestsPerChild &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0<br/></IfModule><br/><br/>2.要加到多少？<br/><br/>连接数理论上当然是支持越大越好，但要在服务器的能力范围内，这跟服务器的CPU、内存、带宽等都有关系。<br/><br/>查看当前的连接数可以用：<br/>ps aux &#124; grep httpd &#124; wc -l<br/><br/>或：<br/>pgrep httpd&#124;wc -l<br/><br/>计算httpd占用内存的平均数:<br/>ps aux&#124;grep -v grep&#124;awk '/httpd/{sum+=$6;n++};END{print sum/n}'<br/><br/>由于基本都是静态页面，CPU消耗很低，每进程占用内存也不算多，大约200K。<br/><br/>服务器内存有2G，除去常规启动的服务大约需要500M（保守估计），还剩1.5G可用，那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368<br/><br/>约8K个进程，支持2W人同时访问应该是没有问题的（能保证其中8K的人访问很快，其他的可能需要等待1、2秒才能连上，而一旦连上就会很流畅）<br/><br/>控制最大连接数的MaxClients ，因此可以尝试配置为：<br/><IfModule mpm_prefork_module><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MinSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ServerLimit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5500<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5000<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxRequestsPerChild &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 100<br/></IfModule><br/><br/>注意，MaxClients默认最大为250，若要超过这个值就要显式设置ServerLimit，且ServerLimit要放在MaxClients之前，值要不小于MaxClients，不然重启httpd时会有提示。<br/><br/>重启httpd后，通过反复执行pgrep httpd&#124;wc -l 来观察连接数，可以看到连接数在达到MaxClients的设值后不再增加，但此时访问网站也很流畅，那就不用贪心再设置更高的值了，不然以后如果网站访问突增不小心就会耗光服务器内存，可根据以后访问压力趋势及内存的占用变化再逐渐调整，直到找到一个最优的设置值。<br/><br/>(MaxRequestsPerChild不能设置为0，可能会因内存泄露导致服务器崩溃）<br/><br/>更佳最大值计算的公式：<br/><br/>apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2<br/>apache_max_process = apache_max_process_with_good_perfermance * 1.5<br/><br/>附：<br/><br/>实时检测HTTPD连接数：<br/>watch -n 1 -d "pgrep httpd&#124;wc -l"<br/><br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?596</link>
<title><![CDATA[FreeBSD更改csh为bash产生错误的解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Fri, 30 Dec 2011 06:10:51 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?596</guid> 
<description>
<![CDATA[ 
	操作系统：freebsd 8.0-RELEASE<br/>接触freebsd一天，感觉很不习惯 想把shell改为熟悉的bash<br/>步骤<br/>#cd /usr/ports/shells/bash<br/># make install clean ##这条命令忘记执行了 结果直接执行了下面的命令<br/>#chsh -s /usr/local/bin/bash<br/>于是杯具出现了 重新登录错误<br/> <br/>su:/usr/local/bin/bash: no such file or directory<br/>可见粗心大意 害人不浅<br/>解决办法：<br/>重启进入单用户模式 #启动时选择4<br/>因为硬重启 所以开始先检测磁盘<br/>#fsck<br/>#mount -a <br/>#chpass -s /bin/csh <br/>重启正常登录 执行<br/># make install clean <br/> <br/>#vim /etc/profile<br/>在里面加入下面命令(这里根据自己情况修改 如果PS1变量正常 不需要改动)<br/> PS1="`whoami`@`hostname &#124; sed 's/&#92;..*//'`"<br/> case `id -u` in<br/> &nbsp; &nbsp; &nbsp; &nbsp;0) PS1="${PS1}# ";;<br/> &nbsp; &nbsp; &nbsp; &nbsp;*) PS1="${PS1}$ ";;<br/> esac<br/>注销重新登录即可<br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=csh" rel="tag">csh</a> , <a href="tag.php?tag=bash" rel="tag">bash</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?593</link>
<title><![CDATA[freebsd下使用的SSH命令]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Mon, 10 Oct 2011 06:51:30 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?593</guid> 
<description>
<![CDATA[ 
	ssh -l 用户名 -p 端口 hostip<br/>执行后，输入密码就可以连接到其他的服务器了。<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=ssh" rel="tag">ssh</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?563</link>
<title><![CDATA[肖飞：盗链图片显示我们的广告]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Tue, 13 Jul 2010 04:32:53 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?563</guid> 
<description>
<![CDATA[ 
	如果别人盗链我们的图片，我们就让他们显示我们的广告。呵呵！<br/>在httpd.conf 加入下面的语句。<br/><IfModule mod_rewrite.c><br/>RewriteEngine On<br/>RewriteCond %{HTTP_REFERER} !^http://www.5217U.com/.*$ [NC]<br/>RewriteCond %{HTTP_REFERER} !^http://www.5217U.com$ [NC]<br/>RewriteRule .*&#92;.(gif&#124;jpg&#124;png)$http://www.5217U.com/404.jpg[R,NC]<br/></IfModule><br/><br/>这样就大功告成了。肖飞倾情奉献！<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a> , <a href="tag.php?tag=%E9%98%B2%E7%9B%97%E9%93%BE" rel="tag">防盗链</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?560</link>
<title><![CDATA[linux/freebsd查看目录下文件大小的命令]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Thu, 01 Jul 2010 10:12:34 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?560</guid> 
<description>
<![CDATA[ 
	linux/freebsd查看目录大小的命令<br/>freebsd的命令:<br/>在某个目录里执行 du -h -d 1 可以查看目录里的每个子目录的大小<br/>df -h可以查看各mount点及磁盘空间的使用率!<br/>linux的命令:<br/>linux下则为: du -h --max-depth=1<br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=%E7%9B%AE%E5%BD%95" rel="tag">目录</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?559</link>
<title><![CDATA[FREEBSD 建目录上限]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Thu, 01 Jul 2010 09:05:56 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?559</guid> 
<description>
<![CDATA[ 
	FREEBSD 系统一般在I/O操作时,不只需要磁盘的空间 onodes也同样重要<br/><br/>onodes是根据磁盘空间自动设定的,也有办法调整<br/><br/>调整Inode数量<br/>另外，每个分区的Inode数目是有限的。<br/>可以使用df -i来查看<br/><br/># df -i<br/>Filesystem &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Inodes &nbsp; IUsed &nbsp; IFree IUse% Mounted on<br/>/dev/mapper/VolGroup00-LogVol00<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1958400 &nbsp; 97435 1860965 &nbsp; &nbsp;5% /<br/>/dev/sda1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;26104 &nbsp; &nbsp; &nbsp;32 &nbsp; 26072 &nbsp; &nbsp;1% /boot<br/>/dev/shm &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 23850 &nbsp; &nbsp; &nbsp; 1 &nbsp; 23849 &nbsp; &nbsp;1% /dev/shm<br/><br/>当一个磁盘分区（文件子系统）的Inode被用光的时候，是无法再创建文件的。<br/>这种情况在邮件服务器或者BBS这种系统中容易出现，因为用户创建了很多小文件的情况。<br/><br/>要增加Inode的数量只能umount文件系统，然后用newfs命令来调整<br/><br/>#newfs /dev/sda1 -i 调整字节/inode的比例，来达到增加创建inode数目的目的。<br/>磁盘空间一定的情况下，当然比例越小，能创建的Inode就越多<br/><br/>不过注意。调整Inode相当于重新格式化了分区。原有的文件都会丢失<br/>所以确实需要调整的话，先要备份数据；<br/>或者在服务器搭建时预先设置好。<br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=inode" rel="tag">inode</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?557</link>
<title><![CDATA[BSD的虚拟磁盘技术]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Thu, 17 Jun 2010 04:06:52 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?557</guid> 
<description>
<![CDATA[ 
	去掉开机自动加载虚拟磁盘并mount到/var,网上有资料说：<br/>It seems that you have set "varmfs=YES" in you /etc/rc.conf or /var is not popular writable<br/>然后按照下面的操作就可解决。<br/>vi /etc/rc.conf<br/>varmfs="NO" <br/>populate_var="NO"# mdconfig -a -t swap -s 30M <br/>这就会在虚拟内存中申请30M空间，并创建虚拟磁盘，使用的虚拟设备为第 一个md设备md0，如果系统中的md0设备已经被占用，那么mdconfig就依序向后寻找下一个空余的md设备，并创建它。由于mdconfig能自 动创建新的设备，这样就解决了在内核配置文件指定伪设备数量的问题。 <br/>也可以使用-u指定使用的md伪设备的序号，例如下列命令将创建md10，并使用它作为虚拟磁盘设备：<br/># mdconfig -a -t swap -s 30M -u 10 <br/>上面的命令都是使用虚拟内存空间作为数据存储空间，是由swap参数指定的。同样，使用mdconfig也能从内核空间中创建虚拟磁盘，此时-t指定的存储类型参数为malloc，这告诉内核使用内核的MALLOC方法申请内存。 <br/># mdconfig -a -t malloc -s 30M <br/>这种方法就相当于老的md设备的申请内存的方法，但显然更为灵活，因为可以在具体使用过程中申请内存和设备，这是因为FreeBSD 5.0的内核允许更灵活的使用MALLOC内存申请方式。当然，一般还是主要使用swap申请虚拟空间的内存。 <br/>由于mdconfig和伪设备md将完全代替vnconfig和伪设备vn，那么使用mdconfig也能创建使用文件作为虚拟磁盘的与vn兼容的方式，这需要指定存储类型参数为vnode，并使用　-f指定具体的存储数据的物理文件名字。 <br/># mdconfig -a -t vnode -f imagefile -s 30M <br/>在使用mdconfig配置好虚拟磁盘之后，就可以使用disklabel、newfs、mount等管理虚拟磁盘。而在不需要这些虚拟磁盘的时候，就可以卸载相应的文件系统，并使用mdconfig删除指定的磁盘等。 <br/># mdconfig -l <br/>使用参数”-l”，则mdconfig列出系统中所有的虚拟磁盘设备。 <br/># mdconfig -d -u 0 <br/>为了删除指定了磁盘，需要使用”-d"参数，而使用"-u 0”则指定删除序号为0的虚拟磁盘，即md0。<br/>Tags - <a href="tag.php?tag=%E8%99%9A%E6%8B%9F%E7%A3%81%E7%9B%98%E6%8A%80%E6%9C%AF" rel="tag">虚拟磁盘技术</a> , <a href="tag.php?tag=freebsd" rel="tag">freebsd</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?556</link>
<title><![CDATA[转freebsd+nginx+php+mysql+zend+phpmyadmin+系统优化+防止ddos +傻瓜式ports安装法 ]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Wed, 09 Jun 2010 06:24:49 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?556</guid> 
<description>
<![CDATA[ 
	 看了张宴的《linux版本的Nginx 0.5.33 + PHP 5.2.5》后，马上找了一台服务器测试了一下，然后加了一个线上的discuz的论坛跑了一下，性能非常的卓越，感叹搜遍整个互联网，就是nginx+php唯一的一篇文档。对于他的文档，我认为：写的非常专业，对于php extensions库也分析的非常透彻。但是一篇专业的文档，也存在一些专业带来的麻烦，就是起点有点高，假如要更新里面的软件包和定义自己的目录，势必需要一点波折。另外不知道为何，最近网站老是打不开。情急之下，小弟重新写了一篇freebsd下面的傻瓜式安装文档。<br/>2. 又结合了平时的一些经验，顺便把如何防卸ddos，并通过对系统的优化，如何来进一步提高nginx的并发数做 一些详解。<br/>3. 由于个人能力有限，错误的地方，还请读者谅解<br/><br/>一、安装软件前的准备<br/>系统的安装：插入freebsd6.2以上的光盘，最小化安装系统，同时安装好ports<br/>二、手动安装nginx+php<br/>1) 进入系统后，准备cvs更新：<br/>1. cd /usr/ports/net/cvsup-without-gui<br/>2. cp /usr/share/examples/cvsup/ports-supfile /etc/ports-supfile<br/>3. # vi /etc/ports-supfile<br/>将其中的#*default host=CHANGE_THIS.FreeBSD.org一行改为<br/>*default host=cvsup4.FreeBSDchina.org<br/>4. 更新ports<br/>/usr/local/bin/cvsup -g -L 2 /etc/ports-supfile<br/>2) 安装mysql<br/>#cd /usr/ports/databases/mysql51-server<br/>#make thread-safe-client=enable dtrace=disable assembler=enable with_big_tables=yes with_embedded_server=yes with_local_infile=yes with_plugins=partition,innobase,myisammrg WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_COLLATION=utf8_general_ci WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes install clean<br/>#cp /usr/local/share/mysql/my-large.cnf /usr/local/etc/my.cnf ##mysql的优化参数，也可以手动修改<br/>#rehash<br/># mysql_install_db –user=mysql ##初始化mysql<br/>#/usr/local/bin/mysqld_safe & ##启动mysql<br/>#/usr/local/bin/mysqladmin -u root password ‘newpass’ ##修改root密码，newpass是你需要改的密码<br/>关闭mysql可以使用mysqladmin -uroot -p shutdown<br/>3) 安装php<br/>#cd /usr/ports/lang/php5<br/>#make config ##配置编译参数<br/>[X] CLI Build CLI version<br/>[X] CGI Build CGI version<br/>[ ] APACHE Build Apache module<br/>[ ] DEBUG Enable debug<br/>[X]] SUHOSIN Enable Suhosin protection system<br/>[X] MULTIBYTE Enable zend multibyte support<br/>[ ] IPV6 Enable ipv6 support<br/>[ ] REDIRECT Enable force-cgi-redirect support (CGI only)<br/>[ ] DISCARD Enable discard-path support (CGI only)<br/>[X] FASTCGI Enable fastcgi support (CGI only)<br/>[X] PATHINFO Enable path-info-check support (CGI only)<br/>#make install clean<br/># cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini ##cp php.ini配置文件<br/>4) 安装php5-extensions<br/># cd /usr/ports/lang/php5-extensions/<br/>#make config<br/>Options for php5-extensions 1.1<br/>————————————————-<br/>[X] CURL CURL support<br/>[X] FTP FTP support<br/>[X] GD<br/>[X] GETTEXT<br/>[X] MBSTRING multibyte string support<br/>[X] MCRYPT Encryption support<br/>[X] MYSQL<br/>[X] PCRE Perl Compatible Regular Expression support<br/>[ ] POSIX //去掉.<br/>[ ] SQLITE //去掉.<br/>[X] ZIP ZIP support<br/>[X] ZLIB<br/># make install clean<br/>5) 安装Zend Optimizer<br/>#cd /usr/ports/devel/ZendOptimizer/<br/>#make #不要安装，只需要下载解包<br/>#cd /usr/ports/devel/ZendOptimizer/work/ZendOptimizer-*<br/>#./install-tty ##会出现一个文字的安装界面，只是最后一步，不要选择apache就可以了<br/>#vi /usr/local/etc/php.ini #插入zend的路径，一般来说，上面的安装会自动加入下面的文字，假如没有，请手动添加。<br/><br/>[Zend]<br/>zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0<br/>zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0<br/>zend_optimizer.version=3.3.0a<br/>zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so<br/>zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so<br/><br/>小提示：安装zend，在freebsd下面，目前只有支持到 php5.1.x，对于php5.2.x还不能支持，因为zend还没有为php5.2.x开发版本，在网上查了好多关于解决此类的问题，但得到的结果是，zend可以顺利安装，phpinfo也显示zend正常了，但程序无法调用，即zend没有工作，也就是目前无法解决，我想只有等到zend php5.2.x的版本后，才可以解决此问题，也希望哪位已经解决此类问题的兄弟，share一下你的经验。假如你非要使用zend，那就请你将php降到5.1.x，或者你不当心已经升级了ports，那建议你可以安装php4.x，毕竟目前php4.x还通用于大部分的环境<br/>6) 安装nginx<br/>#cd /usr/ports/www/nginx/<br/>#make install<br/>7) 安装lighttpd，为了得到fastcgi<br/># cd /usr/ports/www/lighttpd/<br/>#make install<br/>#rehash<br/> 配置nginx<br/>#user nobody<br/>删除前面的注释#，改成 user www<br/>#log_format main ‘$remote_addr – $remote_user [$time_local] ‘<br/># ‘”$request” $status $body_bytes_sent ‘<br/># ‘”$http_referer” “$http_user_agent”‘;<br/>log_format main ‘$remote_addr – $remote_user [$time_local] ‘<br/>‘”$request” $status $body_bytes_sent ‘<br/>‘”$http_referer” “$http_user_agent”‘;<br/>##以上步骤，为了能够正常分析log的pv，hits，访问量，才设定的，默认的log格式，是无法准确分析出所需要的结果<br/><br/>location / {<br/>root /usr/local/www/nginx;<br/>index index.html index.htm;<br/>}<br/>在index.html前面添加一个index.php<br/>location / {<br/>root /data/web/www.jk0086.com/htdocs;<br/>index index.php index.html index.htm;<br/>}<br/>#location ~ &#92;.php$ {<br/># fastcgi_pass 127.0.0.1:9000;<br/># fastcgi_index index.php;<br/># fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script.name;<br/># include fastcgi_params;<br/>#}<br/>将前面的#去掉，修改为<br/>location ~ &#92;.php$ {<br/>fastcgi_pass 127.0.0.1:9000;<br/>fastcgi_index index.php;<br/>fastcgi_param SCRIPT_FILENAME /usr/local/etc/nginx$fastcgi_script.name;<br/>include fastcgi_params;<br/>}<br/>##去掉注释，其实就是激活了nginx的fastcgi功能，也说明了nginx本身就已经准备用于fastcgi的环境中<br/><br/>9) 配置spawn-fcgi，就是一个启动fastcgi命令，使得nginx可以通过9000端口访问（纯粹个人理解-_-）<br/>参数说明：监听127.0.0.1的9000端口，进程数为64（如果服务器内存小于3GB，可以只开启25个进程），用户为www<br/>/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -C 64 -f /usr/local/bin/php-cgi<br/>10) 这边请注意启动顺序，先启动fastcgi，再启动nginx<br/>Nginx.conf由于经常需要修改，即经常需要重启nginx，因此这边写了一个启动脚本，请查看：<br/>#!/usr/local/bin/bash<br/>case $1 in<br/>start)<br/>/usr/local/sbin/nginx<br/>;;<br/>stop)<br/>killall -9 nginx<br/>;;<br/>test)<br/>nginx -t -c /usr/local/etc/nginx/nginx.conf<br/>;;<br/>restart)<br/>ps auxww &#124; grep nginx &#124; grep master &#124; awk ‘{print $2}’ &#124; xargs kill -HUP<br/>;;<br/>show)<br/>ps -aux&#124;grep nginx<br/>;;<br/>esac<br/>保存为nginx.sh使用方法为：<br/>nginx.sh start #启动nginx<br/>nginx.sh stop #停止nginx<br/>nginx.sh restart #重启nginx<br/>nginx.sh test #测试nginx.conf的准确性<br/>11) 安装phpMyAdmin<br/>#cd /usr/ports/databases/phpmyadmin<br/>#make install<br/>#mv /usr/local/www/phpmyadmin /data/web/ www.jk0086.com/htdocs/<br/>#cd /data/web/www.jk0086.com/htdocs/phpmyadmin<br/>#vi config.inc.php ##这边要说明一下，freebsd默认安装的phpmyadmin，里面配置文件有问题，需要手动修改，请修改成如下内容：<br/><br/>/* $Id: config.sample.inc.php 9689 2006-11-10 20:05:49Z nijel $ */<br/><br/>// vim: expandtab sw=4 ts=4 sts=4:<br/><br/>/**<br/><br/>* phpMyAdmin sample configuration, you can use it as base for<br/><br/>* manual configuration. For easier setup you can use scripts/setup.php<br/><br/>*<br/><br/>* All directives are explained in Documentation.html and on phpMyAdmin<br/><br/>* wiki .<br/><br/>*/<br/><br/>/*<br/><br/>* This is needed for cookie based authentication to encrypt password in<br/><br/>* cookie<br/><br/>*/<br/><br/>$cfg['blowfish_secret'] = ‘asdf:LKJ’; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */<br/><br/>/*<br/><br/>* Servers configuration<br/><br/>*/<br/><br/>$i = 0;<br/><br/>/*<br/><br/>* First server<br/><br/>*/<br/><br/>$i++;<br/><br/>/* Authentication type */<br/><br/>$cfg['Servers'][$i]['auth_type'] = ‘cookie’;<br/><br/>/* Server parameters */<br/><br/>$cfg['Servers'][$i]['host'] = ‘localhost’;<br/><br/>$cfg['Servers'][$i]['connect_type'] = ‘tcp’;<br/><br/>$cfg['Servers'][$i]['compress'] = false;<br/><br/>/* Select mysqli if your server has it */<br/><br/>$cfg['Servers'][$i]['extension'] = ‘mysql’;<br/><br/>/* User for advanced features */<br/><br/>// $cfg['Servers'][$i]['controluser'] = ‘pam’;<br/><br/>// $cfg['Servers'][$i]['controlpass'] = ‘pampasswd’;<br/><br/>/* Advanced phpMyAdmin features */<br/><br/>// $cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin’;<br/><br/>// $cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark’;<br/><br/>// $cfg['Servers'][$i]['relation'] = ‘pma_relation’;<br/><br/>// $cfg['Servers'][$i]['table_info'] = ‘pma_table_info’;<br/><br/>// $cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords’;<br/><br/>// $cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages’;<br/><br/>// $cfg['Servers'][$i]['column_info'] = ‘pma_column_info’;<br/><br/>// $cfg['Servers'][$i]['history'] = ‘pma_history’;<br/><br/>// $cfg['Servers'][$i]['designer_coords'] = ‘pma_designer_coords’;<br/><br/>/*<br/><br/>* End of servers configuration<br/><br/>*/<br/><br/>/*<br/><br/>* Directories for saving/loading files from server<br/><br/>*/<br/><br/>$cfg['UploadDir'] = ”;<br/><br/>$cfg['SaveDir'] = ”;<br/><br/>?><br/><br/>以上只是一个配置文件，当你打开Phpmyadmin的时候，会提示你输入用户名密码，然后登陆数据库，相对比较安全的<br/><br/>三、系统优化+防止ddos<br/>1) 这个话题有点大，我相信我做的只是其中很小的一部分，同时很多人也会问我，是不是要编译内核，这边的回答是不需要编译任何内核，只需要copy文件，然后重启一下服务器就可以了。<br/>2) 加载文件修改<br/># vi /boot/loader.conf #加入如下文本<br/>kern.dfldsiz=”2147483648″ # Set the initial data size limit<br/>kern.maxdsiz=”2147483648″ # Set the max data size<br/>kern.ipc.nmbclusters=”0″ # Set the number of mbuf clusters<br/>kern.ipc.nsfbufs=”66560″ # Set the number of sendfile(2) bufs<br/>##解释：<br/>a． 第一，第二行主要是为了突破1G内存设置的<br/>b． 第三行其实是bsd的一个bug，当系统并发达到一个数量级的时候，系统会crash，这个是非常糟糕的事情，所幸更改了这个参数后，在高并发的时候，基本可以没有类似情况，当然非常bt的情况，还得进一步想办法<br/>c． 第四行是读取的文件数，如果你下载的文件比较大，且比较多，加大这个参数，是非常爽的<br/><br/>3) Sysctl修改<br/>#vi /etc/rc.local<br/>sysctl kern.ipc.maxsockets=100000 ##增加并发的socket，对于ddos很有用<br/>sysctl kern.ipc.somaxconn=65535 ##打开文件数<br/>sysctl net.inet.tcp.msl=2500 ##timeout时间<br/><br/>4) 通过上述的简单优化，会给你带来意外的惊喜，如果有兴趣的兄弟，可以尝试一下看看，绝无副作用。<br/><br/>四、其他<br/>1) 加速ports安装<br/>#vi /etc/make.conf ##加入如下<br/>MASTER_SITE_OVERRIDE?=http://ports.hshh.org/${DIST_SUBDIR}/<br/>MASTER_SITE_OVERRIDE?=http://ports.cn.freebsd.org/${DIST_SUBDIR}/<br/><br/>2) Freebsd颜色显示<br/>secureCRT设置:仿真:终端->linux>勾选ANSI颜色–>确定<br/>#vi /etc/csh.cshrc ##加入如下<br/>setenv LSCOLORS ExGxFxdxCxegedabagExEx<br/>setenv CLICOLOR yes<br/>#cd /usr/ports/edit/vim;make install<br/>#echo “syntax on”>/root/.vimrc<br/>#echo “alias vi vim” >>/root/.cshrc<br/>##颜色主要是靠vim来显示的，因此需要安装vim，然后把vi alias成vim就可以了<br/>3) Other。。。。。。。。更新中<br/><br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=nginx" rel="tag">nginx</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?535</link>
<title><![CDATA[php无法加载pcre.so的解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Fri, 09 Apr 2010 03:41:25 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?535</guid> 
<description>
<![CDATA[ 
	最近在帮朋友更新一台服务器，把apache和php全部重新安装。<br/>首先使用在ports中将apache和php5，及php5-extension都deinstall了。不过有些地方还是卸载的不干净。<br/>甚至有很多关联软件都卸载不了。只能使用pkg_delete -f来删除了。<br/><br/>删除过程就不多讲了。现在删掉了以后，重新安装apache和php5和php5-extension都挺顺利的，可是调用phpinfo时，却总是缺少了pcre这么模块。<br/>查看了extension.ini确实有加载pcre.so，重启apache还是没看到pcre这个模块。<br/>重装该模块，确定了配置文件中都有加载指令了，重启apache还是没有加载pcre模块。<br/>比较诡异了，去把pcre.so删掉，再重装，重启后还是没看到加载pcre模块。<br/>感觉快无计可施了。静下心来想想，也许是老的安装包保留下来了，才会这样的。<br/>所以执行了make reinstall FORCE_PKG_REGISTER="yes" clean<br/>加上了clean指令，以前没加的。这次安装还是不行，但是把老安装包给清掉了。<br/>再次执行make reinstall FORCE_PKG_REGISTER="yes" clean<br/>这次就安装成功了。说明问题是之前安装的模块是老的安装包，freebsd检查有老的安装包以后就不重新下载了，直接安装，所以总是有问题。这次把老安装包清除之后，再安装，从网上下载了新的安装包，一次就成功了。<br/><br/>本文由ArthurXF倾情奉献，希望对大家有所帮助！<br/>Tags - <a href="tag.php?tag=php" rel="tag">php</a> , <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=pcre" rel="tag">pcre</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?534</link>
<title><![CDATA[解决Character set gb2312 is not a compiled character set and is not specified in the /usr/local/share/mysql/charsets/Index.xml file]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Tue, 06 Apr 2010 07:36:04 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?534</guid> 
<description>
<![CDATA[ 
	今天在给新版的5117.com网站配置新服务器。结果msyql安装好了以后在命令行就是无法进入mysql。总是报错Character set 'gb2312' is not a compiled character set and is not specified in the '/usr/local/share/mysql/charsets/Index.xml' file<br/><br/>我也到这个Index.xml中把关于gb2312的内容全部注释掉了，也没好。重装了mysql特意加上了支持utf-8参数，也没用。到my.conf中加上了default-character-set=utf8也不行。<br/>最后想到我的环境变量中配置了中文环境，也许是那里的问题。<br/>就<br/>cd /root<br/>ee .cshrc<br/>加注释<br/>#setenv LC_ALL zh_CN.eucCN<br/>#setenv LANG &nbsp;zh_CN.eucCN<br/>#setenv LC_CTYPE zh_CN.eucCN<br/>保存重启。一切回复正常。<br/>所以碰到问题，不一定就是mysql的问题，也不是它提示出来的错误。<br/>本文由ArthurXF倾情奉献，转载请注明网址。<br/>Tags - <a href="tag.php?tag=mysql" rel="tag">mysql</a> , <a href="tag.php?tag=charset" rel="tag">charset</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?518</link>
<title><![CDATA[apache启用.htaccess需要的设置]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Fri, 20 Nov 2009 02:41:28 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?518</guid> 
<description>
<![CDATA[ 
	如何让自己的本地Apache服务器支持".htaccess"呢?其实只要简单修改一下apache的httpd.conf设置就可以让APACHE支持.htaccess了。打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找 <br/><br/><Directory /><br/>Options FollowSymLinks<br/>AllowOverride None<br/></Directory><br/>改为 <br/><br/><Directory /><br/>Options FollowSymLinks<br/>AllowOverride All<br/></Directory><br/>就可以了 <br/><br/>RewriteEngine On&#124;Off 如果存在.htaccess的文件，应当显式地指明RewriteEngine On. 因为默认情况下.htaccess的RewriteEngine项是Off的。因此如果想用.htaccess来设置rewrite,文件头一行一般都需要RewriteEngine On<br/>Tags - <a href="tag.php?tag=apache" rel="tag">apache</a> , <a href="tag.php?tag=.htaccess" rel="tag">.htaccess</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?517</link>
<title><![CDATA[最快的 Web 服务器软件Cherokee ]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Wed, 04 Nov 2009 03:22:16 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?517</guid> 
<description>
<![CDATA[ 
	Cherokee 号称是目前最快的 Web 服务器软件，在性能上，甚至比 Nginx 还略胜一筹。与 Apache、Lighttpd、Nginx 等其他同类软件的对比，大家不妨看看这个测试页面。其易用性做得也很不错。<br/><br/>Cherokee 的功能包括支持 FastCGI、SCGI、PHP、CGI、TLS 及 SSL 加密连接，虚拟主机，授权认证，实时编码，载入均衡，与 Apache 兼容的 log 文件等等。<br/><br/>Cherokee 内含一个名为 cherokee-admin 的工具，执行后，允许管理员直接通过浏览器进入 http://localhost:9090/ 对其进行管理和配置。比如，开启或关闭服务器，进行一般选项的设定，配置虚拟服务器、信息源、图标、Mime 类型等项目。<br/><br/><a href="http://www.cherokee-project.com/ " target="_blank">http://www.cherokee-project.com/ </a><br/>Tags - <a href="tag.php?tag=web" rel="tag">web</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?513</link>
<title><![CDATA[make deinstall后不能install的解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Tue, 15 Sep 2009 16:48:39 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?513</guid> 
<description>
<![CDATA[ 
	如果你碰到make deinstall后，再make install时报错，说已经安装过了，可以使用以下办法来解决。<br/>setenv FORCE_PKG_REGISTER<br/>后在用make install，就会强制安装了。<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=deinstall" rel="tag">deinstall</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?512</link>
<title><![CDATA[Apache错误:child pid 6880 exit signal Segmentation fault (11)的解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Mon, 14 Sep 2009 14:59:06 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?512</guid> 
<description>
<![CDATA[ 
	　　最近配置了一台新服务器，网站流量一大，就会出现类似child pid 6880 exit signal Segmentation fault (11)的错误，产生的原因是新旧版本的程序更新模块更新问题，建议彻底卸载apache和php进行重新安装，即可修复。<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a> , <a href="tag.php?tag=%E9%94%99%E8%AF%AF" rel="tag">错误</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?509</link>
<title><![CDATA[Apache的prefork模式和worker模式的比较]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Mon, 24 Aug 2009 16:22:35 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?509</guid> 
<description>
<![CDATA[ 
	prefork模式<br/>这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器，它的工作方式类似于Apache 1.3。它适合于没有线程安全库，需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM，这样若一个请求出现问题就不会影响到其他请求。<br/><br/>这个MPM具有很强的自我调节能力，只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰，同时又不能太大，以致需要使用的内存超出物理内存的大小。<br/><br/>worker模式<br/>此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求，所以可以处理海量请求，而系统资源的开销小于基于进程的MPM。但是，它也使用了多进程，每个进程又有多个线程，以获得基于进程的MPM的稳定性。<br/><br/>控制这个MPM的最重要的指令是，控制每个子进程允许建立的线程数的ThreadsPerChild指令，和控制允许建立的总线程数的MaxClients指令。<br/><br/><br/>prefork和worker模式的切换<br/>1.将当前的prefork模式启动文件改名<br/>mv httpd httpd.prefork<br/>2.将worker模式的启动文件改名<br/>mv httpd.worker httpd<br/>3.修改Apache配置文件<br/>vi /usr/local/apache2/conf/extra/httpd-mpm.conf<br/>找到里边的如下一段，可适当修改负载等参数：<br/><IfModule mpm_worker_module><br/>StartServers 2<br/>MaxClients 150<br/>MinSpareThreads 25<br/>MaxSpareThreads 75<br/>ThreadsPerChild 25<br/>MaxRequestsPerChild 0<br/></IfModule><br/>4.重新启动服务<br/>/usr/local/apache2/bin/apachectl restart<br/>即可换成worker方式启动apache2<br/><br/>处于稳定性和安全性考虑，不建议更换apache2的运行方式，使用系统默认prefork即可。另外很多php模块不能工作在worker模式下，例如redhat linux自带的php也不能支持线程安全。所以最好不要切换工作模式。<br/><br/>prefork和worker模式的比较<br/>prefork模式使用多个子进程，每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上，Prefork MPM在效率上要比Worker MPM要高，但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势：它可以使用那些没有处理好线程安全的第三方模块，并且对于那些线程调试困难的平台而言，它也更容易调试一些。<br/><br/>worker模式使用多个子进程，每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说，在一个高流量的HTTP服务器上，Worker MPM是个比较好的选择，因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方，如果一个线程崩溃，整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间，所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。<br/><br/>总的来说，prefork方式速度要稍高于worker，然而它需要的cpu和memory资源也稍多于woker。<br/><br/>prefork模式配置详解<br/><IfModule mpm_prefork_module><br/>ServerLimit 256<br/>StartServers 5<br/>MinSpareServers 5<br/>MaxSpareServers 10<br/>MaxClients 256<br/>MaxRequestsPerChild 0<br/></IfModule><br/>ServerLimit<br/>默认的MaxClient最大是256个线程,如果想设置更大的值，就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大，则必须编译apache,此前都是不需要重新编译Apache。<br/>生效前提：必须放在其他指令的前面<br/><br/>StartServers<br/>指定服务器启动时建立的子进程数量，prefork默认为5。<br/><br/>MinSpareServers<br/>指定空闲子进程的最小数量，默认为5。如果当前空闲子进程数少于MinSpareServers ，那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。<br/><br/>MaxSpareServers<br/>设置空闲子进程的最大数量，默认为10。如果当前有超过MaxSpareServers数量的空闲子进程，那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小，Apache将会自动将其修改成”MinSpareServers+1″。<br/><br/>MaxClients<br/>限定同一时间客户端最大接入请求的数量(单个进程并发线程数)，默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放，队列中的请求将得到服务。要增大这个值，你必须同时增大ServerLimit。<br/><br/>MaxRequestsPerChild<br/>每个子进程在其生存期内允许伺服的最大请求数量，默认为10000.到达MaxRequestsPerChild的限制后，子进程将会结束。如果MaxRequestsPerChild为”0″，子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处：<br/>1.可以防止(偶然的)内存泄漏无限进行，从而耗尽内存。<br/>2.给进程一个有限寿命，从而有助于当服务器负载减轻的时候减少活动进程的数量。<br/><br/>worker模式配置详解<br/><IfModule mpm_worker_module><br/>StartServers 2<br/>MaxClients 150<br/>MinSpareThreads 25<br/>MaxSpareThreads 75<br/>ThreadsPerChild 25<br/>MaxRequestsPerChild 0<br/></IfModule><br/><br/>StartServers<br/>服务器启动时建立的子进程数，默认值是”3″。<br/><br/>MaxClients<br/>允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是”400″,16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候，你必须同时增加ServerLimit的值。<br/><br/>MinSpareThreads<br/>最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少，子进程将产生新的空闲线程。<br/><br/>MaxSpareThreads<br/>设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多，子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值：worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。<br/><br/>ThreadsPerChild<br/>每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。<br/><br/>MaxRequestsPerChild<br/>设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后，子进程将会结束。如果MaxRequestsPerChild为”0″，子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处：<br/>1.可以防止(偶然的)内存泄漏无限进行，从而耗尽内存。<br/>2.给进程一个有限寿命，从而有助于当服务器负载减轻的时候减少活动进程的数量。<br/>注意对于KeepAlive链接，只有第一个请求会被计数。事实上，它改变了每个子进程限制最大链接数量的行为。<br/><br/><br/>选择prefork还是worker可以在编译时使用–with-mpm=MPM参数指定,默认为prefork,preforkprefork采用预派生子进程方式，用单独的子进程来处理 不同的请求，进程之间彼此独立。在make编译和make install安装后，使用httpd -l来确定当前使用的MPM是prefork.c。查看httpd-mpm.conf配置文件，里面包含如下默认的配置段：<br/><IfModule prefork.c><br/>StartServers 5<br/>MinSpareServers 5<br/>MaxSpareServers 10<br/>MaxClients 150<br/>MaxRequestsPerChild 0<br/></IfModule><br/><br/>prefork 控制进程在最初建立“StartServers”个子进程后，为了满足MinSpareServers设置的需要创建一个进程，等待一秒钟，继续创建两 个，再等待一秒钟，继续创建四个……如此按指数级增加创建的进程数，最多达到每秒32个，直到满足MinSpareServers设置的值为止。这种模式 可以不必在请求到来时再产生新的进程，从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数，如果空闲进程数大于这个 值，Apache会自动kill掉一些多余进程。这个值不要设得过大，但如果设的值比MinSpareServers小，Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大，可考虑同时加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自 动销毁。0意味着无限，即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求，但如果设成非零值也有两点重要的好处：1、可防止意外的内存泄 漏。2、在服务器负载下降的时侯会自动减少子进程数。因此，可根据服务器的负载来调整这个值。MaxClients是这些指令中最为重要的一个，设定的是 Apache可以同时处理的请求，是对Apache性能影响最大的参数。其缺省值150是远远不够的，如果请求总数已达到这个值（可通过ps -ef&#124;grep http&#124;wc -l来确认），那么后面的请求就要排队，直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大，可以 处理的请求就越多，但Apache默认的限制不能大于256。ServerLimit指令无须重编译Apache就可以加大MaxClients。<br/><IfModule prefork.c><br/>ServerLimit 10000<br/>StartServers 5<br/>MinSpareServers 5<br/>MaxSpareServers 10<br/>MaxClients 10000<br/>MaxRequestsPerChild 0<br/></IfModule><br/>Worker相对于prefork，worker全新的支持多线程和多进程混合模型的MPM。由于 使用线程来处理，所以可以处理相对海量的请求，而系统资源的开销要小于基于进程的服务器。但是，worker也使用了多进程，每个进程又生成多个线程，以 获得基于进程服务器的稳定性。在configure –with-mpm=worker后，进行make编译、make install安装。在缺省生成的httpd-mpm.conf中有以下默认配置段：<br/><IfModule worker.c><br/>StartServers 2<br/>MaxClients 150<br/>MinSpareThreads 25<br/>MaxSpareThreads 75<br/>ThreadsPerChild 25<br/>MaxRequestsPerChild 0<br/></IfModule><br/>Worker 由主控制进程生成“StartServers”个子进程，每个子进程中包含固定的ThreadsPerChild线程数，各个线程独立地处理请求。同样， 为了不在请求到来时再生成线程，MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数；而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载，控制进程将派生新的子进程。MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大，可以按照实际情况相应调节。 ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64，如果负载较大，64也是不够的。这时要显式使用 ThreadLimit指令，它的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的，应该大于等于MaxClients。如果负载很大，现有的子进程数不能满足时，控制进程会派生新的子进程。默认最大的子进程总数是16，加大时 也需要显式声明ServerLimit（最大值是20000）。需要注意的是，如果显式声明了ServerLimit，那么它乘以 ThreadsPerChild的值必须大于等于MaxClients，而且MaxClients必须是ThreadsPerChild的整数倍，否则 Apache将会自动调节到一个相应值。<br/><IfModule worker.c><br/>ServerLimit 25<br/>ThreadLimit 200<br/>StartServers 3<br/>MaxClients 2000<br/>MinSpareThreads 50<br/>MaxSpareThreads 200<br/>ThreadsPerChild 100<br/>MaxRequestsPerChild 0<br/></IfModule><br/><br/>2.要加到多少？<br/><br/>连接数理论上当然是支持越大越好，但要在服务器的能力范围内，这跟服务器的CPU、内存、带宽等都有关系。<br/><br/>查看当前的连接数可以用：<br/>ps aux &#124; grep httpd &#124; wc -l<br/><br/>或：<br/>pgrep httpd&#124;wc -l<br/><br/>计算httpd占用内存的平均数:<br/>ps aux&#124;grep -v grep&#124;awk '/httpd/{sum+=$6;n++};END{print sum/n}'<br/><br/>由于基本都是静态页面，CPU消耗很低，每进程占用内存也不算多，大约200K。<br/><br/>服务器内存有2G，除去常规启动的服务大约需要500M（保守估计），还剩1.5G可用，那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368<br/><br/>约8K个进程，支持2W人同时访问应该是没有问题的（能保证其中8K的人访问很快，其他的可能需要等待1、2秒才能连上，而一旦连上就会很流畅）<br/><br/><IfModule mpm_prefork_module><br/> &nbsp; &nbsp;ServerLimit &nbsp; &nbsp; &nbsp; &nbsp; 10000<br/> &nbsp; &nbsp;StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br/> &nbsp; &nbsp;MinSpareServers &nbsp; &nbsp; &nbsp; 10<br/> &nbsp; &nbsp;MaxSpareServers &nbsp; &nbsp; &nbsp;20<br/> &nbsp; &nbsp;MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10000<br/> &nbsp; &nbsp;MaxRequestsPerChild &nbsp;100<br/></IfModule><br/>注意，MaxClients默认最大为250，若要超过这个值就要显式设置ServerLimit，且ServerLimit要放在MaxClients之前，值要不小于MaxClients，不然重启httpd时会有提示。<br/><br/>重启httpd后，通过反复执行pgrep httpd&#124;wc -l 来观察连接数，可以看到连接数在达到MaxClients的设值后不再增加，但此时访问网站也很流畅，那就不用贪心再设置更高的值了，不然以后如果网站访问突增不小心就会耗光服务器内存，可根据以后访问压力趋势及内存的占用变化再逐渐调整，直到找到一个最优的设置值。<br/><br/>(MaxRequestsPerChild不能设置为0，可能会因内存泄露导致服务器崩溃）<br/><br/>更佳最大值计算的公式：<br/><br/>apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2<br/>apache_max_process = apache_max_process_with_good_perfermance * 1.5<br/><br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a> , <a href="tag.php?tag=prefork" rel="tag">prefork</a> , <a href="tag.php?tag=worker" rel="tag">worker</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?443</link>
<title><![CDATA[Apache自动添加地址末尾的斜线]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Sat, 13 Jun 2009 07:07:16 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?443</guid> 
<description>
<![CDATA[ 
	　　我们都知道，在windows下的apache系统在访问网址时，最后的地址是个目录，apache系统能够自动加个/线，而Linux下的apache不能自动加。<br/><br/>例如：<br/>http://biweb.cn/bbs<br/>转换为<br/>http://biweb.cn/bbs/<br/><br/>在windows下是可以自动转换的，但是在liunx下或者UNix下是不行的，或报404错误。<br/><br/>那么我们怎么在liunx下修正这个问题呢。只需要在apache的httpd.conf中加入下面的代码，前提是<br/>LoadModule rewrite_module modules/mod_rewrite.so要打开。<br/>代码如下：<br/>RewriteEngine On<br/>RewriteCond %{REQUEST_FILENAME} -d<br/>RewriteRule ^(.+[^/])$ $1/ [R]<br/><br/>加入之后，重启apache，就可以正常访问了。是不是挺方便？呵呵。请访问biweb.cn，下载史上最强的WMS系统建网站，你会觉得无比轻松。<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?437</link>
<title><![CDATA[apxs是Apache编译和安装扩展模块的工具]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Sat, 06 Jun 2009 12:49:26 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?437</guid> 
<description>
<![CDATA[ 
	apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具，用于编译一个或多个源程序或目标代码文件为动态共享对象，使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。<br/><br/>因此，要使用这个扩展机制，你的平台必须支持DSO特性，而且Apache httpd必须内建了mod_so模块。apxs工具能自动探测是否具备这样的条件，你也可以自己用这个命令手动探测：<br/><br/>$ httpd -l <br/><br/>该命令的输出列表中应该有mod_so模块。如果所有这些条件均已具备，则可以很容易地借助apxs安装你自己的DSO模块以扩展Apache服务器的功能：<br/><br/>$ apxs -i -a -c mod_foo.c<br/>gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br/>ld -Bshareable -o mod_foo.so mod_foo.o<br/>cp mod_foo.so /path/to/apache/modules/mod_foo.so<br/>chmod 755 /path/to/apache/modules/mod_foo.so<br/>[activating module 'foo' in /path/to/apache/etc/httpd.conf]<br/>$ apachectl restart<br/>/path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br/>[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br/>/path/to/apache/sbin/apachectl restart: httpd started<br/>$ _ <br/><br/>其中的参数files可以是任何C源程序文件(.c)、目标代码文件(.o)、甚至是一个库(.a)。apxs工具会根据其后缀自动编译C源程序或者连接目标代码和库。但是，使用预编译的目标代码时，必须保证它们是地址独立代码(PIC)，使之能被动态地加载。如果使用GCC编译，则应该使用 -fpic 参数；如果使用其他C编译器，则应该查阅其手册，为apxs使用相应的编译参数。<br/><br/>有关Apache对DSO的支持的详细信息，可以阅读mod_so文档，或者直接阅读src/modules/standard/mod_so.c源程序。<br/><br/>语法<br/>apxs -g [ -S name=value ] -n modname<br/><br/>apxs -q [ -S name=value ] query ...<br/><br/>apxs -c [ -S name=value ] [ -o dsofile ] [ -I incdir ] [ -D name=value ] [ -L libdir ] [ -l libname ] [ -Wc,compiler-flags ] [ -Wl,linker-flags ] files ...<br/><br/>apxs -i [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...<br/><br/>apxs -e [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...<br/><br/>选项<br/>一般选项<br/>-n modname <br/>它明确设置了 -i(安装)和 -g(模板生成)选项的模块名称。对 -g 选项，它是必须的；对 -i 选项，apxs工具会根据源代码判断，或(在失败的情况下)按文件名推测出这个模块的名称。 <br/>查询选项<br/>-q <br/>查询某种apxs设置的信息。该选项的query参数可以是下列一个或多个字符串：CC, CFLAGS, CFLAGS_SHLIB, INCLUDEDIR, LD_SHLIB, LDFLAGS_SHLIB, LIBEXECDIR, LIBS_SHLIB, SBINDIR, SYSCONFDIR, TARGET 。 <br/>这个参数用于手动查询某些设置。比如，要手动处理Apache的C头文件，可以在Makefile中使用：<br/><br/>INC=-I`apxs -q INCLUDEDIR` <br/><br/>配置选项<br/>-S name=value <br/>此选项可以改变apxs的上述设置。 <br/>模板生成选项<br/>-g <br/>此选项生成一个名为name的子目录(见选项 -n)和其中的两个文件：一个是名为mod_name.c的样板模块源程序，可以用来建立你自己的模块，或是学习使用apxs机制的良好开端；另一个则是对应的Makefile ，用于编译和安装此模块。 <br/>DSO编译选项<br/>-c <br/>此选项表示需要执行编译操作。它首先会编译C源程序(.c)files为对应的目标代码文件(.o)，然后连接这些目标代码和files中其余的目标代码文件(.o和.a)，以生成动态共享对象dsofile 。如果没有指定 -o 选项，则此输出文件名由files中的第一个文件名推测得到，也就是默认为mod_name.so 。 <br/>-o dsofile <br/>明确指定所建立的动态共享对象的文件名，它不能从files文件列表中推测得到。如果没有明确指定，则其文件名将为mod_unknown.so 。 <br/>-D name=value <br/>此选项直接传递到给编译命令，用于增加自定义的编译变量。 <br/>-I incdir <br/>此选项直接传递到给编译命令，用于增加自定义的包含目录。 <br/>-L libdir <br/>此选项直接传递到给连接命令，用于增加自定义的库文件目录。 <br/>-l libname <br/>此选项直接传递到给连接命令，用于增加自定义的库文件。 <br/>-Wc,compiler-flags <br/>此选项用于向编译命令 libtool --mode=compile 中附加compiler-flags ，以增加编译器特有的选项。 <br/>-Wl,linker-flags <br/>此选项用于向连接命令 libtool --mode=link 中附加linker-flags ，以增加连接器特有的选项。 <br/>DSO的安装和配置选项<br/>-i <br/>此选项表示需要执行安装操作，以安装一个或多个动态共享对象到服务器的modules目录中。 <br/>-a <br/>此选项自动增加一个LoadModule行到httpd.conf文件中，以激活此模块，或者，如果此行已经存在，则启用之。 <br/>-A <br/>与 -a 选项类似，但是它增加的LoadModule命令有一个井号前缀(#)，即此模块已经准备就绪但尚未启用。 <br/>-e <br/>表示需要执行编辑操作，它可以与 -a 和 -A 选项配合使用，与 -i 操作类似，修改Apache的httpd.conf文件，但是并不安装此模块。 <br/>举例<br/>假设有一个扩展Apache功能的模块mod_foo.c ，使用下列命令，可以将C源程序编译为共享模块，以在运行时加载到Apache服务器中：<br/><br/>$ apxs -c mod_foo.c<br/>/path/to/libtool --mode=compile gcc ... -c mod_foo.c<br/>/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo<br/>$ _ <br/><br/>然后，必须修改Apache的配置，以确保有一个LoadModule指令来加载此共享对象。为了简化这一步骤，apxs可以自动进行该操作，以安装此共享对象到"modules"目录，并更新httpd.conf文件，命令如下：<br/><br/>$ apxs -i -a mod_foo.la<br/>/path/to/instdso.sh mod_foo.la /path/to/apache/modules<br/>/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so<br/>[activating module 'foo' in /path/to/apache/conf/httpd.conf]<br/>$ _ <br/><br/>如果配置文件中尚不存在，会增加下列的行：<br/><br/>LoadModule foo_module modules/mod_foo.so <br/><br/>如果你希望默认禁用此模块，可以使用 -A 选项，即：<br/><br/>$ apxs -i -A mod_foo.c <br/><br/>要快速测试apxs机制，可以建立一个Apache模块样板及其对应的Makefile ：<br/><br/>$ apxs -g -n foo<br/>Creating [DIR] foo<br/>Creating [FILE] foo/Makefile<br/>Creating [FILE] foo/modules.mk<br/>Creating [FILE] foo/mod_foo.c<br/>Creating [FILE] foo/.deps<br/>$ _ <br/><br/>然后，立即可以编译此样板模块为共享对象并加载到Apache服务器中：<br/><br/>$ cd foo<br/>$ make all reload<br/>apxs -c mod_foo.c<br/>/path/to/libtool --mode=compile gcc ... -c mod_foo.c<br/>/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo<br/>apxs -i -a -n "foo" mod_foo.la<br/>/path/to/instdso.sh mod_foo.la /path/to/apache/modules<br/>/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so<br/>[activating module 'foo' in /path/to/apache/conf/httpd.conf]<br/>apachectl restart<br/>/path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br/>[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br/>/path/to/apache/sbin/apachectl restart: httpd started<br/>$ _ <br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?425</link>
<title><![CDATA[FreeBSD、OpenBSD、NetBSD的详细介绍]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Tue, 12 May 2009 05:06:27 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?425</guid> 
<description>
<![CDATA[ 
	如果提到Web或者阅读一本计算机杂志就不可能不涉及到Linux，它是由Linus Torvalds和其他人共同开发的伟大的操作系统。但是尽管Linux占据了最重要的位置，ISP和系统管理员们也经常选择BSD里的一种作为操作系统，BSD是一类建立在代码共享基础上的操作系统，在过去的20多年里，美国的顶尖学院都一直在对它进行研究。 <br/><br/>BSD究竟是什么呢？如果你在寻找一个非Windows操作系统，又为什么应该考虑使用它们呢？ 学术渊源BSD是Berkeley Software Distribution的缩写，这是一个由加州大学伯克利分校开发的软件集合。最初BSD只是作为AT&T的Unix早期版本的附加软件包出现，后来它就逐渐地发展为一个完整的，高度复杂的具有Unix风格的操作系统——它第一个集成了网络功能。<br/><br/>通过追求完美主义的学术机构的努力以及经过挑剔的几代学生的测试，BSD也许是最健壮、最安全和最值得信赖的操作系统。对以BSD为基础的操作系统来说运行几年无需维护或重启是很平常的事情。由于BSD是在代码公开的环境下发展起来的，因而它对所有的顾客（包括那些想把它植入商业产品的软件开发商）都是完全免费的。来自BSD的网络代码几乎是所有现代操作系统的中心部分，包括Linux、OS/2以及Windows 95以来几乎每个Windows版本。<br/><br/>秘密武器<br/><br/>如果BSD真是那么优秀，为什么他们没有像Linux那样成为市场的领先者呢？这其中最重要的原因就是文化。许多Linux开发商把他们自己看作软件革命者。但是学术团体（BSD真正扎根的地方）的成员们更注重于结果而不是让这个产品出名。BSD在系统管理员和ISP用户中也有一批忠实的追随者，但是这些人通常更喜欢把他们的BSD作为秘密武器，而不是到处宣扬他们正在使用这种操作系统。<br/><br/>结果，没有多少人认识到BSD的各个版本或为像Yahoo!一样的大型网站的基础，而且还对IBM InterJet和Maxtor的网络存储服务器这些高可靠性的嵌入式系统提供了有利的支持。BSD的一个变种NetBSD被认为是全世界最轻便的操作系统，它可以在不同的CPU（种类超过64个）和几百种不同品牌和型号的计算机上运行。<br/><br/>现在，共有5个流行的BSD操作系统，其中的三个——FreeBSD，NetBSD 和OpenBSD——得到了BSD的授权，操作系统和源代码都是免费的，任何人都可以用于任何目的。其余的两个BSD/OS和Mac OS X是商业产品，它们以开放的BSD代码为基础，具有特殊的优势和与众不同的技术。在本文中，我们将讨论免费的版本。至于对BSD/OS和Mac OS X以及建立在Linux General Public License基础上的BSD授权的优势的讨论，参见我们站点上的其它文章“More about BSD”。<br/><br/>BSD家族大观 --1.FreeBSD<br/><br/>FreeBSD是从386BSD的基础上发展起来的，而386BSD是由伯克利的计算机科学家Bill Jolitz 开发的针对Intel 80386芯片的一种BSD版本。因为这个原因，FreeBSD在32位体系的x86机器上总是运行得最好。在免费的BSD中，它与PC兼容机配合得最好，而且支持的PC兼容的外部设备的数量也最多。尽管FreeBSD也可以运行在Alpha处理器上，向其他体系结构的移植也在进行当中，但是你更应该把它看作是主要针对x86系统的操作系统。 &nbsp; <br/><br/>在免费的BSD中，FreeBSD是名声最大的，它具有最强大的开发队伍，收到的反馈信件也最多，还拥有最多数量的用户。它还可能是所有免费操作系统中最容易安装的——尤其当你想通过Internet而不是购买光盘进行安装的话。 <br/><br/>Linux的发行商经常把他们的拷贝弄得很难通过Internet安装。毕竟，他们的业务决定于光盘的销售。而FreeBSD就不是这样了：它的所有要求就是两张软盘（在FreeBSD Web站点上用工具和映射文件很容易创建）和速度适宜的网络连接。从第一张软盘开始启动，然后插入第二张。安装程序会帮助你选择配置选项，从网上下载整个系统并把所有的东西正确地安装好。而那些想要光盘的人也可以从Wind River Systems的FreeBSD Mall 那儿或者从Cheap Bytes那里得到。你也可以在FreeBSD Web站点上用一个ISO映射文件制作光盘。<br/><br/>FreeBSD另外一个强大之处在于它有广泛的应用软件支持——超过5800种免费程序都可以供你立即下载并添加在FreeBSD的系统上。事实上，所有你需要用来建立一个工作站或者一个商业服务器的软件都已经随FreeBSD安装或者可以随后自行添加进系统里。<br/><br/>此外，像OpenBSD和NetBSD一样，FreeBSD事实上能够运行所有针对Linux、SCO Unix或者Intel版本的Solaris 的程序。同Linux一样，FreeBSD使用X Window系统以及所有针对那个协议开发的的桌面和图形用户界面，包括KDE、GNOME和为这两者所写的程序。<br/><br/>最后，FreeBSD对新用户来说具有最多的参考资料。FreeBSD Handbook 为新的顾客提供了极好的使用说明。许多出版公司都推出了针对初级和高级用户所写的指导书。<br/><br/>简而言之，FreeBSD对Linux来说是一个强大的挑战者，它也许能提供出众的稳定性，安装的简易性和方便。<br/><br/>BSD家族大观 --2.OpenBSD<br/><br/>OpenBSD是另外一个免费BSD的派生物，被称为世界上最安全的操作系统。OpenBSD的主页（www. openbsd.org）报告说OpenBSD“在默认安装情况下四年内没有一个小的安全漏洞”，它的意思是说（其实任何人都知道）在过去的四年内发布的OpenBSD版本没有一个被来自Internet的袭击攻破。（当然，你也可以使得任何操作系统——包括OpenBSD——变得易受攻击，如果你没有正确配置服务器或者运行那些导致入侵者进入的不安全软件。） OpenBSD也完全集成了密码安全软件以保证数据安全。 &nbsp; <br/><br/>OpenBSD并不是集成Unix组件功能最多的代表，它也不是运行最快的。但是在这些领域里，它也不是太差的。这个操作系统很小，但效率很高，它能在老的只有16MB内存的486机器上运行得很好——要知道这样一个硬件配置是不能运行Windows 2000的。其它的操作系统都没有任何一个享有OpenBSD在安全问题上创造的高可靠性纪录。一些远程根目录问题一般每个月都会发生在Microsoft的操作系统上，比如说Windows 2000。而最近发行的许多Linux已经成为Ramen蠕虫一类病毒的攻击对象。 <br/><br/>像FreeBSD和NetBSD一样，OpenBSD也有很多应用软件支持，它包含了许多免费软件包的定制版本。它的软件库没有FreeBSD中的那么大，但是包含了大多数你想给Unix服务器或者工作站安装的工具。OpenBSD的x86版本也能够运行针对FreeBSD、Linux和Solaris创建的程序。OpenBSD支持10种计算机体系结构——比FreeBSD还多，但是没有NetBSD多。从OpenBSD自身或者Cheap Bytes那儿就可以得到OpenBSD光盘。然而，你却得不到ISO映射文件，因为开发组更愿意通过出售CD的方式作为对他们努力的支持。你可以通过网络来安装操作系统，只不过安装者的用户界面没有FreeBSD那么美观而已。 在这三种免费BSD中，OpenBSD的开发成员最少并且对Unix新手 <br/>来说是最难学的。但是如果你确实需要一个牢靠的网络防火墙或者服务器的话，OpenBSD正是合适的选择。<br/><br/>BSD家族大观 --3. NetBSD<br/><br/>NetBSD <br/>NetBSD也是免费BSD的一种，它是基于BSD的最轻便的操作系统。目前能够在46种之多的不同硬件构架上运行（他们正在努力使之能够适应更多的构架），从原始的基于68K的Macintosh或者Amiga一直到AMD还没有发表的x86-64 Hammer结构，NetBSD都能够很好地运行。 &nbsp; <br/><br/>这种便携性使得NetBSD成为嵌入式系统（在其它设备中运行的，看不见的计算机）的最佳选择。因为编写从一个平台到另一个平台的代码最容易暴露缺陷（否则的话是不会引人注意的），而来自NetBSD的代码却是少有的健壮；OpenBSD（最初是针对NetBSD对象设计的）和FreeBSD在过去都曾借鉴过它。NetBSD也是许多独立类型硬件的操作系统的选择，包括老的Sun工作站。 <br/><br/>像FreeBSD和OpenBSD一样，NetBSD有一个巨大的应用软件库（比FreeBSD少而比OpenBSD多），并且能够运行针对Linux和其它版本Unix编译的商业程序。从Wasabi Systems，Cheap Bytes和其它一些NetBSD Web站点列出来的资源那儿我们可以得到NetBSD光盘。你可以下载ISO光盘映射文件，也可以通过FTP进行安装。<br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=openbsd" rel="tag">openbsd</a> , <a href="tag.php?tag=netbsd" rel="tag">netbsd</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?422</link>
<title><![CDATA[跟着ArthurXF学FreeBSD50——启动时碰到virecover的问题解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Sat, 09 May 2009 13:21:27 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?422</guid> 
<description>
<![CDATA[ 
	今天在配置服务器的时候，竟然服务器自动关机了。我正在编辑配置文件呢。那既然关机了也只能重启咯，重启以后就停在Recovering vi editor sessions：这里很长时间。<br/><br/>我还以为系统崩溃了。查了资料才知道。<br/>virecover的功能是如果在/var/tmp/vi.recover目录下发现存在可恢复的文件，就发送通知邮件给用户。使用vi 加-r参数可以用来恢复指定的文件。<br/>所以就坚守阵地，一直等待进入系统，第一件事就是<br/>rm -r /var/tmp/vi.recover<br/><br/>为了避免在此发生这样事情。<br/>echo 'virecover_enable="NO"' >> /etc/rc.conf<br/><br/>这样就无后顾之忧了，只是你以后在vi里面写东西可要经常存盘哦。要不然丢了就找不回来了。呵呵。<br/><br/>本文由ArthurXF倾情奉献。关注BIWEB开源商务智能网站系统就是对ArthurXF的最大支持！<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=virecover" rel="tag">virecover</a>
]]>
</description>
</item>
</channel>
</rss>