文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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. android dp深度解析(转)

    我转载地方的连接:http://zhangkun716717-126-com.iteye.com/blog/1772696  当笔记记录一下 dip: device independent pixel ...

  2. 并发库应用之八 & 循环路障CyclicBarrier应用

    JDK包位置:java.util.concurrent.CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及 ...

  3. 【转】mysql 中int类型字段unsigned和signed的区别

    转自https://www.cnblogs.com/wangzhongqiu/p/6424827.html 用法: mysql> CREATE TABLE t ( a INT UNSIGNED, ...

  4. Visual Studio的常用快捷键

    项目相关的快捷键 Ctrl + Shift + B   生成项目 Ctrl + Alt + L   显示Solution Explorer(解决方案资源管理器) Shift + Alt+ C   添加 ...

  5. PHP开发基础知识

    PHP的学习 PHP脚本以<?php 开始 ?>结束 <?php //此处写代码 ? > php默认文件扩展名.php php文件通常包含HTML标签以及一些PHP脚本代码 “ ...

  6. SSM-MyBatis-13:Mybatis中多条件查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...

  7. PHP访问数据库配置通用方法

    提取一种对数据库配置的通用方式 目的是通过通用类访问配置文件的方式,提供对数据库连接的动态获取和设置,使开发时和生产应用时都能够提供灵活的.简化的.解耦的操作方式.比如在配置文件中配置好两套数据库访问 ...

  8. linux实时文件事件监听--inotify

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  9. 概率与统计推断第一讲homework

    1. 假设在考试的多项选择中,考生知道正确答案的概率为$p$,猜测答案的概率为$1-p$,并且假设考生知道正确答案答对题的概率为1,猜中正确答案的概率为$\frac{1}{m}$,其中$m$为多选项的 ...

  10. 你不知道的JavaScript--Item18 JScript的Bug与内存管理

    1.JScript的Bug IE的ECMAScript实现JScript严重混淆了命名函数表达式,搞得现很多人都出来反对命名函数表达式,而且即便是现在还一直在用的一版(IE8中使用的5.8版)仍然存在 ...