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
相关推荐
weixin_462428477 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
Daniel 大东1 小时前
idea 解决缓存损坏问题
java·缓存·intellij-idea
qq_312920111 小时前
安装lua-nginx-module实现WAF功能
nginx·junit·lua
起飞的风筝1 小时前
【redis】—— 环境搭建教程
数据库·redis·缓存
七月在野,八月在宇,九月在户2 小时前
前端--> nginx-->gateway产生的跨域问题分析
前端·nginx·gateway
小白也有IT梦3 小时前
域名绑定服务器小白教程
运维·nginx
苹果醋33 小时前
C语言 strlen 函数 - C语言零基础入门教程
java·运维·spring boot·mysql·nginx
古人诚不我欺4 小时前
Redis设置密码认证,以及不重启服务情况下设置临时密码
数据库·redis·缓存
青龙老贼16 小时前
Nginx更换ssl证书不生效
服务器·nginx·ssl·ssl证书更换不生效
五月高高19 小时前
Docker部署Nginx服务器并实现HTTPS自动重定向
服务器·nginx·docker