`
pujing
  • 浏览: 43183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)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为Celeron500,内存为PC 100384M,因此比较关注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_host127.0.0.1
httpd_accel_port81                  #apache的端口
httpd_accel_single_host on
httpd_accel_with_proxyon         #启用缓存
httpd_accel_uses_host_header on#启用虚拟主机支持

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

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

APACHE2_OPTS="-DPYTHON -D XSLT -D PHP5"

所有网站的根目录:

<Directory"/var/www">
   AllowOverrideAll    #允许.htaccess覆盖
    Orderallow,deny
    Allow fromall
</Directory>

基于域名的虚拟主机:

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

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

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

SetHandlermod_python
PythonHandler blogxp.publisher
PythonDebug On
PythonAutoReload On

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

<IfModule mod_xslt.c>
    AddTypetext/xsl .xsl  #防止对xsl文件进行转化
   AddOutputFilterByType mod_xslt text/xml
    XSLTCacheoff
    XSLTProcesson
</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 -c10 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置于最前面。
分享到:
评论

相关推荐

    网站架构及高性能并发服务器设计

     Lighttpd+Squid+Apache搭建高效率Web服务器 9  浏览量比较大的网站应该从哪几个方面入手? 17  用负载均衡技术建设高负载站点 20  大型网站的架构设计问题 25   开源平台的高并发集群思考 26  大型、...

    高性能高并发服务器架构大全

     Lighttpd+Squid+Apache搭建高效率Web服务器 9  浏览量比较大的网站应该从哪几个方面入手? 17  用负载均衡技术建设高负载站点 20  大型网站的架构设计问题 25  开源平台的高并发集群思考 26  大型...

    高性能高并发服务器架构

    Lighttpd+Squid+Apache搭建高效率Web服务器 - **Lighttpd配置**: - 启用压缩功能,减少传输数据量。 - 设置静态文件缓存,减轻后端服务器压力。 - **Squid配置**: - 配置缓存大小,根据实际情况调整。 - 设置...

    lighttpd-1.4.18

    总的来说,lighttpd-1.4.18是一个兼顾性能与效率的Web服务器解决方案,尤其适合对资源有严格限制的场景。它的轻量级特性、模块化设计和丰富的安全功能,使得它在众多Web服务器中脱颖而出,成为小型和中型网站的理想...

    高性能高并发服务架构.doc

    #### Lighttpd+Squid+Apache构建高效率Web服务器 - **Lighttpd**:轻量级Web服务器,适合静态内容的快速响应。 - **Squid**:作为代理服务器,提供缓存功能,减轻后端压力。 - **Apache**:负责复杂的动态内容处理...

    高性能并发服务器架构

    - **Lighttpd + Squid + Apache**:这种组合能够提供高效的Web服务,并且Squid作为反向代理可以有效减轻后端服务器的压力。 - **Memcached**:广泛应用于各种Web应用中作为缓存层,可以显著提高数据访问速度。 - **...

    高性能高并发服务器架构.pdf

    - **Lighttpd+Squid+Apache**: 组合使用轻量级的Web服务器和代理缓存服务器,提高Web服务的效率。 - **Memcached**: 用于缓存经常访问的数据,减轻数据库负担。 - **MySQL**: 通过优化配置、索引设计等方式提高...

    十几种经典web架构及场景分析

    架构2:Nginx和Squid配合搭建的Web服务器前端系统 该架构是目前个人觉得比较稳妥并且最方便的架构,易于多数人接受: 1. 前端的LVS和Squid,按照安装方法,把epoll打开,配置文件照搬,基本上问题不多。 2. 中层...

    电商网站开发与管理第2章网站建设基础知识.pptx

    Web平台由Web服务器软件和浏览器软件组成,如IIS、Apache、Nginx、Lighttpd和Squid等,它们各自有不同的特性,适应不同的需求。 Web服务器软件的选择对网站性能有很大影响。IIS是初学者的常用选择,而Apache因其...

    Yupoo构架说明文档

    使用了多种Web服务器,包括Lighttpd、Apache和nginx。这些服务器的组合使用旨在优化性能和负载均衡,其中Lighttpd可能被用来进行URL哈希,确保相同图片请求总是路由到同一台Squid缓存服务器,从而提高缓存命中率。 ...

    上海Linux运维工程师-面试题-个人总结).docx

    面试中可能会询问Squid缓存服务器的配置与管理,Nginx和Lighttpd的反向代理、负载均衡设置,Memcached的使用场景,以及邮件服务器的搭建和维护。同时,负载均衡软件如HAProxy和Nginx的负载分发策略也是考察重点。 ...

    国内图片网站Yupoo的架构

    带宽:4000M/S(参考)服务器数量:60台左右Web服务器:Lighttpd,Apache,nginx应用服务器:Tomcat其他:Python,Java,MogileFS、ImageMagick等其架构图如下:Squid与Tomcat似乎在Web2.0站点的架构中较少看到。...

    上海Linux运维工程师-面试题-个人总结).pdf

    8. **相关技术经验**:如Squid缓存服务器、Nginx和Lighttpd等Web服务器、Memcached缓存服务、负载均衡技术、分布式文件处理和邮件服务器的使用和管理经验。 9. **DNS解析**:DNS使用53号端口,TCP/UDP协议。正向...

    2021年有关试用期工作总结范文汇编五篇.pdf

    这有助于提升团队协作精神,同时也反映出他们对新技术和工具的掌握,如Apache、Varnish、Lighttpd等服务器发布技术。 随着公司的发展,员工不断适应新的挑战,比如参与SNS2.5新版本的内部测试,提供反馈以改进产品...

    nagios详细安装和插件介绍

    - **Web服务器健康状态监控**:监控Apache、Lighttpd、Nginx等Web服务器的运行状态。 - **Squid健康状态监控**:监控Squid代理服务器的工作状态。 - **Rsync/NFS监控**:监控文件同步和网络文件系统的状态。 #### ...

    2021年见习期自我鉴定模板锦集9篇(精选).docx

    3. **服务器发布和配置**:熟悉了Apache、Varnish、Lighttpd等不同平台的服务器发布,增强了在系统配置和事件处理上的能力。创建并发布了部门内部的BBS论坛,加强了团队内部的交流和学习。 4. **SNS系统升级**:...

    美信软件操作文档

    - **Lighttpd**:Lighttpx Web服务器监测。 - **邮件服务器** - **Exchange**:Microsoft Exchange Server监测。 - **标准邮件**:标准邮件服务器监测。 - **代理服务器** - **Squid**:Squid代理服务器监测。 ...

Global site tag (gtag.js) - Google Analytics