05-nginx静态缓存

nginx静态缓存

Proxy缓存 ngx_http_proxy_module

为什么开启nginx静态缓存,开启nginx好处是什么

缓存就是为了加快访问速度的,避免nginx和后端服务器进行交互,因为一交互就涉及到网络带宽,磁盘进行IO操作查找数据,回复数据也需要网络带宽,web查找数据还需要消耗cpu内存,nginx和后端服务器通讯,本地也需要消耗cpu内存。没有交互能省很多资源。proxy若无缓存就是miss,若有缓存就是hit命中。

Nginx缓存数据由两部分组成

1.缓存的元数据,由配置nginx配置文件中的键值proxy_cache_key hosturiis_argsargs组成,(此key值可以在nginx配置文案中不定义,如果不定义配置文会自己生成)

元数据包括数据的名称,大小,有效期等,是内存开启开启一段空间来给nginx使用的,专门用于保存缓存的元数据。

2.在磁盘中指定目录用来存储真正的数据,根据nginx开启缓存配置里面指定的目录,把真正的缓存数据缓存到指定的文件夹下。

综上:设置nginx的反向代理缓存主要设置两部分内容:一、在内存里面开启一段空间用来存缓存元数据,二、在磁盘中指定目录用来存真正缓存下来的数据。

缓存组成的两部分:

1、共享内存: 存储键和缓存对象元数据

2、磁盘空间:存储数据

定义缓存空间

指令: proxy_cache_path: 不能定义在server{}中

eg:proxy_cache_path /nginx/cache/first levels=2:1:2 keys_zone=first:20m max_size=1G

参数详解:

整个配置的作用就是在nginx服务器本地开辟了一段用来存储缓存数据的内存空间+磁盘空间

keys_zone=name:size:定义存储键的区域(定义共享内存的名称)

/nginx/cache/first:一个目录名,重启nginx服务会在磁盘上自动产生,里面目录用来存放真正的缓存数据,目录/nginx/服务器上必须存在,/nginx/后的目录可以不存在。重启nginx会自动创建出来。

level 2:1:2:nginx生成缓存数据会在指定的目录底下生成3级子目录,真正的缓存数据在最后一级目录里面存放,第一级第二级和第三级的子目录的名称分别是2个字符,1个字符和2个字符,且每一级子目录的名称最多是2个字符,目录名称是随机生成的。这样配置配置的好处是:缓存数据比较多的时候,分类存放,nginx的查找速度会快一些。

keys_zone:在内存里面开辟一片区域,first是为开启的区域起的名字

20m:开启的内存大小为20m,用来保存元数据

max_size:指定/nginx/cache/first中的1G空间用于存储缓存数据 ,可根据自己的需求调整

代理服务器缓存过期

proxy_cache_valid 200 302 10m; #返回值为200和302缓存10min

proxy_cache_valid 404 1m; #返回值为404缓存1min

缓存维度

Syntax: proxy_cache_key string;

Default: proxy_cache_key schemeproxy_host$request_uri;

nginx的内部变量scheme是协议名,proxy_host是缓存服务器主机名,$request_uri是请求的路径。将他们做为整体hash成一个key,缓存到目录中

Context: http, server, location

Nginx缓存配置示例:

定义缓存存放路径为/web/cache,缓存级别为2级,即location后面匹配到的缓存两级目录,多了不缓存 缓存的内容最多使用1G空间; 并定义键值区域名称为first,名字占的空间大小为20m,60分钟之内没有人用就删掉

proxy_cache_path /web/cache levels=1:2 keys_zone=first:20m max_size=1g inactive=60m;

定义一段缓存空间之后,想要启用缓存功能,需要在某一个locaiton里面写下面两行

proxy_cache first; first就是上面定义的指定缓存元数据的区域空间名称

proxy_cache_valid 200 304 1m; 表示nginx只缓存状态码为200和304的响应数据,且数据在缓存时,有效期为1min,(笔记最后有对状态码的介绍)

proxy_cache_valid any 10m;其他的缓存10分钟

proxy_cache_key $host$uri$is_args$args; 使用什么做key,可以不定义,系统自动定义名字

在httpd响应报文中添加额外项X-cache,用于查看缓存是否命中,可加可不加的

add_header x-cache "$upstream_cache_status by $server_addr";

添加一个头部名称为x-cache,头部里面的内容是:nginx内部的两个变量:

$upstream_cache_status: 用于记录缓存是否命中的状态 (HIT, MISS, EXPIRED)

$server_addr 服务器地址

在浏览器中F12-------->网络-------->查看HTTP响应报文

X-cache:HIT by 192.168.122.153信息,表示缓存命中

miss by 192.168.122.153信息,表示首次访问

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#收到50x代号,向上游服务器重新请求一次
0
http {
...
    #gzip  on;
    upstream websrv {
        server 192.168.122.105 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.122.121 weight=1 max_fails=2 fail_timeout=2;
        server 127.0.0.1:8080 backup;
    }

    proxy_cache_path /web/cache levels=1:2 keys_zone=first:20m max_size=1g;
    add_header x-cache "$upstream_cache_status by $server_addr";

    server {
        listen       80;
        server_name  localhost;

location / {
    proxy_pass http://websrv/;
    proxy_cache first;                      >>>>使用内存first中保存的缓存
    proxy_cache_valid 200 304 12h;
    #proxy_cache_key $host$uri$is_args$args;
    add_header Nginx-Cache "$upstream_cache_status";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;   
}

HTTP状态码之200和304

HTTP状态码(HTTP Status Code)是一种表示网页服务器响应状态的三位数字编码。通过这些数字,可以简化状态的表达。状态码有几十种,其中首位数字为1-5。根据这5个数字,状态码可以分为5类。1开头的表示请求正在处理;2开头请求已经成功处理;3开头表示重定向;4开头表示请求错误;5开头表示服务器错误。

在嗅探抓包过程中,常见的有两种200和304。这两个状态码都关系到能否获取重要信息。当客户第一次请求服务器资源,服务器成功返回资源,这时状态码为200。所以,状态码为200的数据包往往包含用户从服务器获取的数据。

每个资源请求完成后,通常会被缓存在客户端,并会记录资源的有效时间和修改时间。当客户再次请求该资源,客户端首先从缓存中查找该资源。如果该资源存在,并且在有效期,则不请求服务器,就不会产生对应的请求数据包。

如果不在有效期,客户端会请求服务器,重新获取。服务器会判断修改时间,如果没有修改过,就会返回状态码304,告诉客户端该资源仍然有效,客户端会直接使用缓存的资源。针对304的响应,渗透人员可以分析对应的请求包,获取资源路径。如果该资源不限制访问,就可以直接请求获取。否则,就需要进行Cookie劫持,进行获取。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容