让网站飞起来02--服务器缓存技术

标签: 网站 飞起来 服务器 | 发表时间:2011-09-27 20:55 | 作者:PHP淮北 Bloger
出处:http://www.cnblogs.com/

 

前提提要:

第一个介绍的是《让网站飞起来01---浏览器缓存技术

介绍服务器,肯定要先支持服务器在网站架构中的位置和作用,然后在介绍几种常见的服务器缓存配置。

正文

对服务器在网站中位置作用有个大概了解:lamp架构图

LAMP网站架构方案分析

上图主要介绍了三种服务器,也是比较常用的服务器,下面就介绍这三种服务器的缓存配置。

apache是作为正向代理服务器缓存,nginx和squid主要作为反向代理服务器缓存.

 

服务器缓存工作原理

 

上面是一个简单的流程图:我先描述一下:

  1. 用户1访问A页面,服务器解析A页面返回给用户1,同时在服务器内存上做一定映射,把A页面缓存在硬盘上面
  2. 用户2访问A页面,服务器直接根据内存上的映射找到对应的页面缓存,直接返回给用户2,这样就减少了服务器对同一页面的重复解析

服务器缓存和浏览器缓存的区别:

  • 服务器缓存是把页面缓存到服务器上的硬盘里,而浏览器缓存是把页面缓存到用户自己的电脑里

服务器缓存技术

  1. apche缓存配置:

apache2.2支持mod_cache 和 mod_file_cache两个模块,官方手册的说明:

mod_cache实现了一个RFC 2616兼容的HTTP本地缓存(web服务器)或HTTP代理缓存(代理服务器)。mod_cache需要一个或多个存储管理模块提供的服务才能正常工作。目前官方发布的存储管理模块有两个:

mod_disk_cache
一个基于磁盘的存储管理模块。
mod_mem_cache
一个基于内存的存储管理模块。mod_mem_cache可以被配置为两种不同的操作模式:①缓存打开的文件描述符;②在堆(heap)上缓存对象。mod_mem_cache既可以用于缓存本地生成的内容,也可以用于为反向代理模式下的mod_proxy(参见ProxyPass)缓存后端服务器输出的内容。

 

使用方法:

  • 编译mod_cache,mod_mem_cache,mod_disk_cache 模块

Cd /root/httpd-2.2.3/modules/cache

/usr/local/apache/bin/apxs -i -a -c mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c //编译

/usr/local/apache/bin/apxs -i -a -c mod_mem_cache.c //编译

/usr/local/apache/bin/apxs -i -a -c mod_disk_cache.c //编译

  • 编辑httpd.conf文件

添加:

<IfModule mod_cache.c> 

#内存缓存

<IfModule mod_mem_cache.c> 

CacheEnable mem /images

MCacheSize 4096 

MCacheRemovalAlgorithm LRU 

MCacheMaxObjectCount 100 

MCacheMinObjectSize 1 

MCacheMaxObjectSize 2048 

CacheMaxExpire 864000 

CacheDefaultExpire 86400 

#CacheDisable /php 

</IfModule> 

#硬盘缓存

<IfModule mod_disk_cache.c> 

CacheRoot /home/cache

#CacheSize 256 

CacheEnable disk / 

CacheDirLevels 4 

#CacheMaxFileSize 64000 

#CacheMinFileSize 1 

#CacheGcDaily 23:59 

CacheDirLength 3 

</IfModule> 

</IfModule> 

  

/usr/local/apache/bin/apachectl restart  //重启apche

 

  • 内存缓存参数说明:

1,CacheEnable mem /images 缓存images下面的内容,这里的 mem只是一个缓存类型,指示mod_cache使用内存的存储管理器通过实施mod_mem_cache 。缓存类型disk指示mod_cache使用基于磁盘的存储管理的实施mod_disk_cache 。缓存类型,fd指示mod_cache使用文件描述符缓存实施mod_mem_cache

2,MCacheSize最大内存使用量,插入在缓存和对象大小的对象是大于剩余内存,将被删除,直到新的对象可以被缓存。 被删除的对象选择使用指定的算法MCacheRemovalAlgorithm

3,MCacheRemovalAlgorithm缓存算法:

LRU (最近最少使用)
LRU删除文件,没有时间最长的被访问的。
GDSF(GreadyDual尺寸)
GDSF分配一个优先的文件缓存文件的费用的基础上,缓存大小和怀念。以最低的优先权文件被删除第一次。

4,MCacheMaxObjectCount最大缓存对像个数

5,MCacheMaxObjectCount最大缓存对像字节数

6,MCacheMinObjectSize最小缓存对像字节数

7,CacheMaxExpire 最大缓存结止时间

8,CacheDefaultExpire  默认缓存结止时间

9,CacheDisable /php       不缓存php下面的内容

硬盘缓存参数说明;

1,cacheroot /cache  缓存存放的目录

2,#CacheSize 256         缓存空间大小单位KB

3,CacheEnable disk /    设置缓存方式

4,#CacheMaxFileSize 64000    最大缓存文件大小

5,#CacheMinFileSize 1      最小缓存文件大小

6,#CacheGcDaily 23:59     缓存清理时间

7,CacheDirLength 3        缓存文件夹名子字符长度

8,CacheDirLevels 4        缓存目录,子目录层次

关于参数说明和更多的学习参考:http://blog.51yip.com/apachenginx/898.html

http://apache.jz123.cn/mod/mod_cache.html

nginx缓存配置

nginx是一个很好的静态服务器,很适合存放静态文件如css,图片,视频文件等等,可以很好的减去服务器的鸭梨!

nginx的缓存配置主要使用 proxy_cache模块实现,工作原理就是就用户请求缓存到本地的某个目录下,当再次请求时候,直接读取缓存,从而减轻服务器鸭梨

配置nginx.conf,下面是一个经典的缓存配置

 

 

user  www www;
worker_processes 2;
error_log  /var/log/nginx_error.log  crit;
worker_rlimit_nofile 65535;
events
{
  use epoll;
  worker_connections 65535;
}

http
{
  include       mime.types;
  default_type  application/octet-stream;

  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;

  sendfile on;
  tcp_nopush     on;
  keepalive_timeout 0;
  tcp_nodelay on;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  ##cache##
  proxy_connect_timeout 5;
  proxy_read_timeout 60;
  proxy_send_timeout 5;
  proxy_buffer_size 16k;
  proxy_buffers 4 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_temp_path /home/temp_dir;
  proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
  ##end##

  gzip    on;
  gzip_min_length   1k;
  gzip_buffers   4 8k;
  gzip_http_version  1.1;
  gzip_types   text/plain application/x-javascript text/css  application/xml;
  gzip_disable "MSIE [1-6]\.";

  log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
  upstream appserver { 
        server 192.168.1.251;
  }
  server {
        listen       80 default;
        server_name www.gangpao.com;
        location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
              proxy_pass http://appserver;
              proxy_redirect off;
              proxy_set_header Host $host;
              proxy_cache cache_one;
              proxy_cache_valid 200 302 1h;
              proxy_cache_valid 301 1d;
              proxy_cache_valid any 1m;
              expires 30d;
        }
        location ~ .*\.(php)(.*){
             proxy_pass http://appserver;
             proxy_set_header        Host $host;
             proxy_set_header        X-Real-IP $remote_addr;
             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        access_log /usr/local/nginx/logs/www.gangpao.com.log;
  }
}

 

 

 

1、http段设置。 
proxy_temp_path /home/temp_dir;设置临时目录 
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;设置缓存目录为二级目录,共享内存区大小,非活动时间,最大容量,注意临时目录要跟缓存目录在同一个分区。 
2、server段设置 
请求静态文件设置。 
proxy_cache cache_one;设置缓存共享内存区块,也就是keys_zone名称。 
proxy_cache_valid 200 302 1h;设置http状态码为200,302缓存时间为1小时。 
expires 30d;设置失期时间,为30天 
请求动态文件设置。 
proxy_pass http://appserver;不进行缓存,直接转到后端服务器

测试:当客户端发起http请求时在服务器上会产一个缓存文件如

/home/cache/0/b9/8bd841b1c44ee5b91457eb561e44eb90

更详细的参数说明:

http://wiki.nginx.org/NginxChsHttpProxyModule#proxy_cache_valid

http://linux008.blog.51cto.com/2837805/547236

 

squid的缓存配置

之前没有接触过squid,这些都是现学的,下面介绍一下squid:

Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。

Squid能够增强访问控制,提高安全性。可以针对特定的的网站、用户、网络、数据类型实施访问控制等

安装squid---安装是最新的版本

下载:wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.15.tar.gz

tar xzvf squid-3.1.15.tar.gz

cd squid-3.1.15

./configure --prefix=/usr/local/squid

make && make install

******************************安装ok

 

配置文件:

vi /usr/local/etc/squid.conf

visible_hostname raymond-linux

# cache服务器的名称 
# 缓存管理员 
cache_mgr webmaster@example.com

# 如果不能访问,需要 http_access deny !Safe_ports 改为allow或将 3128加入 safe_ports 
# 也可配置监听80端口,并配置为加速模式 
http_port 3128  vhost vport

# cache服务器之间通信的端口UDP 
icp_port 3130

# 当然cache_peer还可以设置兄弟节点、上级cache服务器等等,这里这设置了源服务器地址 
# 设置上级根服务器的地址,也就是电信源服务器地址 
cache_peer 172.20.35.251 parent 82 0 no-query originserver name=myAccel 
# cache目录和大小的设置,1GB硬盘空间和256M内存 
#前面已经设置  cache _dir /var/spool/squid 
#cache_dir ufs /usr/squid/var/cache 256 16 256 
cache_mem 16 MB

cache_peer_access myAccel allow all

#最大缓存文件大小,超过这个值则不缓存,这个值因人而异 
cache_swap_low 90 
cache_swap_high 95 
maximum_object_size 20000 KB 
#装入内存缓存的文件大小,这个值对Squid的性能影响比较大,因为默认值是8K,超过8K的文件都不装入内存,而实际应用中很多网页和图片等都超过8KB, 个人认为如果缓存不装入内存而存在磁盘上,性能和apache直接读取磁盘文件没什么区别,甚至不如直接访问apache,现在设置成小于4兆的文件通通装入内存缓存.

maximum_object_size_in_memory 4096 KB

# 主机文件路径 
hosts_file /etc/hosts

# 设置日志目录和日志格式#squid 
pid_filename /var/log/squid/squid.pid 
#已在前面配置 access_log /var/log/squid/access.log squid 
#已在前面配置 cache_log /var/log/squid/cache.log 
#已在前面配置 cache_store_log /var/log/squid/store.log 
#模拟apache 日志格式 
emulate_httpd_log on

#设置不想缓存的目录或者文件类型,动态文件,大文件不缓存。不过一般最好缓存 
#已在前面配置 acl all src 0.0.0.0/0.0.0.0 
acl QUERY urlpath_regex cgi-bin .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe 
cache deny QUERY

# 允许所有用户访问 , 要打开 
http_access allow all

#apache ip 
acl apache_server dst 127.0.0.1 
http_access allow apache_server

#正向代理,这里不需要 
#acl our_sites dstdomain sohu.com 
#http_access allow our_sites

  

 

生成cache目录

/usr/local/squid/sbin/squid –z

自动生成

启动squid

./squid

参考资料:http://blog.51yip.com/server/638.html

Squid中文权威指南http://home.arcor.de/pangj/squid/

作者: PHP淮北 发表于 2011-09-27 20:55 原文链接

评论: 4 查看评论 发表评论


最新新闻:
· Web领域急需一位引领者(2011-09-28 08:40)
· Apple需要一个真正意义上的社交网络(2011-09-28 08:39)
· 微软正式推送Windows Phone 7.5芒果(2011-09-28 08:34)
· Facebook 微创新了谁?- No3 Twitter(2011-09-28 08:22)
· Delicious 以全新姿态重生,基于网页链接的 Flipboard(2011-09-28 08:22)

编辑推荐:Web前端开发中的MCRV模式

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [网站 飞起来 服务器] 推荐:

让网站飞起来02--服务器缓存技术

- Bloger - 博客园-首页原创精华区
第一个介绍的是《让网站飞起来01---浏览器缓存技术》. 介绍服务器,肯定要先支持服务器在网站架构中的位置和作用,然后在介绍几种常见的服务器缓存配置. 对服务器在网站中位置作用有个大概了解:lamp架构图. 上图主要介绍了三种服务器,也是比较常用的服务器,下面就介绍这三种服务器的缓存配置. apache是作为正向代理服务器缓存,nginx和squid主要作为反向代理服务器缓存..

让网站飞起来01---浏览器缓存技术

- SuperLucky - 博客园-首页原创精华区
缓存技术在在网站应用中非常重要,在减少服务器请求压力和用户浏览速度加块方面有着功不可没的功劳,. 昨天在我《网站优化--让你的网页飞起来》里面有人问道关于浏览器缓存原理的问题,萌发了我研究缓存技术的兴趣,本文主要. 在介绍缓存技术之前,我们先看一张LAMP网站的价格图,通过架构图我们可以很清晰的对网站整体缓存有一定认识.

优良的数据库架构--让网站飞起来

- We_Get - 博客园-首页原创精华区
   很少谈架构方面的事情,主要是因为这确实是个对知识面和知识深度要求很高的领域,无论是开发语言的选择、代码的架构,服务器的搭配、网络的架构、数据库的架构还是第三方软件的选用等,每一方面都是个很大的方向,每个方向都值得一个人去研究一辈子;每每看到某某网站的首席架构师之类的人(不过很多是海绵派),总觉得那就是乐于做技术的人的终极目标,总是有种崇拜感.

杨建:网站加速--服务器编写篇(上)

- cgeek - Berkeley DB - 杨建的BLOG
Nginx是我见过的Web Server中性能比较高的一个,他几乎是和我的server同时诞生,可能还更早些,框架很不错,我觉得目前版本稍微优化下,支持10w connections不成问题. lighttpd也不错,我对他的认识还是停留在几年前的性能测试上,它的性能会比nginx逊色一些. 他们都支持epoll,sendfile,可以起多个进程worker,worker内部使用非阻塞,这是比较优良的I/O的模型.

Windows平台网站图片服务器架构的演进

- - 博客园_知识库
  构建在Windows平台之上的网站,往往会被业内众多架构师认为很“保守”. 很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的. 由于长期缺乏开源支持,所以只能“闭门造车”,这样很容易形成思维局限性和短板. 就拿图片服务器为例子,如果前期没有容量规划和可扩展的设计,那么随着图片文件的不断增多和访问量的上升,由于在性能、容错/容灾、扩展性等方面的设计不足,后续将会给开发、运维工作带来很多问题,严重时甚至会影响到网站业务正常运作和互联网公司的发展(这绝不是在危言耸听).

[转] 网站性能优化之-数据库及服务器架构...

- - 网站架构_搜搜博客搜索
  转载自: http://blog.163.com/dangzhengtao@yeah/blog/static/ 7780087420098232213289/?fromdm&fromSearch&isFromSea rchEngine=yes 1、Web Server 与 DB Server 分离.

果然这才是铁道部网站服务器崩溃的真相

- - PeeMa.us
想到同学买不到票,打电话过去也不通,晚饭的时候让我帮他做个买票的脚本……. 安装脚本 https://gist. 访问 https://dynamic.12306.cn/otsweb/. 填写信息,还可以在下方表格处选择想要的票的类别. 右下方选择是否要学生票,然后点自动刷新. 程序会自动查询,当有票时会播放音乐提示,并且会高亮有票的车次.

Yahoo!网站性能最佳体验的34条黄金守则——服务器

- - 蓝飞技术部落格
在本系列的第一节中,讲了 提高网站性能中网站“内容”有关的10条原则. 除了在网站在内容上的改进外,在网站服务器端上也有需要注意和改进的地方:. 为文件头指定Expires或Cache-Control. 使用GET来完成AJAX请求. 用户与你网站服务器的接近程度会影响响应时间的长短. 把你的网站内容分散到多个、处于不同地域位置的服务器上可以加快下载速度.

kernel.org服务器遭入侵

- Lamo - Solidot
kernel.org网站首页发布公告,声称多台服务器在本月初(8月12日前)遭黑客攻击,他们在8月28日发现了入侵. 入侵者利用一位用户凭证获得了服务器根访问权限,他们正在调查黑客是如何提升权限的;系统启动脚本被加入了一个木马启动文件;ssh相关文件被修改. kernel.org声称,他们相信Linux kernel源代码库未受影响,因为git分布式版本控制系统的特性决定了它可以很容易注意到代码变化.

Ubuntu下赌ARM服务器

- Tim - Solidot
今日无数手机平板使用的低能耗处理器能否撑起未来的服务器市场. Canonical计划推出支持ARM架构的Ubuntu服务器版本. Ubuntu Linux并不是x86服务器市场的重量级选手,Red Hat才是. 但通过与ARM合作打造ARM服务器,Canonical正努力赢得更多市场份额. 计划于2011年10月发布的Ubuntu Server 11.10,将同步推出支持x86、x86-64和ARM架构的版本.