使用 nginx 缓存配置缓存接口数据(主要用于接口实时性不是很强的业务场景)
配置开启缓存,nginx.conf 配置如下
http {
#nginx缓存配置
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=1d;
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#keepalive_timeout 0;
keepalive_timeout 60;
client_max_body_size 120M;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types application/json text/plain application/javascript application/x-javascript text/css application/xml;
gzip_vary on;
#gzip on;
#导入外部服务器配置文件存放地址
include /usr/local/nginx/conf/vhosts/*.conf;
}
proxy_cache_path 各个配置值的含义解析如下:
- proxy_cache_path 指缓存的目录,目录为:/usr/local/nginx/cache
- levels=1:2 表示采用2级目录结构;
- keys_zone 指的是缓存空间名称,叫nuget-cache。缓存内存的空间为20M。
- max_size 指的是缓存文件可以占用的最大空间。为50G.
- inactive=1d; 默认过期时间为1天。,也可以写成:inactive=60s、inactive=1h。
还需要在server设置部分添加 proxy_cache 与 proxy_cache_valid的设置,server部分通过 include 命令引入,目录是 /usr/local/nginx/conf/vhosts 下的所有 .conf结尾的文件,server 配置如下
server {
listen 80;
server_name www.196.com;
location / {
#跳转到指点tomcat服务器
proxy_pass http://192.168.2.108:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~ /cache/ {
#跳转到指点tomcat服务器
proxy_pass http://192.168.2.108:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#接口缓存配置
proxy_cache nuget-cache;
proxy_cache_valid 60s;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
}
}
- proxy_cache 设置的是 proxy_cache_path中的keys_zone的值。
- proxy_cache_valid:设置的是缓存过期时间,比如设置168个小时过期。
- proxy_ignore_headers的含义是:忽略Cache-Control的请求头控制,依然进行缓存,比如对请求头设置cookie后,默认是不缓存的,需要我们增加忽略配置。
location ^~ /cache/ 的含义:匹配 controller ,如果是以 cache 开头的controller 请求,返回的接口数据会缓存 60s,在60秒之内重复请求,不会跳转到服务器请求数据,默认返回缓存数据,使用户数据实时性不是很高的场景
location / 含义:匹配除 cache 的其他请求,会转发到 192.168.2.108:8080 请求数据,数据实时请求
如果需要更新缓存数据,直接删除 /usr/local/nginx/cache 目录下的所有文件,缓存就会重新刷新