varnishsquidnginx cache 有什么不同

varnishsquidnginx cache 有什么不同,第1张

squid是缓存服务器科班出生

varnish是觉得squid性能不行,纯内存缓存服务器方案

nginx cache是属于不务正业,得益于nginx强大的性能

SQUID 是功能最全面的,但是架构太老,性能不咋的

Varnish 是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和一般是挺好的

Nginx 本来是反向代理/web服务器,用了插件可以做做这个副业,但是本身不支持特性挺多

ATS 目前是一个不错的选择

1 Squid功能全而大,适合于各种静态的文件缓存,国内的top2CDN厂商是基于拿squid做的商业改造,但受限于仅支持单进程(虽然squid32也开始支持S id-cach eo rg/Features/SmpScale),因此一般会在前端挂一个HAProxy或nginx做负载均衡跑多个实例。

2Varnish由于是内存cache,所以对小文件如css,js,小啥的支持很棒,sina的就是用的varnish,后端的持久化缓存可能采用的是squid或ats

3nginx的代理功能只是它的一个模块功能,功能相对前两者目前还完全无法替代,但未来充满期待。

在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。

apache:

首先确定配置文件httpdconf中确已经加载mod_headers模块。

LoadModule headers_module modules/mod_headersso

我们可以根据文件类型来让浏览器每次都从服务器读取,这里测试用css、js、swf、php、html、htm这几种文件。

<FilesMatch “\(css|js|swf|php|htm|html)$”>

Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"

Header set Pragma "no-cache"

</FilesMatch>

nginx:

location ~ \(css|js|swf|php|htm|html )$ {

add_header Cache-Control no-store;

}

对于站点中不经常修改的静态内容(如,JS,CSS),可以在服务器中设置expires过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力的目的。

以Nginx服务器为例:

location ~ \(gif|jpg|jpeg|png|bmp|swf)$ {

#过期时间为30天,

#文件不怎么更新,过期可以设大一点,

#如果频繁更新,则可以设置得小一点。

expires 30d;

}

location ~ \(js|css)$ {

expires 10d;

}

最简单的反代+全缓存脚本:

#新建2个目录,放置缓存文件:

mkdir -p /home/cache/path

mkdir /home/cache/temp

修改/usr/local/nginx/conf/nginxconf的http层,添加以下代码:

client_body_buffer_size 512k;

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/cache/temp;

proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:10m inactive=7d max_size=30g;

#500m是内存占用,7d是7天无访问删除,30g是缓存占具硬盘空间

#limit_zone crawler $binary_remote_addr 10m; #这段是用于限制单ip连接数的,如果频繁出现后端负载过大可以尝试去掉#。

扩展资料:

nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。也就是说,可以把网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

假设前端nginx(为127001:8080)仅仅包含一个静态页面indexhtml;后 台的两个apache服务器(分别为localhost:80和1583770143:80),一台根目录放置phpMyAdmin文件夹和 testphp(里面测试代码为print "server1";),另一台根目录仅仅放置一个testphp(里面测试代码为print "server2";)。

-反向代理负载平衡

Nginx缓存的基本思路

基本思想是利用客户访问的时间局部性原理,对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务器的鲁棒性。

对于缓存,我们大概会有以下问题:

(1)缓存文件放在哪儿?

(2)缓存的空间大小是否可以限定

(3)如何指定哪些请求被缓存?

(4)缓存的有效期是多久?

(5)对于某些请求,是否可以不走缓存?

解决这些问题后,nginx的缓存也就基本配置完成了,下面看详细配置过程

开启缓存

要使用缓存,首先要使用 proxy_cache_path 这个指令(必须放在 http 上下文的顶层位置),然后在目标上下文中使用 proxy_cache 指令

配置示例

proxy_cache_path 有两个必填参数,第一个参数为 缓存目录,第二个参数keys_zone指定缓存名称和占用内存空间的大小(注:示例中的10m是对内存中缓存内容元数据信息大小的限制,如果想限制缓存总量大小,需要用 max_size 参数)

proxy_cache 的参数为之前指定的缓存名称

缓存管理的相关进程

在缓存工作中有两个附加进程:

(1)缓存管理器

定期检查缓存状态,看缓存总量是否超出限制,如果超出,就移除其中最少使用的部分

(2)缓存加载器

加载器只在nginx启动后运行一次,把缓存内容的元数据信息加载到内存空间,如果一次性加载全部缓存信息,会大量消耗资源,使nginx在启动后的几分钟里变慢,为避免此问题,有3种加载策略:

loader_threshold – 指定每次加载执行的时间

loader_files – 每次最多加载的数量

loader_sleeps – 每次加载的延时

例如:

proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

指定缓存哪些请求

nginx默认会缓存所有 get 和 head 方法的请求结果,缓存的key默认使用请求字符串

(1)自定义key

例如 proxy_cache_key " request_uri cookie_nocache arg_comment;

如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发

综合示例

nginx 缓存机制

三分钟看懂Nginx服务器的缓存原理和机制

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » varnishsquidnginx cache 有什么不同

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情