nginx之开启服务端缓存

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

相关推荐

  1. nginx开启服务缓存

    2024-05-12 11:06:02       8 阅读
  2. NginxOpenresty缓存解读

    2024-05-12 11:06:02       39 阅读
  3. nodejs 服务token 高效缓存验证

    2024-05-12 11:06:02       37 阅读
  4. 多级透明分流系统(服务缓存

    2024-05-12 11:06:02       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-12 11:06:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-12 11:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-12 11:06:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-12 11:06:02       20 阅读

热门阅读

  1. TensorFlow和PyTorch的对比

    2024-05-12 11:06:02       9 阅读
  2. MongoDB聚合运算符:$toString

    2024-05-12 11:06:02       9 阅读
  3. Flutter备用依赖

    2024-05-12 11:06:02       10 阅读
  4. 什么是渐进式框架

    2024-05-12 11:06:02       8 阅读
  5. matlab人脸识别

    2024-05-12 11:06:02       8 阅读
  6. 基于STM32的衣柜防潮系统设计的毕业论文

    2024-05-12 11:06:02       8 阅读
  7. Android中C++如何读写json文件

    2024-05-12 11:06:02       12 阅读