文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1. 背景

在产品的迭代中,我们完成了移动端瓦片缓存方案和服务端瓦片缓存方案。但是当我们遇到旧产品不易升级,或正式运行项目无法立刻进行产品更新时,我们可以采用基于Nginx的缓存设置来实现第三方瓦片服务的瓦片缓存。最近在某24小时运行项目中,团队成员hwg针对性的做了Nginx配置的设置和实施,我这里做一个总结。

2.Nginx的缓存策略

这里给出网友已经做好的一张示意图:

其核心就是HIT检查,通过定义好的Key去缓存里获取,当没有获取到时则为MISS状态,然后进行服务转发,将获取的结果存入缓存。

3.实际项目详细配置

3.1定义缓存配置

相关配置的详细说明:

  proxy_cache_path:缓存存放路径。如果路径带上/,则表示绝对路径。如果不带/,则表示相对路径。这里写的my_cache,则是相对路径。

  levels : 设置缓存文件目录层次;如果所有的缓存放入一个文件夹,则影响效率。这里设置的是levels=1:2 ,表示两级目录;

   key_zone : 在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key;

  max_size : 最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件;

  inactive : 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件,默认为10分钟;“需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件”;

  use_temp_path : 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝;

3.2 缓存使用

proxy_cache :启用proxy cache,指定声明好的缓存区域key_zone;
        proxy_cache_valid  200 206 304 301 302 10d; 含义为对httpcode为200\206等的缓存结果缓存10天;

   proxy_cache_key $uri : 定义缓存唯一key,通过唯一key来进行hash存取;

        proxy_no_cache和proxy_cache_bypass:当为0时表示缓存,不为0时表示不缓存。这里与匹配语句配合,当传入参数中包含指定规则时,才进行缓存。

3.3其他扩展配置

对访问请求记录的日志路径,以及记录日志格式的定义。

4.结果测试

第一次访问时,未命中:

但是此时产生了缓存文件(二级目录):

 

  第二次访问时,命中:

查看日志,确定性能提升:

-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

基于Nginx进行地图瓦片缓存的方案描述的更多相关文章

  1. 基于nginx的FastCGI的缓存配置

    废话不多说了, 直接上配置, 其实 fastcgi_cache 和 proxy_cache 的配置基本一样: # !缓存文件存放目录 # levels 缓存层次 # keys_zone 缓存空间名和共 ...

  2. 基于 Nginx && Lua 的简易CC防护方案

    零.前言 1.CC攻击简述 CC攻击(Challenge Collapsar)是常见网站应用层攻击的一种,目的是消耗服务器资源,降低业务响应效率:极端情况会让站点无法正常提供服务: 2.本文要点 旨在 ...

  3. 基于nginx的频率控制方案思考和实践

    基于nginx的频率控制方案思考 标签: 频率控制 nginx 背景 nginx其实有自带的limit_req和limit_conn模块,不过它们需要在配置文件中进行配置才能发挥作用,每次有频控策略的 ...

  4. nginx在代理转发地图瓦片数据中的应用

    最近有这样一个需求,需要将arcgis server发布的地图瓦片放在移动硬盘中,系统演示的时候,直接调用本地的地图瓦片,而非远程的,主要是为了系统演示的时候加快地图访问速度. 而且需要在任意电脑运行 ...

  5. Upsync:微博开源基于Nginx容器动态流量管理方案

    Upsync:微博开源基于Nginx容器动态流量管理方案 https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075& ...

  6. 基于nginx tomcat redis分布式web应用的session共享配置

    一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...

  7. 基于 MBTiles 规范扩展的缓存文件格式说明

    MBTiles 是由 MapBox 制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范.该规范由MapBox制定,详见http://mapbox.com/mbtiles- ...

  8. 【转】Nginx学习---Nginx&&Redis&&hcache三层缓存架构总结

    [原文]https://www.toutiao.com/i6594307974817120782/ 摘要: 对于高并发架构,毫无疑问缓存是最重要的一环,对于大量的高并发,可以采用三层缓存架构来实现,n ...

  9. nginx+memcache实现页面缓存应用

    一.前言 nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的请求不再经过应用程序处理,如php-fpm.django,大大的提升动态页面的速度. ...

随机推荐

  1. Python_doc文件写入SQLite数据库

    #docx文档题库包含很多段,每段一个题目,格式为:问题.(答案) #数据库datase.db中tiku表包含kechengmingcheng.zhanngji.timu.daan四个字段 impor ...

  2. 微信小程序开发库grace vs wepy

    grace和wepy都是辅助小程序开发的开源库,本文对两者做个对比. 注:本文是作者本人的一些拙见,纯粹的技术讨论,不想引起技术信仰之争,欢迎积极.正向的讨论及建议. 如果你还不了解Grace, 请参 ...

  3. 【转】JavaScript 错误处理与调试——“错误处理”的注意要点

    try-catch语句 该语句最适合处理那些我们无法控制的错误,在明明白白地知道自己的代码会发生错误时,再使用该语句就不太合适了. ECMA-262第3版引入了try-catch语句,基本的语法如下所 ...

  4. 一个能够在Asp.Net和Asp.NetCore之间能够互相通讯的Rpc

    一.特性 1.跨平台 2.提供负载均衡算法 3.支持ZK服务协调 4.提供了JSON.BinarySerializer.还有自定义的序列化方式 5.客户端提供Socket连接池,以便于快速交互,防止类 ...

  5. SSM-SpringMVC-11:SpringMVC中ParameterMethodNameResolver参数方法名称解析器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 或许曾经的我们也见过一种方式http://localhost:8080/项目名/后台servlet?actio ...

  6. LeetCode Javascript实现 100. Same Tree 171. Excel Sheet Column Number

    100. Same Tree /** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; ...

  7. git实用命令

    http://blog.sina.com.cn/s/blog_4ce89f2001014qvr.html 1.git clone                                     ...

  8. SQL2008全部数据导出导入两种方法

    方法一:生成脚本导出导入sql2008全部数据第一步,右键要导出的数据库,任务--生成脚本 第二步,在设置脚本编写选项处,点击--高级(A),选择要编写脚本的数据的类型为:架构和数据 如果找不到 要编 ...

  9. JUnit 异常处理

    java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=testfindAll], {ExactMatcher ...

  10. JSON 数据重复 出现$ref

    JSONArray  类型  如果我们往里面add数据的时候 如果数据相同,那么就会被替换成 $ref:   也就是被简化了 因为数据一样所直接 指向上一条数据 循环引用:当一个对象包含另一个对象时, ...