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
相关推荐
身如柳絮随风扬6 小时前
Redis如何实现高效插入大量数据
数据库·redis·缓存
予早7 小时前
Redis 设置库的数量
数据库·redis·缓存
黑金IT7 小时前
vLLM本地缓存实战,重复提交直接复用不浪费算力
人工智能·缓存
Rick19939 小时前
Redis查询为什么快
数据库·redis·缓存
Rick199310 小时前
Redis 底层架构图
数据库·redis·缓存
Arva .11 小时前
Redis 数据类型
数据库·redis·缓存
舒一笑12 小时前
我把前端从 /ais 改到 /kb 后,连续踩了 7 个 Nginx 坑(含 405/413/502/404 终极解法)
运维·nginx·程序员
笑我归无处12 小时前
Redis和数据库的数据一致性问题研究
数据库·redis·缓存
小红的布丁12 小时前
操作系统与高性能 IO:零拷贝、一次读 IO、CPU 缓存与伪共享
缓存
SPC的存折13 小时前
(自用)LNMP-Redis-Discuz5.0部署指南-openEuler24.03-测试环境
linux·运维·服务器·数据库·redis·缓存