nginx之开启服务端缓存

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
相关推荐
wuyunhang1234561 小时前
Redis---集群模式
数据库·redis·缓存
邂逅星河浪漫3 小时前
【Docker+Nginx+Ollama】前后端分离式项目部署(传统打包方式)
java·nginx·docker·部署
没有bug.的程序员3 小时前
Redis 大 Key 与热 Key:生产环境的风险与解决方案
java·数据库·redis·缓存·热key·大key
wuyunhang1234563 小时前
Redis----缓存策略和注意事项
redis·缓存·mybatis
零雲4 小时前
除了缓存,我们还可以用redis做什么?
数据库·redis·缓存
梦中的天之酒壶4 小时前
多级缓存架构
缓存·架构
We....4 小时前
Java 分布式缓存实现:结合 RMI 与本地文件缓存
java·分布式·缓存
森林-6 小时前
MyBatis 从入门到精通(第三篇)—— 动态 SQL、关联查询与查询缓存
sql·缓存·mybatis
IT成长日记7 小时前
【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
linux·运维·nginx·配置文件
虫小宝7 小时前
返利软件的分布式缓存架构:Redis集群在高并发场景下的优化策略
分布式·缓存·架构