Lighttpd有硬盘级别的cache-(mod_cache)和内存级别的cache(mod_mem_cache),内存级别的cache是国人的产品,我喜欢用lighttpd就是因为它具有2种选择的cache,像我的实际需求,由于系统存在很多图片,但是容量不大,一般都少于40k,图片,js,CSS等我都喜欢放到内存里面,毕竟磁盘i/o是一个真正的计算机瓶颈制造者,而一些其他资源cache就放到硬盘级别的cache

1) squid和modcache的对比:squid是个功能全面的系统、但效率不高;modcache是功能不多,但效率高的缓存系统;请求数不多的情况下 (<100 req/s),两者差别不大;请求数超过100 req/s,modcache完胜
2) Linux系统的优化也很重要,比如打开最大文件数等等。不一定非要改linux kernel source,参数调优事半功倍
3)如何用尽多核CPU。首先要用多个进程(server.max-workers=4);用Linux的setaffinity系统调用把CPU0空闲出来,再根据服务情况选择是否把缓存加载到内存中;最后就是给足够大的负载了(大部分时候瓶颈在IO上,而不在CPU上)。
其实lighttpd在请求高(>1k req/s)的情况下,CPU也不忙,比Squid好太多;也就是说lighttpd不属于CPU计算量大的程序,而大部分时间在处理、等待网络IO,磁盘IO
4) keepalive 尽量关闭。lighttpd 1.4.23新加的server.defer-accept选项不错,可设置成server.defer-accept=30
5) 小文件缓存到内存;大文件放硬盘,硬盘没必要用raid
6) 加载 mod_status,设置 status.statistics-url = "/lighttpd_status"。然后访问http://ip/lighttpd_status 可看到modcache 的缓存命中率
7) modcache 使用两级hashmap管理内存缓存,效率不错,支持上千万的项目快速存取
8) 单进程和多线程。单进程适合现代的硬件和软件;多线程的弱势在于锁:一般多线程使用多个全局锁,当请求数量超过一定值后,全局锁会导致性能急剧下降;多线程的扩展性比单进程差不少。
多线程适合不同线程做不同工作,或者请求数量可控、且不高的情况

以下是关键配置

#模块的加载-------------------------------------------------------

server.modules              = (

"mod_compress",
                                "mod_access",
                               "mod_status",
                               "mod_mem_cache",  #memcache 内存级的cache
                               "mod_cache",           #disk cache 硬盘级别的cache
                               "mod_proxy"

#模块的排序是有规则的,如果不合理排序,容易产生问题

#硬盘级别cache的设置----------------------------------------

#模块参数说明:http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCache

#mod_mem_cache作者的最新主页:http://code.google.com/p/lighttpd-improved/

######## disk cache #########
cache.support-queries = "enable" #cache允许查询 
cache.bases = ("/data/cache")   #cache存放的根目录
cache.refresh-pattern = ( #以下是允许cache的文件类型以及cache的有效期,单位:分)
        "/.(?i)(flv)$" => "0 fetchall-for-range-request flv-streaming",
        "/.(?i)(js|css|xml)$" => "240", # update js/css/xml every 4 hours
        "/.(?i)(htm|html|shtml)$" => "30 update-on-refresh", #update html/htm/shtml every 30 minutes and on refresh requests
        "/.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880",
        "/.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request",
        "." => "30 update-on-refresh"
)

#内存级别的cache设置-----------------------------------------------

#模块详细参数说明:http://redmine.lighttpd.net/wiki/1/Docs:ModMemCache
######## memory cache ###############
mem-cache.enable = "enable"
mem-cache.filetypes = ("application/x-javascript", "text/css","text/javascript","image/jpeg","image/gif","image/png")    #定义内存cache的文件类型
mem-cache.max-memory = 64                                      #允许使用的最大内存大少,单位:M
mem-cache.max-file-size = 1024                                   #单个文件大小 ,单位:KB
mem-cache.expire-time = 180                                       #过期时间,默认单位:分

#调度目标的web-server列表

proxy.server  = ( "/" =>
        (
                 ( "host" => "192.168.10.1","port" => 80)

( "host" => "192.168.10.2","port" => 80)

( "host" => "192.168.10.3","port" => 80)

)
)

结果测试:用iE装了httpwatch后抓包查看,首先第一次访问proxy_cache后,关掉,接着清空本地cookies,再次打开,速度是几何级别的提升,页面一下子刷出来了,查看http_header时,发现如下关键字:

#硬盘cache的命中

(Status-Line) HTTP/1.1 200 OK
Accept-Ranges bytes
Cache-Control max-age=13873
Content-Length 2974
Content-Type application/x-javascript
Date Thu, 22 Jul 2010 11:26:54 GMT
ETag "0f3b8da1939ca1:4aa7"
Expires Thu, 22 Jul 2010 15:18:07 GMT
Last-Modified Sat, 19 Sep 2009 11:10:54 GMT
Server lighttpd/1.4.26
X-Cache HIT        #命中缓存
X-Powered-By ASP.NET

#内存cache的命中

(Status-Line) HTTP/1.1 200 OK
Cache-Control max-age=172721
Content-Length 13952
Content-Location http://192.168.3.120/uploads/userup/2192/myface.jpg #我的proxy_cache地址
Content-Type image/jpeg
Date Thu, 22 Jul 2010 11:19:29 GMT
ETag "22bc68d74227cb1:4e86"
Expires Sat, 24 Jul 2010 11:18:10 GMT
Last-Modified Mon, 19 Jul 2010 13:03:54 GMT
Server lighttpd/1.4.26
X-Cache TO MEMCACHE   #命中内存
X-Powered-By ASP.NET

小结:这只是一般情况下的案例测试,具体需要涉及实际情况,例如php动态文件,媒体文件等的cache,还有图片网站或者视频网站等设置cache内容,过期时间等均要不同设置才能做到最大限度优化,不能一视同仁。

lighttpd 负载均衡-反向代理+cache浅谈相关推荐

  1. day10 负载均衡反向代理

    day10 负载均衡反向代理 1.复习 1.nginx+python的流程1.1安装基础环境yum install python3 pip3 install django==2.2.2安装uwsgi之 ...

  2. Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡 反向代理

    Nginx是一款自由的.开源的.高性能HTTP服务器和反向代理服务器. 轻量级,同样起web服务,比 apache占用更少的内存及资源 抗并发, nginx处理请求是异步非阻塞的,而 apache则是 ...

  3. 负载均衡 反向代理为何叫反向代理?

    转  https://www.zhihu.com/question/24723688 与正向代理比起来,反向代理是什么东西反向了? 关注者 1217 被浏览 184352 41 个回答 刘志军 公众号 ...

  4. 架构之Nginx(负载均衡/反向代理)

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器 ,也是一个 IMAP/POP3/SMTP 代理 服务器 . Nginx 是由 Igor Sys ...

  5. Nginx安装/负载均衡/反向代理配置与调优

    [Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...

  6. 【Ngnix】可提供负载均衡反向代理的web服务器

    前言 之前我们用IIS搭建的是web服务器即内网服务器,但通常不直接接受外网用户请求,由反向代理服务器充当这一衔接角色,用户直接访问反向代理服务器就可以获得目标服务器的资源.为提高网络吞吐和加强网络数 ...

  7. Nginx学习总结(10)——Nginx前后端分离将多个请求转发到多个Tomcat,负载均衡反向代理

    一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...

  8. 负载均衡反向代理 动静分离

    #!/bin/bash IP=192.168.186.77 WG=192.168.186.2 YM=255.255.255.0 DIR=/etc/sysconfig/network-scripts W ...

  9. 万字雄文讲透现代网络负载均衡和代理技术,终于弄懂负载均衡那点事

    2019独角兽企业重金招聘Python工程师标准>>> 最近我注意到,针对负载均衡和代理这两项现代网络技术,有教育意义的介绍性材料相当稀缺.这引起我的思考:为什么会这样?在可靠的分布 ...

最新文章

  1. 连接池和 Timeout expired异常
  2. git怎样用idea拉代码_一款强大的 IDEA 代码生成器,学会用,真香!
  3. 伪静态隐藏域名后缀_你想知道的动态URL、静态URl、伪静态URL概念及区别都在这里!...
  4. Oracle 随机取某一列的值
  5. 什么是oracle命名,ORACLE数据库命名规范
  6. java空心字木塔_我国七个千年古塔:第四个空心没有塔顶,最后一个是木塔无钉无铆...
  7. [转]XHTML+CSS兼容性解决方案小集
  8. Python:Python3错误提示TypeError: slice indices must be integers or None or have an __index__ method解决办法
  9. diff命令两个服务器文件,LINUX命令diff-文件管理-比较给定的两个文件的不同
  10. 今天,正式开始行走边境线!
  11. Datawhale组队学习开源内容汇总
  12. Python Post提交简单案例,文本内容在线语音合成
  13. android pad课件制作软件,平板电脑可以做ppt吗
  14. IPv4/IPv6地址范围与网络地址/子网掩码的转换,点分十进制与数字掩码的转换
  15. Excel电子表格隔行自动填充底色
  16. 视频中场:中视频的复兴与前路
  17. excel报表管理系统mysql_教育扶贫数据库管理系统下载安装|教育扶贫数据库管理系统(mysql收集excel表格)官方版下载_v1.0_9号软件下载...
  18. SPSS数据类型学习
  19. HDU——解题报告 1060
  20. SpringBoot重点详解--dbcp2数据源配置

热门文章

  1. upgrade lnmpa php.sh,LNMP 状态管理命令说明及Nginx、MySQL/MariaDB、PHP升级教程
  2. java response.write_response设置编码方式 print和write方法的对比
  3. 程序模拟抽奖流程图_一道与联欢会相关的概率统计题目的模拟仿真
  4. 基于YOLOv5模型压缩、模型量化、模型剪枝
  5. WifiP2pSettings工作流程
  6. 【TensorFlow2.0】(7) 张量排序、填充、复制、限幅、坐标选择
  7. 基于简化点云地图的语义边缘对齐的单目定位方法
  8. window环境Visual Studio配置:OpenCV,Eigen,jsoncpp
  9. 什么样的显卡能支持 4K 分辨率输出?
  10. PSM-省电模式(PowerSaving Mode)