nginx反向代理缓存配置
阅读原文时间:2023年07月08日阅读:1

  关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的)、openresty;但是这两款软件都是基于nignx开发的,openresty封装了lua的框架,使其更灵活;
  下面的配置示例以openresty为例,配置文件格式跟nginx是一样的,所以配置文件是通用的;
一、编译安装openresty,因为我在配置文件中用到了分片缓存,所以将分片缓存的模块编译进去了;
  wget https://openresty.org/download/openresty-1.19.3.1.tar.gz
  tar xvf openresty-1.19.3.1.tar.gz
  ./configure --prefix=/usr/local/openresty --with-http_slice_module --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module

二、配置文件正文

proxy_cache_path /data/cache/nginx levels=1:1:1 keys_zone=cache:20m inactive=30d max_size=800g;

upstream cache {
server 123.XX.XX.XXX:8088;
}

server {
listen 80;
server_name www.zhide666.cn;
root /data/yum;
charset UTF-8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
auth_basic "Admin Area";
auth_basic_user_file /usr/local/openresty/nginx/conf/.ngxpasswd;

    location / {  
    if ($request\_filename ~\* ^.\*?\\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){  
        add\_header Content-Disposition: 'p\_w\_upload';  
     }  
    }

    location ~\*\\.(mp4|jpg|html)$ {  
        slice    1m;  
        proxy\_cache cache;  

proxy_cache_key $uri$is_args$args$slice_range;

        proxy\_cache\_key $request\_uri$slice\_range;  
        proxy\_set\_header Host $host;  
        proxy\_set\_header X-Forwarded-For $remote\_addr;  
        add\_header Cache $upstream\_cache\_status;  
        expires 10d;  
        proxy\_cache\_valid 200 206 304 301 302 10d;  
        proxy\_pass http://cache;  
    }  

}

proxy_cache_path配置解释:
  /data/cache/nginx:定义缓存路径
  levels=1:1:1:表示创建目录结构为三级目录,每一级目录都是一个字符,如果是1:2:1的话,则二级目录为2个字符;
  keys_zone=cache:20m:设置存储所有缓存key和相关信息的共享内存区。cache为内存空间的名称(自定义),20m是名为cache的内存空间大小为20m;1m大约能存8000个key;
  inactive=30d:指定被缓存的内容多久不被访问将从缓存中移除,默认10min;该配置为30d内不访问则缓存被自动删除;
  max_size=800g:最大缓存阀值,'cache manager'进程会监控最大缓存大小,当缓存达到该阀值时,该进程将从缓存中移除最近最少访问的内容。这个数值一般为磁盘的容量的90%;

location配置解释:
  slice 1m:开启分片,分片大小为1m;
  proxy_cache cache:定义使用哪块内存空间存储缓存信息,在proxy_cache_path中定义的内存空间的名称;
  proxy_ignore_headers:如果响应头包含 Cache-Control、Set-Cookie或者只有一个 Vary则响应内容将不会被缓存。可以使用 proxy_ignore_headers 来忽略这些响应头。
  proxy_cache_key:缓存的key;
    $request_uri:带参数缓存
    $uri:不带参数缓存
    $is_args:如果请求中有参数,值为"?",否则为空字符串;
    $args:请求中的参数值
    $slice_range:range请求的范围值;
  proxy_set_header:向后端传递请求头;
  add_header:向客户端传递响应头;
  $upstream_cache_status:缓存状态
    HIT:缓存命中,直接返回缓存中内容,不回源到后端。
    MISS:缓存未命中,回源到后端获取最新的内容。
    EXPIRED:缓存命中但过期了,回源到后端获取最新的内容。
    UPDATING:缓存已过期但正在被别的Nginx Worker进程更新,配置了proxy_cache_use_stale updating指令时会存在该状态。
    STALE:缓存已过期,但因后端服务出现了问题(比如后端服务挂了)返回过期的响应,配置了如proxy_cache_use_stale error timeout指令后会出现该状态。
    REVALIDATED:启用proxy_cache_revalidate指令后,当缓存内容过期时,Nginx通过一次if-modified-since的请求头去验证缓存内容是否过期,此时会返回该状态。
    BYPASS:proxy_cache_bypass指令有效时,强制回源到后端获取内容,即使已经缓存了。
  expires:告诉浏览器这个资源缓存多长时间;
  proxy_cache_valid:缓存符合条件的状态码的资源;
  proxy_pass:upstream定义的后端地址;

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器