Nginx缓存模块详解-proxy-cache
1、基本缓存概念
一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝。如果一个客户端请求的内容在缓存中存储,则可以直接在缓存中获得该内容而不需要与服务器通信。这样一来,由于web缓存距离客户端“更近”,就可以提高响应性能,并更有效率的使用应用服务器,因为服务器不用每次请求都进行页面生成工作,在浏览器和应用服务器之间,存在多种“潜在”缓存,如:客户端浏览器缓存、中间缓存、内容分发网络(CDN)和服务器上的负载平衡和反向代理。缓存,仅在反向代理和负载均衡的层面,就对性能提高有很大的帮助。
图一:
2、Proxy Cache模块常用指令解析
本章节主要解析一下nginx ngx_http_proxy_module中的cache相关配置参数
1
2
3
4
5 #默认为off,即关闭proxy_cache功能,zone为用于存放缓存的内存区域名称。例:proxy_cache my_zone;从nginx0.7.66版本开始,proxy_cache机制开启后会检测被代理端的HTTP响应头中的"Cache-Control"、"Expire"头域。如,Cache-Control为no-cache时,是不会缓存数据的。
proxy_cache
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
1 | #定义缓存存放路径、缓存大小、缓存时间等参数 |
1 | #指定哪些响应在某些值不为空或不为0的情况下不走缓存,比如proxy_cache_bypass $http\_pragma $http_authorization; |
1 | #定义 proxy_cache 生成文件的名称。值可以为 Nginx 支持的变量和字符串 |
1 | #默认不开启,开启的话则每次只能有一个请求更新相同的缓存,其他请求要么等待缓存有数据要么限时等待锁释放;nginx 1.1.12才开始有 |
1 | #等待缓存锁超时之后将直接请求后端,结果不会被缓存 ; nginx 1.1.12才开始有 |
1 | #指定在多少次请求之后才缓存响应内容 |
1 | #指定在后端服务器在返回什么状态码的情况下可以使用过期的缓存,比如proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; |
1 | #没有默认值,实例如proxy_cache_valid 200 302 10m,针对不同的response code设定不同的缓存时间,如果不设置code,默认为200,301,302,也可以用any指定所有code |
1 | #与Proxy cache有关的一项参数与配置,expires控制缓存生存期 |
3、生产配置详解
3.1、生产安装版本
平台 | IP | NGINX版本 | 安装模块 | |
---|---|---|---|---|
CentOS 6.7 64Bit | 192.168.2.245 | NGINX-1.12.1 | naxsi\nginx-limit-upstream\nginx-upstream-jvm-route |
3.2、NGINX生产配置
nginx主配置文件:
/usr/local/nginx/conf/nginx.conf
1
2
3
4
5proxy_cache_path /dev/shm/ngx_cache levels=1:2 keys_zone=cache_one:1m max_size=10m;
#proxy_cache_path 缓存文件路径
#levels 设置缓存文件目录层次;levels=1:2 表示两级目录
#keys_zone 设置缓存名字和共享内存大小
#max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源域名配置文件:
/usr/local/nginx/conf/vhost_conf/wxejf123.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22location /jfpt {
rewrite ^(.*)/template_abc_weixin/(.*)$ $1/template_weixins/$2 break;
proxy_pass http://jfpt_load_balancing;
include comproxy.conf;
include /usr/local/nginx/conf/ccbejf.rules;
access_log /usr/local/nginx/logs/ccbmob_access.log access;
error_log /usr/local/nginx/logs/ccbmob_error.log;
limit_except GET POST {
deny all;
}
}
location ~ /jfpt/.*\.(gif|jpg|png|css|js)$ {
proxy_cache cache_one;.
#使用名为cache_one的对应缓存配置
proxy_cache_valid 200 304 12h;
#对httpcode为200、304的缓存12小时
proxy_cache_key $host$uri$is_args$args;
#定义缓存唯一key,通过唯一key来进行hash存取
expires 30d;
#expires 指缓存过期时间为30天
proxy_pass http://jfpt_load_balancing;
}关于proxy.conf中的一项配置
1
2#控制缓存生存期,开启此配置默认会缓存所有内容
add_header Cache-Control max-age=86400;