<?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>Fri, 23 Jul 2010 09:52:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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=&#8221;-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=&#8221;-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 &#8220;服务器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 &#8220;1&#8243; &gt;; /proc/sys/net/ipv4/tcp_syn_retries<br />
echo &#8220;1&#8243; &gt;; /proc/sys/net/ipv4/tcp_synack_retries<br />
加大syn_backlog，以保证用户的访问（消耗内存为代价，设的太高。。）<br />
echo &#8220;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 &#8220;服务器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 &#8220;1&#8243; &gt;; /proc/sys/net/ipv4/tcp_syn_retries<br />
     echo &#8220;1&#8243; &gt;; /proc/sys/net/ipv4/tcp_synack_retries<br />
     加大syn_backlog，以保证用户的访问（消耗内存为代价，设的太高。。）<br />
     echo &#8220;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>
