Lighttpd+Squid+Apache搭建高效率Web服务器

架构原理
Apache通常是开源界的首选Web服务器,因为它的强大和可靠,已经具有了品牌效应,可以适用于绝大部分的应用场合。但是它的强大有时候却显得笨重,配置文件得让人望而生畏,高并发情况下效率不太高。而轻量级的Web服务器Lighttpd却是后起之秀,其静态文件的响应能力远高于Apache,据说是Apache的2-3倍。Lighttpd的高性能和易用性,足以打动我们,在它能够胜任的领域,尽量用它。Lighttpd对PHP的支持也很好,还可以通过Fastcgi方式支持其他的语言,比如Python。

毕竟Lighttpd是轻量级的服务器,功能上不能跟Apache比,某些应用无法胜任。比如Lighttpd还不支持缓存,而现在的绝大部分站点都是用程序生成动态内容,没有缓存的话即使程序的效率再高也很难满足大访问量的需求,而且让程序不停的去做同一件事情也实在没有意义。首先,Web程序是需要做缓存处理的,即把反复使用的数据做缓存。即使这样也还不够,单单是启动Web处理程序的代价就不少,缓存最后生成的静态页面是必不可少的。而做这个是 Squid的强项,它本是做代理的,支持高效的缓存,可以用来给站点做反向代理加速。把Squid放在Apache或者Lighttpd的前端来缓存 Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。

即使是大部分内容动态生成的网站,仍免不了会有一些静态元素,比如图片、JS脚本、CSS等等,将Squid放在Apache或者Lighttp前端后,反而会使性能下降,毕竟处理HTTP请求是Web服务器的强项。而且已经存在于文件系统中的静态内容再在Squid中缓存一下,浪费内存和硬盘空间。因此可以考虑将Lighttpd再放在Squid的前面,构成 Lighttpd+Squid+Apache的一条处理链,Lighttpd在最前面,专门用来处理静态内容的请求,把动态内容请求通过proxy模块转发给Squid,如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd。新请求或者过期的页面请求交由Apache中Web程序来处理。经过Lighttpd和Squid的两级过滤,Apache需要处理的请求将大大减少,减少了Web应用程序的压力。同时这样的构架,便于把不同的处理分散到多台计算机上进行,由Lighttpd在前面统一把关。

在这种架构下,每一级都是可以进行单独优化的,比如Lighttpd可以采用异步IO方式,Squid可以启用内存来缓存,Apache可以启用MPM 等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。

实例讲解
下面以daviesliu.net和rainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用 mod_python实现的blog站点,几个php的站点,一个mod_python的小程序,以后可能还会架设几个PHP和Django的站点。而服务器非常弱,CPU为Celeron 500,内存为PC 100 384M,因此比较关注Web服务器的效率。这几个站点都是采用虚拟主机方式,开在同一台机器的同一个端口上。

Lighttpd服务于80端口,Squid运行在3128端口,Apache运行在81端口。

Lighttpd的配置
多个域名采用/var/www/domain/subdomain 的目录结构,用evhost模块配置document-root如下:

evhost.path-pattern        =  var.basedir + "/%0/%3/"

FtpSearch中有Perl脚本,需要启用CGI支持,它是用来做ftp站内搜索的,缓存的意义不大,直接由lighttpd的mod_cgi处理:

$HTTP["url"] =~ "^/cgi-bin/" { # only allow cgi's in this directory
    dir-listing.activate = "disable"    # disable directory listings
    cgi.assign = ( ".pl"   =>  "/usr/bin/perl", ".cgi"  =>  "/usr/bin/perl" )
}

bbs使用的是phpBB,访问量不大,可以放在lighttpd(fastcgi)或者apache(mod_php)下,暂时使用 lighttpd,设置所有.php的页面请求有fastcgi处理:

fastcgi.server = ( ".php" =>  ( (  "host"  => "127.0.0.1", "port"=> 1026,  "bin-path"  =>  "/usr/bin/php-cgi"  )  ) )

blog.daviesliu.net 和 blog.rainbud.net 是用mod_python编写的blogxp程序,所有静态内容都有扩展名,而动态内容没有扩展名。blogxp是用python程序生成XML格式的数据再交由mod_xslt转换成HTML页面,只能放在Apache下运行。该站点采用典型Lighttpd+Squid+Apache方式处理:

$HTTP["host"] =~ "^blog" {
    $HTTP["url"] !~ "." {     
        proxy.server = ( "" => ( "localhost" => ( "host"=> "127.0.0.1", "port"=> 3128 ) ) )  #3128端口为
    }
}

share中有静态页面,也有用mod_python处理的请求,在/cgi/下:

$HTTP["host"] =~ "^share" {
    proxy.server = (
        "/cgi" => ( "localhost" => ( "host"=> "127.0.0.1", "port"=> 3128 )  ) 
    )
}

Squid的配置
只允许本地访问:

http_port   3128
http_access allow localhost
http_access deny all

启用反向代理:

 httpd_accel_host 127.0.0.1
 httpd_accel_port 81                   #apache的端口
 httpd_accel_single_host on
 httpd_accel_with_proxy on          #启用缓存
 httpd_accel_uses_host_header on #启用虚拟主机支持

此方向代理支持该主机上的所有域名。

Apache的配置
配置/etc/conf.d/apache2,让其加载mod_python、mod_xslt、mod_php模块:

APACHE2_OPTS="-D PYTHON -D XSLT -D PHP5"

所有网站的根目录:

<Directory "/var/www">
   AllowOverride All     #允许.htaccess覆盖
    Order allow,deny
    Allow from all
</Directory>

基于域名的虚拟主机:

<VirtualHost *:81>
ServerName blog.daviesliu.net
DocumentRoot /var/www/daviesliu.net/blog
</VirtualHost>

这里明显没有lighttpd的evhost配置方便。

blog.daviesliu.net下的.htaccess设置(便于开发,不用重启Apache):

SetHandler mod_python
PythonHandler blogxp.publisher
PythonDebug On
PythonAutoReload On

<FilesMatch ".">
    SetHandler None        #静态文件直接由Apache处理
</FilesMatch>

<IfModule mod_xslt.c>
    AddType text/xsl .xsl  #防止对xsl文件进行转化
    AddOutputFilterByType mod_xslt text/xml
    XSLTCache off
    XSLTProcess on
</IfModule>
Header set Pragma "cache"
Header set Cache-Control "cache"

在blogxp.publisher里面,还需要设置返回的文档类型和过期时间:

    req.content_type = "text/xml"
    req.headers_out['Expires'] = formatdate( time.time() + 60 * 5 )

经过这样的配置,所有站点都可以通过80、3128、81三个端口进行正常访问,80端口用作对外的访问,以减少负荷。81端口可以用作开发时的调试,没有缓存的困扰。

性能测试
由于时间和精力有限,下面只用ab2做一个并不规范的性能对比测试(每项都测多次取平均),评价指标为每秒钟的请求数。
测试命令,以测试lighttpd上并发10个请求 scripts/prototype.js 为例:

ab2 -n 1000 -c 10 http://blog.daviesliu.net:80/scripts/prototype.js

静态内容:prototype.js (27kB)

Con
 Lighttpd(:80)
 Squid(:3128)
 Apache(:81)
 
1
 380
 210
 240
 
10
 410
 215
 240
 
100
 380
 160
 230
 
可见在静态内容上,Lighttpd表现强劲,而Squid在没有配内存缓存的情况下比另两个Web服务器的性能要差些。

动态页面:/rss (31kB)

Con
 Lighttpd(:80)
 Squid(:3128)
 Apache(:81)
 
1
 103
 210
 6.17
 
10
 110
 200
 6.04
 
100
 100
 100
 6.24
 

 

在动态内容上,Squid的作用非常明显,而Lighttpd受限于Squid的效率,并且还要低一大截。如果是有多台Squid来做均衡的话,Lighttpd的功效才能发挥出来。
在单机且静态内容很少的情况下,可以不用Lighttpd而将Squid置于最前面。

在线OCR识别网站(linux下可用)

说起文字识别(OCR),相像大家都不会对其陌生。利用该技术可以把图像上的文字转换成文字,省却重新输入的麻烦。但OCR软件较贵,现在我们只要能够接入网络,就可以免费获得此功能,心动了吗?
  “在线OCR识别网站”(http://www.netocr.com)使用的是清华大学电子系研制的国际领先的最新OCR识别技术,网站提供免费的文字识别服务,为使用传统文件扫描制作电子文件提供方便。
  一、注册账户
  在使用识别网站提供的服务之前,需要在其站点免费注册一个账户。打开网站单击首页上面的“注册”按钮,在注册页面中输入用户名、口令、提示问题、信箱等相关资料,完成后单击下面的“注册”按钮就可以注册成功了(如图1)。
attachments/200711/9004761091.jpg

  二、上传识别
  把需要进行文字识别的图像准备好,接着到http://www.netocr.com用刚才注册的用户名和口令进行登录,登录成功后单击界面上的“上传识别图像”按钮进入上传图像的界面,“浏览”选中要进行文字识别的图像,选好以后再旁边的“识别文字”下拉列表中来选择图像上的文字类型,一般选择“简体中文”就行了,接着在下面输入一下这个文件相关的描述和识别要求,也可以不写,然后单击下面是“上传识别”按钮就可以了(如图2)。
attachments/200711/6940830654.jpg

  不一会,网页上就会给出“识别成功!”的提示,我们在“识别结果”框中就可以看见识别的内容了,识别后的内容一定不会和图像上原文完全一致,所以还需要对文件进行简单的编辑之后方可使用。
  这个网站除了可以识别简体中文外,还可以用来识别繁体中文、英文、手写体等多种文字类型。还有在上传图像前,最好把图像格式转换成JPG之类的小体积格式,这样图像体积会小很多,可以明显提高上传和识别的速度。

金山ARP防火墙-完全免费的防御ARP攻击/ 防止被限制网速的工具 (仅500多K)

     下载:下载文件金山ARP防火墙Beta 1108.rar (535.41 KB , 下载:69次)
ADSL独立拨号上网用户等非局域网用户无需安装!

 

双向拦截ARP攻击、支持Vista、初级用户零设置+丰富的高级设置、安装免重启、低资源占用。。。。。大家快来下载体验吧,别忘了留下您的宝贵意见和建议

 

n金山ARP防火墙作用简介

 

金山ARP防火墙能够双向拦截ARP欺骗攻击包,监测锁定攻击源,时刻保护局域网用户PC的正常上网数据流向,是一款是适于个人用户的反ARP欺骗保护工具!

 

n金山ARP防火墙有什么特点?

ü网关动态探测+识别——识破伪造的网关地址
动态获取、并分析判断后为受保护PC绑定正确的网关地址,从而时刻保障保护本机上网数据的正确流向。同时也支持用户手动设置绑定网关地址。

ü网关动态通知——受到ARP欺骗攻击时主动向网关发送数据包,表明合法身份。

ü双向拦截ARP攻击
拦截来自外部接受或是由本机发出的ARP攻击数据包并提醒用户,保障本机及其它PC的网络通畅。

ü拦截IP冲突攻击,保护本机不受IP冲突攻击的影响

ü攻击源追踪锁定
拦截到ARP攻击包后立即追踪攻击源,找出安全威胁源头。

ü安全模式——让受保护PC在局域网隐身,攻击源无法察觉
对一些关键主机进行保护特别有效!
        
ü支持平台
Win2000
、Win2003、WinXPWin Vista

 

n产品界面抢先看?
attachments/200711/6412018415.jpg

attachments/200711/6931807578.jpg

attachments/200711/8322722479.jpg

htaccess 的一些用法

屏蔽访问

order allow,deny
deny from abc.com //屏蔽来自 abc.com 的访问
deny from 192.168.1.1 //屏蔽 IP 为 192.168.1.1 的访问
deny from 192.168.1. //屏蔽 IP 范围在 192.168.1.0~192.168.1.255 的访问
allow from all //屏蔽所有的访问来源

防盗链

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]

也可以指定被盗链图的替换图(顺便打打广告什么的),那么上边这段代码最后一行改为

RewriteRule .(gif|jpg)$ http://www.mydomain.com/替代图片文件名 [R,L]

地址转向

旧的URL自动转向到新的地址:
Redirect /旧目录/旧文档名 新文档的地址

或者整个目录的转向:
Redirect 旧目录 新目录

定义缺省的首页文件

DirectoryIndex 新的缺省文件名

也可以列出多个,顺序表明它们之间的优先级别,例如:
DirectoryIndex index.html index.php default.htm

现在开始博客赚钱会不会太晚?

      面对众多博客的竞争以及大部分人没能在博客上赚到钱,你是否感觉现在才开始博客赚钱已经太晚,并且不敢把你的赚大钱的野心释放出来呢?或许你对这样的问题已经有了自己的见解。但,请暂时忘掉你头脑中的想法。我想,花30分来看一篇文章,然后再做出回答,绝不会影响到你的正常生活。并且,这些将让你在博客生涯中一直受用呢。

      当然,在开始讨论之前,我想让你明白一点,这样的一篇文章绝对不能让你马上就赚到钱,可以保证的是你将知道如何去看清事实,并利用条件来使你赚到钱;当然,还可以让你决定"现在开始博客赚钱会不会太晚?"的答案。

揭开博客赚钱的面纱

      如果你想真正的从事这样的工作,那么你最好认清这是一件什么样的事、应该怎样做。同样的道理也存在于利用博客来达到目的。赚钱,是我们要记住的,我们的最终目标是利用博客这个工具来达到我们赚钱的目的。现在你知道了吗?你所做的一切关于增加流量、留住读者、提高订阅、提升Google PageRank、打出品牌、与别人合作,以及其他的事,都只是为了一个目的,或者更确切地说,几乎所有你做的这些努力都应该是围绕赚钱这个目标而来的,而不是其他的目的。

      其他利用博客赚到钱的人也一样。他们清楚地知道自己的目的,并利用各种手段来实现。我列出几个鲜明的例子吧,像John Chow,分享自己个人的赚钱经验,以达到吸引他人帮助他点击广告、成功推介广告,从而获利。国内前~博客也利用了John Chow相似的策略来达到自己的营利目的;Problogger利用分享他们的博客技巧,提高知名度来吸引广告;MashableTechcrunch等利用大量的流量来成为广告商的宠儿。

      例子很多,然而我们要明白的只是简单一点:明确目的。然后利用一切可以利用的手段来让我们得到更多的收益。如果你需要更多地了解赚钱的真面目,我建议你看一下:http://teachingsells.com/,有一本书可以让更深层地了解博客赚钱

需要怎样做呢?

 

      什么事,即使是面对一个Million Market,最重要的就是开始行动。当然,这里有必要强调一下的是"磨刀不误砍柴功"这个道理,别以为什么事越早开始越好。如果是这样的话,恐怕就没有《31天建设一个好的博客》这样的文章了。

      打造一个能让你赚钱的博客。你接下来要做的就是写出好文章,吸引能为你赚钱的人。一个好看的博客,或许能在第一眼更能吸引读者,但"花瓶"永远只能观赏。好的文章才是王道,才可能让读者留下来帮你达到赚钱的目标。而在写好好文章上,你很有必要做一些"磨刀"的工作:

  • 看别人是怎样写的。你可以从Top100赚钱的博客开始入手,他们不但可以让你学习,也同样会教你技巧;
  • 写有吸引力的文章,并习惯写对搜索优化你的文章。对于如果寻找素材并写好文章,寻找博客素材的5大途径将是你的好选择;对于写对于优化,如果你还是一个SEO新手的,你很有必要花10分钟看一下这篇文章:http://www.happinesz.cn/archives/320';return event.returnValue=false">SEO 101
  • 推广出去。引用师妹的一句话:好的产品,也要推销才会引起关注,那就推荐出去吧。

      OK,事实上,内容就是像你的王牌,内容也是你的工具,让你获得流量、订阅、读者、关注、声誉,这些都将成为你赚更多钱的利器。

解决问题

      你已经了解了赚钱的真面目?已经知道了怎样打造一个让你赚钱的博客?那么,让我们来解决问题吧。

      有没有发现,为什么很多出名的博客没赚钱?因为他们没有赚钱的目的;有没有发现,很多流量很好的博客没有钱赚?因为也们不会利用条件,或者把手段(比如流量)看成了最终目的。简单来说,因为他们目的的不同,以及不会利用而导致了"很多博客在竞争赚钱,但大部分赚不到钱"的后果。那么,你还是被这样的现象迷惑着吗?还在犹豫已经太晚?再看看中国现在的博客市场吧,真的已经被开发?

      还在看?马上开始吧,做好准备,干一个大的,赚到钱千万别忘了告诉我^^…

Lighttpd上安装WordPress

我写篇日志是想记录一下,怕以后不用的时候就忘了。

其实很早就听人说lighttpd是一个轻量级的Web服务器,今天试了一下,果然名不虚传,在我装上后,运行Wordpress 的同时,内存只占用4.100k,然后我又启动了Apache,也运行Wordpress作为测试,内存达占用13.116k,不管怎么样,lighttpd还是无法被大的稳定的服务器所采用,但是作为个人测试使用,那就相当的不错了。

接下来说一下怎么安装lighttpd,我是在windows下面测试的,为了简单我还是找了一个套件包:
WLMP Version: 1.1.4 主要包含以下功能
- LightTPD 1.4.16
- MySQL 5.0.45
- PHP 5.2.3
- MiniPerl 5.8.8
- OpenSSL 0.9.8e
- phpMyAdmin 2.10.3

本站下载:下载文件WLMP-Standard-1.1.4.1165-Win32-HUN.zip (0 Byte , 下载:6次)(最新版,高速下载!!实时更新 )

官方下载地址在:http://wlmp.dtech.hu/
 

下载好后,执行安装程序,然后让你选择安装的目录,安装到最后会提示你重新启动计算机,你选择是好行了。

接下来安装wordpress,同样到官方下载,解压到lighttpd的www目录中,我的WLMP安装在D盘上,所以我将wordpress放到D:WLMPHTDOCSwp中,HTDOCS为根目录,其它与Apache都是一样的,Wordpress的Permalinks设置与在apache中是不一样的,因为lighttpd不支持.htaccess文件,所以要改lighttpd.conf文件来实现地址重写功能。

在D:WLMPLightTPDconf中找到lighttpd-inc.conf,本来默认的文件应该是lighttpd.conf,可是在WLMP中,她被改名为lighttpd-inc.conf,然后在文件是找到


 
CODE:

  1. #server.error-handler-404   = "/error-handler.php"

这样的语句,在后面加上一句


 
CODE:

  1. server.error-handler-404   = "/wp/index.php"

同时记得把前面的#号去掉哦,这句的意思是说,当请求的文件不存在的时候就调用wp/index.php文件。

下面加入重写规则,首先找到 #"mod_rewrite",然后把前面的#号掉,表示启动这个插件,接着查找url.rewrite,你会找到一条信息,当然我用的是WLMP并且版本号是1.4.16,如果你使用的是别的版本或不是WLMP套件,那我就不敢保证一样的了,不管怎么样找到相关的定义就行了,或查找#### url handling modules (rewrite, redirect, access),也可以,找到后在下面加一行:


 
CODE:

  1. url.rewrite = ( "^/(archives|categories|comments|feed)/" => "/index.php" )

 

这样就大功告成了,其实比Apache的重写规则还要简单,这两天我主要在研究lighttpd的virtual hosts设置部份,很多人说像鸡肋,不过我还是想了解一下,有什么心得我会写出来的!!!