<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>【知行合一】-Poople&#039;s Blog &#187; Apache</title>
	<atom:link href="http://99dev.net/archives/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://99dev.net</link>
	<description>智巧终归庸俗，雄谋只余虚话</description>
	<lastBuildDate>Wed, 12 Oct 2011 01:19:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>LAMP架构常见问题收集</title>
		<link>http://99dev.net/archives/1015</link>
		<comments>http://99dev.net/archives/1015#comments</comments>
		<pubDate>Thu, 07 Apr 2011 06:12:47 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://99dev.net/archives/1015</guid>
		<description><![CDATA[Q：使用RHEL系统自带的PHP版本，怎么选择phpmyadmin版本？
A：实际测试中，
如果是RHEL 5.x自带PHP 5.1.6，兼容性最好的pma版本是5.8.2。官方已经不提供下载，可以在oldapps.com下载；如果可以升级PHP为5.2+，则可以在pma官网上选择最新的发行版。
]]></description>
			<content:encoded><![CDATA[<p><strong>Q：使用RHEL系统自带的PHP版本，怎么选择phpmyadmin版本？</strong></p>
<p>A：实际测试中，</p>
<p>如果是RHEL 5.x自带PHP 5.1.6，兼容性最好的pma版本是5.8.2。官方已经不提供下载，可以在oldapps.com下载；如果可以升级PHP为5.2+，则可以在pma官网上选择最新的发行版。</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/1015/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux获取程序编译参数</title>
		<link>http://99dev.net/archives/974</link>
		<comments>http://99dev.net/archives/974#comments</comments>
		<pubDate>Thu, 02 Dec 2010 09:23:54 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[其他Linux技术]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://99dev.net/?p=974</guid>
		<description><![CDATA[作为系统管理员，经常会碰到这样一个场景：刚接手应用系统不久，业务扩展迅速，老板要求你再搭建N个应用环境，并希望尽量与运行中的平台一致。
犯难的是，前同事留下的文档不详细，没有关于几个主要Service的编译参数。这时你就必须设法取得信息。
1.通过软件包自己的version参数或者debug工具
例如，MySQL软件包中的mysqlbug，执行该工具，将返回debug信息，过滤出其中的Configure command代码块即可
<span class="readmore"><a href="http://99dev.net/archives/974" title="Linux获取程序编译参数" target="_blank">阅读全文——共2730字</a></span>]]></description>
			<content:encoded><![CDATA[<p>作为系统管理员，经常会碰到这样一个场景：刚接手应用系统不久，业务扩展迅速，老板要求你再搭建N个应用环境，并希望尽量与运行中的平台一致。<br />
犯难的是，前同事留下的文档不详细，没有关于几个主要Service的编译参数。这时你就必须设法取得信息。</p>
<p><strong>1.通过软件包自己的version参数或者debug工具</strong><br />
例如，MySQL软件包中的mysqlbug，执行该工具，将返回debug信息，过滤出其中的Configure command代码块即可<br />
<span id="more-974"></span></p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Configure command: .<span style="color: #000000; font-weight: bold;">/</span>configure &nbsp;<span style="color: #ff0000;">'--disable-shared'</span> <span style="color: #ff0000;">'--with-server-suffix=-community'</span> <span style="color: #ff0000;">'--without-plugin-ndbcluster'</span> <span style="color: #ff0000;">'--with-plugin-innobase'</span> <span style="color: #ff0000;">'<br />
--with-plugin-partition'</span> <span style="color: #ff0000;">'--with-plugin-csv'</span> <span style="color: #ff0000;">'--with-plugin-archive'</span> <span style="color: #ff0000;">'--with-plugin-blackhole'</span> <span style="color: #ff0000;">'--with-plugin-federated'</span> <span style="color: #ff0000;">'--without-plugin-da<br />
emon_example'</span> <span style="color: #ff0000;">'--without-plugin-ftexample'</span> <span style="color: #ff0000;">'--without-plugin-example'</span> <span style="color: #ff0000;">'--with-embedded-server'</span> <span style="color: #ff0000;">'--without-bench'</span> <span style="color: #ff0000;">'--with-big-tables'</span> <span style="color: #ff0000;">'--enabl<br />
e-assembler'</span> <span style="color: #ff0000;">'--enable-local-infile'</span> <span style="color: #ff0000;">'--with-mysqld-user=mysql'</span> <span style="color: #ff0000;">'--with-unix-socket-path=/var/lib/mysql/mysql.sock'</span> <span style="color: #ff0000;">'--with-pic'</span> <span style="color: #ff0000;">'--prefix=/'</span><br />
<span style="color: #ff0000;">'--with-extra-charsets=complex'</span> <span style="color: #ff0000;">'--with-ssl'</span> <span style="color: #ff0000;">'--exec-prefix=/usr'</span> <span style="color: #ff0000;">'--libexecdir=/usr/sbin'</span> <span style="color: #ff0000;">'--libdir=/usr/lib'</span> <span style="color: #ff0000;">'--sysconfdir=/etc'</span> <span style="color: #ff0000;">'--datadi<br />
r=/usr/share'</span> <span style="color: #ff0000;">'--localstatedir=/var/lib/mysql'</span> <span style="color: #ff0000;">'--infodir=/usr/share/info'</span> <span style="color: #ff0000;">'--includedir=/usr/include'</span> <span style="color: #ff0000;">'--mandir=/usr/share/man'</span> <span style="color: #ff0000;">'--enable-th<br />
read-safe-client'</span> <span style="color: #ff0000;">'--with-comment=MySQL Community Server (GPL)'</span> <span style="color: #ff0000;">'--with-readline'</span> <span style="color: #ff0000;">'--with-zlib-dir=bundled'</span> <span style="color: #ff0000;">'CC=gcc'</span> <span style="color: #ff0000;">'CFLAGS=-O2 -g -pipe -Wa<br />
ll -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tab<br />
les'</span> <span style="color: #ff0000;">'LDFLAGS='</span> <span style="color: #ff0000;">'CXX=gcc'</span> <span style="color: #ff0000;">'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32<br />
-march=i386 -mtune=generic -fasynchronous-unwind-tables -felide-constructors -fno-exceptions -fno-rtti '</span></div></td></tr></tbody></table></div>
<p>附上其他常用service编译参数的查看方法</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">查看nginx编译参数：nginx <span style="color: #660033;">-V</span><br />
查看apache编译参数：<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>apache<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>config.nice<br />
查看mysql编译参数：mysqlbug<br />
查看php编译参数：php <span style="color: #660033;">-i</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> configure</div></td></tr></tbody></table></div>
<p>All Tested OK！</p>
<p><strong>2.利用SRPM包的spec文件获取build信息</strong><br />
以上查看Apache编译的方法，只能service是采用tar.gz安装的环境。如果是rpm安装，利用该方法是行不通的，rpm安装的service，并不会留下config.nice。<br />
解决办法就是搜索该软件是否有发布SRPM(.src.rpm后缀)，将其解压，查看spec文件中的%build代码块。</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">%</span>build<br />
......<br />
..<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">-C</span> \<br />
<span style="color: #660033;">--prefix</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_sysconfdir<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span>httpd \<br />
<span style="color: #660033;">--with-apr</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apr-config \<br />
<span style="color: #660033;">--with-apr-util</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apu-config \<br />
<span style="color: #660033;">--exec-prefix</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_prefix<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--bindir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_bindir<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--sbindir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_sbindir<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--mandir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_mandir<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--libdir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_libdir<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--sysconfdir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_sysconfdir<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span>httpd<span style="color: #000000; font-weight: bold;">/</span>conf \<br />
<span style="color: #660033;">--includedir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_includedir<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span>httpd \<br />
<span style="color: #660033;">--libexecdir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_libdir<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span>httpd<span style="color: #000000; font-weight: bold;">/</span>modules \<br />
<span style="color: #660033;">--datadir</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>contentdir<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--with-mpm</span>=<span style="color: #007800;">$mpm</span> \<br />
<span style="color: #660033;">--enable-suexec</span> <span style="color: #660033;">--with-suexec</span> \<br />
<span style="color: #660033;">--with-suexec-caller</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>suexec_caller<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--with-suexec-docroot</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>contentdir<span style="color: #7a0874; font-weight: bold;">&#125;</span> \<br />
<span style="color: #660033;">--with-suexec-logfile</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_localstatedir<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>httpd<span style="color: #000000; font-weight: bold;">/</span>suexec.log \<br />
<span style="color: #660033;">--with-suexec-bin</span>=<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_sbindir<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span>suexec \<br />
<span style="color: #660033;">--with-suexec-uidmin</span>=<span style="color: #000000;">500</span> <span style="color: #660033;">--with-suexec-gidmin</span>=<span style="color: #000000;">500</span> \<br />
<span style="color: #660033;">--with-devrandom</span> \<br />
<span style="color: #660033;">--with-ldap</span> <span style="color: #660033;">--enable-ldap</span> <span style="color: #660033;">--enable-auth-ldap</span> \<br />
<span style="color: #660033;">--enable-cache</span> <span style="color: #660033;">--enable-disk-cache</span> <span style="color: #660033;">--enable-mem-cache</span> <span style="color: #660033;">--enable-file-cache</span> \<br />
<span style="color: #660033;">--enable-ssl</span> <span style="color: #660033;">--with-ssl</span> \<br />
<span style="color: #660033;">--enable-deflate</span> <span style="color: #660033;">--enable-cgid</span> \<br />
<span style="color: #660033;">--enable-proxy</span> <span style="color: #660033;">--enable-proxy-connect</span> \<br />
<span style="color: #660033;">--enable-proxy-http</span> <span style="color: #660033;">--enable-proxy-ftp</span> \</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/974/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>释放僵死的Apach进程</title>
		<link>http://99dev.net/archives/971</link>
		<comments>http://99dev.net/archives/971#comments</comments>
		<pubDate>Tue, 30 Nov 2010 09:39:13 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://99dev.net/?p=971</guid>
		<description><![CDATA[服务器某次故障，重启httpd出现如下错误提示
123456# /etc/init.d/httpd restart
Stopping httpd: &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;&#91; &#160;OK &#160;&#93;
Starting httpd: &#40;98&#41;Address already in use: make_sock: could not bind to address &#91;::&#93;:80
<span class="readmore"><a href="http://99dev.net/archives/971" title="释放僵死的Apach进程" target="_blank">阅读全文——共421字</a></span>]]></description>
			<content:encoded><![CDATA[<p>服务器某次故障，重启httpd出现如下错误提示</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># /etc/init.d/httpd restart</span><br />
Stopping httpd: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">&#91;</span> &nbsp;OK &nbsp;<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
Starting httpd: <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">98</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>Address already <span style="color: #000000; font-weight: bold;">in</span> use: make_sock: could not <span style="color: #7a0874; font-weight: bold;">bind</span> to address <span style="color: #7a0874; font-weight: bold;">&#91;</span>::<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<span style="color: #000000;">80</span><br />
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">98</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>Address already <span style="color: #000000; font-weight: bold;">in</span> use: make_sock: could not <span style="color: #7a0874; font-weight: bold;">bind</span> to address 0.0.0.0:<span style="color: #000000;">80</span><br />
no listening sockets available, shutting down<br />
Unable to open logs</div></td></tr></tbody></table></div>
<p><span id="more-971"></span><br />
利用fuser揪出占用该端口的进程ID，并kill掉</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">fuser</span> <span style="color: #660033;">-k</span> <span style="color: #660033;">-n</span> tcp <span style="color: #000000;">80</span></div></td></tr></tbody></table></div>
<p>发送apache启动信号</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start</div></td></tr></tbody></table></div>
<p>参考资料</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fuser命令详解 &nbsp; http://www.91linux.com/html/article/cmd/20080818/13235.html</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/971/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>设置默认虚拟主机，防止恶意域名绑定</title>
		<link>http://99dev.net/archives/882</link>
		<comments>http://99dev.net/archives/882#comments</comments>
		<pubDate>Thu, 12 Aug 2010 06:39:53 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://99dev.net/archives/882</guid>
		<description><![CDATA[有些站点，经常因为被别人绑定了未备案的域名，遭电信关闭IP。
该规则，也经常被竞争对手恶意利用。因此，对Web Serve设置默认虚拟主机，来屏蔽非法域名很重要。
Nginx的做法
添加以下server zone
<span class="readmore"><a href="http://99dev.net/archives/882" title="设置默认虚拟主机，防止恶意域名绑定" target="_blank">阅读全文——共508字</a></span>]]></description>
			<content:encoded><![CDATA[<p>有些站点，经常因为被别人绑定了未备案的域名，遭电信关闭IP。<br />
该规则，也经常被竞争对手恶意利用。因此，对Web Serve设置默认虚拟主机，来屏蔽非法域名很重要。</p>
<p><strong>Nginx的做法</strong><br />
添加以下server zone</p>
<div class="codecolorer-container apache default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server {<br />
<span style="color: #00007f;">listen</span> <span style="color: #ff0000;">80</span> default;<br />
return <span style="color: #ff0000;">500</span>;<br />
}</div></td></tr></tbody></table></div>
<p><span id="more-882"></span><br />
或者是将非法域名的访问重定向</p>
<div class="codecolorer-container apache default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server {<br />
<span style="color: #00007f;">listen</span> <span style="color: #ff0000;">80</span> default;<br />
rewrite ^(.*) http://www.null.com permanent;<br />
}</div></td></tr></tbody></table></div>
<p><strong>Apache的做法</strong><br />
使用_default_虚拟主机</p>
<div class="codecolorer-container apache default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> _default_:*&gt;<br />
<span style="color: #00007f;">DocumentRoot</span> /www/default<br />
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;</div></td></tr></tbody></table></div>
<p>使用这样一个使用通配符端口的默认虚拟主机可以有效的防止请求被主服务器接收。<br />
如果一个地址/端口对已经被一个基于域名的虚拟主机使用，那么默认虚拟主机决不会处理发向这个地址/端口的请求。<br />
如果一个请求的 Host:头中包含未知信息，或者干脆就没有，那么它会被第一个基于域名的虚拟主机<br />
（就是在配置文件中首先出现的使用了那个地址/端口对的虚拟主机）处理。<br />
您可以用AliasMatch或 RewriteRule来重写任何请求，使它指向一个简单信息页面（a single information page）（或脚本）。</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/882/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Original]主WEB服务器web service中断以及自动启动项不会up的问题</title>
		<link>http://99dev.net/archives/845</link>
		<comments>http://99dev.net/archives/845#comments</comments>
		<pubDate>Thu, 06 May 2010 01:53:04 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[其他Linux技术]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://99dev.net/archives/845</guid>
		<description><![CDATA[# 查看默认的运行级别,Debian系默认运行级别为2,Redhat系默认运行级别为3
[11:34:29.9] root@webserver:/usr/local/webserver/nginx# runlevel
[11:34:31.8] N 2webserverwebserver

<span class="readmore"><a href="http://99dev.net/archives/845" title="[Original]主WEB服务器web service中断以及自动启动项不会up的问题" target="_blank">阅读全文——共2015字</a></span>]]></description>
			<content:encoded><![CDATA[<p># 查看默认的运行级别,Debian系默认运行级别为2,Redhat系默认运行级别为3</p>
<p>[11:34:29.9] root@webserver:/usr/local/webserver/nginx# runlevel</p>
<p>[11:34:31.8] N 2webserverwebserver</p>
<p><span id="more-845"></span>
<p>#运行开机启动项管理器,详细截图见sysv-rc-conf.png</p>
<p>[13:01:32.4] root@webserver:~# sysv-rc-conf</p>
<p>#可以看到存在一些不必要的启动服务,其中包含apache,该服务与nginx冲突</p>
<p>#确保rc.local服务在runlevel2被启用</p>
<p>#之前推测,nginx的https服务和kerio mailserver的https服务相冲突.结合了需求,该WebServer不会挂其他https站点.保留kerio mailserver,重新编译nginx,去掉https选项</p>
<p>[14:13:45.5] root@webserver:~/download/nginx-0.7.61# ./configure &#8211;user=www &#8211;group=www &#8211;prefix=/usr/local/webserver/nginx &#8211;with-http_stub_status_module</p>
<p>[14:14:04.9] root@webserver:~/download/nginx-0.7.61# make</p>
<p>#关闭有冲突的Apache Service</p>
<p>[13:07:10.1] root@webserver:~# /etc/init.d/apache2 stop</p>
<p>#关闭进程,重新安装nginx</p>
<p>[00:16:02.5] root@webserver:~# killall nginx</p>
<p>[00:16:12.6] root@webserver:~# cd /root/download</p>
<p>[00:16:28.7] root@webserver:~/download# cd nginx-0.7.61</p>
<p>[00:16:34.0] root@webserver:~/download/nginx-0.7.61# make install</p>
<p>[00:18:28.7] root@webserver:/usr/local/webserver/nginx/conf# nginx</p>
<p>#启动,测试rc.local是否成功执行</p>
<p>[00:26:00.2] root@webserver:/usr/local/webserver/nginx/conf# reboot</p>
<p>#查看nginx和php进程是否启动</p>
<p>[00:29:42.8] root@webserver:~# ps -aux|grep ngin</p>
<p>[00:29:55.9] www 6401 0.0 0.2 14764 11672 ? S 00:28 0:00 nginx: worker process</p>
<p>&nbsp;&nbsp;</p>
<p>[00:29:55.9] root@webserver:~# ps -aux|grep php</p>
<p>[00:29:59.9] root 6256 0.0 0.0 88624 3708 ? Ss 00:28 0:00 /usr/local/webserver/php/bin/php-cgi &#8211;fpm &#8211;fpm-config /usr/local/webserver/php/etc/php-fpm.conf</p>
<p>#陷阱1</p>
<p>The Mysterious &#8212; MARK &#8211;</p>
<p>All newbie admins asks what this means in /var/log/messages:</p>
<p>Jul 1 16:04:53 windbag &#8212; MARK &#8211;</p>
<p>Jul 1 16:24:53 windbag &#8212; MARK &#8211;</p>
<p>Jul 1 16:44:53 windbag &#8212; MARK &#8211;</p>
<p>That&#8217;s just the syslog daemon letting you know that it is alive and well. You may set the interval to anything you like on Debian by editing /etc/init.d/sysklogd. This sets it to 60 minutes:</p>
<p>SYSLOGD=”-m 60&#8243;</p>
<p>Then restart the syslog daemon:</p>
<p># /etc/init.d/sysklogd restart</p>
<p>On Red Hat and derivatives, edit /etc/sysconfig/syslog :</p>
<p>SYSLOGD_OPTIONS=”-m 60&#8243;</p>
<p>Restart syslogd with service syslog restart. Then watch it happen in realtime on any Linux with tail -f /var/log/messages. (You can monitor the changes in any text file with tail.)</p>
<p>#陷阱2</p>
<p>exiting due to signal 15</p>
<p>yslogd: exiting on signal 15 这个看上去是syslogd正常的退出信息</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/845/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Collection]黑客攻破apache.org官网，安全问题发人深思</title>
		<link>http://99dev.net/archives/839</link>
		<comments>http://99dev.net/archives/839#comments</comments>
		<pubDate>Fri, 16 Apr 2010 11:08:54 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[技术博文]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://99dev.net/archives/839</guid>
		<description><![CDATA[原文版权归 大包子@CCF 所有,原文链接 http://baoz.net/hacker-owned-apache-official-server/
Apache是全球使用最多的Web Server之一，近期Apache的官网被黑客入侵了，素包子根据apache网站的描述，分析了下黑客的思路。大概包含5个过程，虽然道路曲折，但黑客快速通关，一步一步的接近目标，有很多可圈可点的地方，还是相当精彩的。可惜最后people.apache.org没搞下来，否则可以写小说拍电影了，不过男女主角不能是aXi和aJiao。

1、通过跨站漏洞社工了几个管理员，获得JIRA（一个项目管理程序）后台管理权限，并修改相关设置，上传jsp木马。
<span class="readmore"><a href="http://99dev.net/archives/839" title="[Collection]黑客攻破apache.org官网，安全问题发人深思" target="_blank">阅读全文——共1454字</a></span>]]></description>
			<content:encoded><![CDATA[<p><b>原文版权归 大包子@CCF 所有,</b><a href="%E5%8E%9F%E6%96%87%E9%93%BE%E6%8E%A5%20http://baoz.net/hacker-owned-apache-official-server/" title="原文链接 http://baoz.net/hacker-owned-apache-official-server/"><b>原文链接 http://baoz.net/hacker-owned-apache-official-server/</b></a></p>
<p>Apache是全球使用最多的Web Server之一，近期Apache的官网被黑客入侵了，素包子根据apache网站的描述，分析了下黑客的思路。大概包含5个过程，虽然道路曲折，但黑客快速通关，一步一步的接近目标，有很多可圈可点的地方，还是相当精彩的。可惜最后people.apache.org没搞下来，否则可以写小说拍电影了，不过男女主角不能是aXi和aJiao。</p>
<p><span id="more-839"></span>
<p>1、通过跨站漏洞社工了几个管理员，获得JIRA（一个项目管理程序）后台管理权限，并修改相关设置，上传jsp木马。</p>
<p>2、在后台看到其他用户的帐号，通过登陆入口暴力跑密码，破解了几百个帐号。</p>
<p>官方说是“At the same time as the XSS attack”，我不这么认为，我认为是获取后台之后，能看到帐号了，才可以高效率的破解密码。如果不通过后台就可以破解几百个帐号，那这个事情早就发生了。</p>
<p>3、部署了一个JAR，可以记录登陆帐号及密码，然后用JIRA的系统发邮件给apache的管理人员说：“JIRA出现故障了，请你使用邮件里的临时密码登陆，并修改密码”，相关人员登陆了，并把密码修改成自己常用的密码，当然，这些密码都被记录下来了 ：）</p>
<p>4、正如黑客所算计的，上述被记录的密码中，有密码可以登陆brutus.apache.org，更让黑客开心和省心的是，这个可以登陆的帐号竟然具备完全的sudo权限，提权都不用提了，直接就是root，真是爽的一塌糊涂啊。而这个被root的brutus.apache.org上面跑着JIRA、Confluence和Bugzilla。</p>
<p>5、brutus.apache.org上的部分用户保存了subversion的密码，黑客用这些密码登陆了people.apache.org，但是并没获得其他权限。这个people.apache.org可是apache的主服务器之一，如果root了这个机器，那基本可以获得所有apache主要人员的密码了。可惜，黑客们功亏一篑。</p>
<p>整个故事到此结束，下面说说Apache是如何发现自己被入侵的。</p>
<p>根据apache官方的描述“About 6 hours after they started resetting passwords, we noticed the attackers and began shutting down services”，我猜测apache是因为黑客重设了用户密码这个行为才发现被入侵的。</p>
<p>如果说的是黑客重设的是JIRA的密码，那么就是因为黑客做戏没做足全套导致的，可能apache管理人员上去看之后，发现没啥问题，被忽悠了。</p>
<p>如果说的是黑客重设其他密码，我想不到整个过程中还需要重设什么其他的密码。</p>
<p>我还是对apache的安全措施非常好奇，到底是如何发现的？到底是相关人员安全敏感度高呢，还是黑客留下了一些痕迹被安全检查措施发现了。如果是后者的话，检查周期又是多长呢？24小时？</p>
<p>经验教训：</p>
<p>回头再看看黑客的整个攻击过程，素包子相信在细节上会有很多可以吸取教训的地方。从长远来看，可以加强安全意识培训、实施SDL安全开发生命周期、日志集中分析、主机入侵检测系统等等，这些都是需要企业的安全部门长期投入去做的事情；相对短平快的方法是要求重要的人员、重要的应用、重要的系统使用双因素动态密码认证。</p>
<p>更多Apache官网被黑内幕，请访问素包子的网站 http://baoz.net</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/839/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Original]Apache+Squid优化 加速高负荷Web访问</title>
		<link>http://99dev.net/archives/364</link>
		<comments>http://99dev.net/archives/364#comments</comments>
		<pubDate>Fri, 26 Dec 2008 05:24:49 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Squid]]></category>

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

		<guid isPermaLink="false">http://99dev.net/?p=281</guid>
		<description><![CDATA[按照M(MySQL)-A(Apache)-P(PHP)的顺序，从源代码编译安装。在未安装PHP之前，Apache可以正常开启。安装完PHP，apache restart出现如下错误：
[root@myhost php]# /usr/local/httpd/bin/apachectl stop
Syntax error on line 262 of /usr/local/httpd/conf/httpd.conf:
Cannot load /usr/local/httpd/modules/libphp5.so into server: /usr/local/httpd/modules/libphp5.so: undefined symbol: sqlite3ExprDeleteGoogle上很多人说是由于libphp5的权限问题和SeLinux安全问题，分析一下，可以否定这2种说法：
<span class="readmore"><a href="http://99dev.net/archives/281" title="[Original]已解决：ArchLinux上编译AMP环境错误" target="_blank">阅读全文——共577字</a></span>]]></description>
			<content:encoded><![CDATA[<p>按照M(MySQL)-A(Apache)-P(PHP)的顺序，从源代码编译安装。在未安装PHP之前，Apache可以正常开启。安装完PHP，apache restart出现如下错误：</p>
<p>[root@myhost php]# /usr/local/httpd/bin/apachectl stop<br />
Syntax error on line 262 of /usr/local/httpd/conf/httpd.conf:<br />
Cannot load /usr/local/httpd/modules/libphp5.so into server: /usr/local/httpd/modules/libphp5.so: undefined symbol: sqlite3ExprDelete<span id="more-281"></span>Google上很多人说是由于libphp5的权限问题和SeLinux安全问题，分析一下，可以否定这2种说法：</p>
<p>1.libphp5.so已经是755权限</p>
<p>2.ArchLinux是轻量级Linux，没有集成SeLinux安装功能</p>
<p>依照以往在其他Linux中的经验，问题应该出在最后的PHP之上，重新编译应该OK</p>
<p>依次执行make clean ; ./configure ; make ; make install</p>
<p>重新启动Apache，/path_apache/bin/apachectl start ,OK</p>
<p>放上phpinfo，测试PHP调用正常</p>
]]></content:encoded>
			<wfw:commentRss>http://99dev.net/archives/281/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Original]Apache&amp;Squid优化 加速高负荷Web访问</title>
		<link>http://99dev.net/archives/204</link>
		<comments>http://99dev.net/archives/204#comments</comments>
		<pubDate>Wed, 01 Oct 2008 13:22:08 +0000</pubDate>
		<dc:creator>蒼</dc:creator>
				<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Squid]]></category>

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

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

