配置文件

nginx.conf 主配置文件

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  11. '$status $body_bytes_sent "$http_referer" '
  12. '"$http_user_agent" "$http_x_forwarded_for"';
  13. access_log logs/access.log main;
  14. #CDN Include
  15. include proxy.conf;
  16. include upstrem.conf;
  17. include blog.biglittleant.cn.conf;
  18. server {
  19. listen 80;
  20. server_name localhost;
  21. error_page 500 502 503 504 /50x.html;
  22. location = /50x.html {
  23. root html;
  24. }
  25. }
  26. }
  1. cat proxy.conf
  2. #CDN
  3. proxy_temp_path /data/cdn_cache/proxy_temp_dir;
  4. proxy_cache_path /data/cdn_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g;
  5. proxy_connect_timeout 5;
  6. proxy_read_timeout 60;
  7. proxy_send_timeout 5;
  8. proxy_buffer_size 16k;
  9. proxy_buffers 4 64k;
  10. proxy_busy_buffers_size 128k;
  11. proxy_temp_file_write_size 128k;
  12. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;
  1. [root@data-1-1 conf]# cat upstrem.conf
  2. upstream blog.biglittleant.cn
  3. {
  4. server 192.168.56.102:80 weight=10 max_fails=3;
  5. }
  6. [root@data-1-1 conf]#
  1. [root@data-1-1 conf]# cat blog.biglittleant.cn.conf
  2. server
  3. {
  4. listen 80;
  5. server_name blog.biglittleant.cn;
  6. access_log logs/blog.biglittleant.cn-access.log main;
  7. location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf)$
  8. {
  9. #Proxy
  10. proxy_redirect off;
  11. proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
  12. proxy_set_header Host $host;
  13. proxy_set_header X-real-ip $remote_addr;
  14. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  15. proxy_pass http://blog.biglittleant.cn;
  16. #Use Proxy Cache
  17. proxy_cache cache_one;
  18. proxy_cache_key "$host$request_uri";
  19. add_header Cache "$upstream_cache_status";
  20. proxy_cache_valid 200 304 301 302 8h;
  21. proxy_cache_valid 404 1m;
  22. proxy_cache_valid any 2d;
  23. }
  24. location /
  25. {
  26. proxy_redirect off;
  27. proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
  28. proxy_set_header Host $host;
  29. proxy_set_header X-real-ip $remote_addr;
  30. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  31. proxy_pass http://blog.biglittleant.cn;
  32. client_max_body_size 40m;
  33. client_body_buffer_size 128k;
  34. proxy_connect_timeout 60;
  35. proxy_send_timeout 60;
  36. proxy_read_timeout 60;
  37. proxy_buffer_size 64k;
  38. proxy_buffers 4 32k;
  39. proxy_busy_buffers_size 64k;
  40. }
  41. }

mkdir /data/cdn_cache -p

  1. [root@data-1-1 nginx]# ps -ef |grep nginx
  2. root 5620 1 0 21:31 ? 00:00:00 nginx: master process sbin/nginx
  3. nginx 5621 5620 0 21:31 ? 00:00:00 nginx: worker process
  4. nginx 5622 5620 0 21:31 ? 00:00:00 nginx: cache manager process
  5. nginx 5623 5620 0 21:31 ? 00:00:00 nginx: cache loader process

查看进程发现多了两个cache进程,





通过上面的图得到如下结论

  1. 访问html的时候,不走缓存。
  2. 第一次访问图片的时候,cache是miss的状态。
  3. 第二次访问图片的时候,cache是hit的状态。

登录缓存服务器查看

分析nginx缓存过程

第一步:访问了两个URL:http://192.168.56.101/index.html,http://192.168.56.101/b.jpg

第二步查看缓存目录:

  1. [root@data-1-1 cdn_cache]# tree -A /data/cdn_cache/
  2. /data/cdn_cache/
  3. +-- proxy_cache_dir
  4. | +-- 9
  5. | | +-- a8
  6. | | +-- f28e02e3877f3826567907bcb0ebea89
  7. | +-- e
  8. | +-- 88
  9. | +-- 114250cf63938b2f9c60b2fb3e4bd88e
  10. +-- proxy_temp_dir
  11. 6 directories, 2 files

第三步:

缓存配置参数:

  1. proxy_cache_path /data/cdn_cache/proxy_cache_dir levels=1:2

第四步查看缓存内容:

第五步:分析过程

通过对key加密

  1. echo -n '192.168.56.101/index.html' |md5sum |awk '{print $1}'
  2. 114250cf63938b2f9c60b2fb3e4bd88e
  1. echo -n '192.168.56.101/b.jpg' |md5sum |awk '{print $1}'
  2. f28e02e3877f3826567907bcb0ebea89

分析结果:

  1. nginx根据配置levels=1:2进行缓存。
  2. 其中1表示MD5的最后一位。
  3. 其中2表示MD5的倒数第三位和第三位。
  4. 一个冒号表示一层。

参考

NGINX缓存使用官方指南

HTTP 缓存

死磕nginx系列--使用nginx做cache服务的更多相关文章

  1. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  2. S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  3. 如何选择普通索引和唯一索引《死磕MySQL系列 五》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  4. 五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》

    系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的 ...

  5. 什么?还在用delete删除数据《死磕MySQL系列 九》

    系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?& ...

  6. MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》

    有一个问题是这样的统计数据总数用count(*).count(主键ID).count(字段).count(1)那个效率高. 先说结论,不用那么花里胡哨遇到统计总数全部使用count(*). 但是有很多 ...

  7. 为什么MySQL字符串不加引号索引失效?《死磕MySQL系列 十一》

    群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案.没错,是因为MySQL内部进行了隐式转换. 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换. 系列文 ...

  8. 打开order by的大门,一探究竟《死磕MySQL系列 十二》

    在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like  ...

  9. 重重封锁,让你一条数据都拿不到《死磕MySQL系列 十三》

    在开发中有遇到很简单的SQL却执行的非常慢,甚至只查询一行数据. 咔咔遇到的只有两种情况,一种是MySQL服务器CPU占用率很高,所有的SQL都执行的很慢直到超时,程序也直接502,另一种情况是行锁造 ...

  10. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

随机推荐

  1. _ViewStart文件应用

    在这篇<MVC母版页_Layout.cshtml>http://www.cnblogs.com/insus/p/3380419.html中,把一些已经存在的视图或是新产生的视图加入母版中. ...

  2. JS 对话框 语法

    javaScript  是个脚本语言,没有能力独立执行,必须要有宿主文件 html, 作用 进行数据运算 控制浏览器的一些功能(对一下高级浏览器的影响有限) 控制元素(属性,样式,内容等) 一 用法 ...

  3. 基于spring boot 2.x 的 spring-cloud-admin 实践

    spring cloud admin 简介 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 ...

  4. SVN问题之——org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir(网摘文)

    一.问题描述 今天在 Eclipse 中用 SVN 插件提交代码时遇到 org.apache.subversion.javahl.ClientException: Attempted to lock ...

  5. leetcode树专题894.897,919,951

    满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点. 返回包含 N 个结点的所有可能满二叉树的列表. 答案的每个元素都是一个可能树的根结点. 答案中每个树的每个结点都必须有 node.va ...

  6. Quoit Design(hdu1007)最近点对问题。模版哦!

    Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. Mybatis的类型处理器

    Mybatis在预处理语句(PreparedStatement)中设置一个参数时,会用默认的typeHandler进行处理. 这句话是什么意思呢,当你想用姓名查询一个人的信息时 <select ...

  8. linux_shell_传递参数

    在执行shell脚本时可以传递参数: 脚本获取参数的格式为:$0  $1  $2 ...其中$1 为传递的第一个参数  而$0 接受的是./test.sh 这个东西 代码:例: #!/bin/bash ...

  9. Bootstrap4响应式布局之栅格系统

    前面说了Bootstrap4的下载和简单使用,现在我们接着往下学习,Bootstrap4的响应式布局主要依靠栅格系统来实现的.面老K先来讲解一下Bootstrap4的栅格系统,让你能够更快的了解Boo ...

  10. MonkeyRunner进坑——errors importing other modules

    后知后觉,刚知道Android提供了MonkeyRunner这么个东西,能用来干嘛呢,官方文档介绍得很清楚.简单说,可以用Python程序通过API, installs an Android appl ...