bash
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
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" $upstream_cache_status';
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream lbs {
server 192.168.1.12:8080 max_fails=2 fail_timeout=60s;
}
proxy_cache_path /root/cache levels=1:2 keys_zone=gen_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name localhost a.com;
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://lbs;
proxy_redirect default;
# 缓存配置
proxy_cache gen_cache;
proxy_cache_valid 200 304 2m;
proxy_cache_valid 404 1m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
}
error_page 404 500 502 503 504 =200 /default_api;
location = /default_api {
default_type application/json;
return 200 '{"code":"-99","msg":"error"}';
}
}
}
- proxy_cache_path /root/cache:本地路径,用来设置nginx缓存资源的存放地址
- levels=1:2
- 默认所有缓存文件都放在上面指定的根路径中,可能影响缓存的性能,推荐指定为2级目录来存储缓存文件;1和2表示用1位和2位16进制来命名目录名称。
- 第一级目录用1位16进制命名,如a;第二级目录用2位16进制命名,如3a。所以此例中一级目录有16个,二级目录有16 * 16=256个,总目录数为16 * 256=4096个
- 当level=1:1:1时,表示是三级目录,且每级目录数均为16个
- keys_zone:在共享内存中定义一块存储区域来存放缓存的key和元数据metadata
- max_size:最大缓存空间,如果不指定会使用掉所有磁盘空间,当达到disk上限后,会删除最少使用的cache
- inactive:某个缓存在inactive指定的时间内如果不访问,将会从缓存中删除
- proxy_cache_valid:配置nginx cache中的缓存文件的缓存时间,proxy_cache_valid 200 304 2m 对于状态为200和304的缓存文件,缓存时间是2分钟
- use_temp_path:建议为off,则nginx会将缓存文件直接写入指定的cache文件中
- proxy_cache:启用proxy_cache,并指定key_zone,如果proxy_cache off表示关闭缓存
- add_header Nginx-Cache "$upstream_cache_status":用于前端判断是否命中缓存,miss、hit、expired(缓存过期)、updating(更新,使用旧的应答)
- 注意:nginx缓存过期配置优先级排序:inactive > 源服务器端Expires/max-age > proxy_cache_valid
- 默认情况下GET请求及HEAD请求会被缓存,而POST请求不会被缓存,并非全部都要缓存,可以过滤部分路径不用缓存
- 缓存清空
- 直接rm删除缓存文件
- 缓存命中率统计
- 前端打点日志上报
- nginx日志模板增加信息:$upstream_cache_status