美文网首页
Nginx代理缓存

Nginx代理缓存

作者: 瓢鳍小虾虎 | 来源:发表于2021-01-19 11:01 被阅读0次

缓存文件配置

proxy_cache_path:配置缓存目录,缓存大小,内存占用、缓存名称等参数
proxy_cache:指定缓存名称

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
  use epoll;
  worker_connections 65535;
}

http{
  proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;

  upstream netease.com {
    server 127.0.0.1:8881;
    server 127.0.0.1:8882;
    server 127.0.0.1 8883;
  }

  server {
    listen 80;
    server_name netease.com;
    proxy_cache one;    

    location / {
      proxy_pass http://netease.com;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

指定哪些请求被缓存

  1. nginx默认会缓存所有get和head请求的结果,缓存key默认为请求字符串。

  2. 设置缓存key:例如

proxy_cache_key $host$request_uri$cookie_user;
  1. 指定请求被发送了多少次以上才缓存:
proxy_cache_min_uses 5;
  1. 指定哪些方法的请求被缓存:
proxy_cache_methods GET HEAD POST;

例子:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
  use epoll;
  worker_connections 65535;
}

http{
  proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;

  upstream netease.com {
    server 127.0.0.1:8881;
    server 127.0.0.1:8882;
    server 127.0.0.1 8883;
  }

  server {
    listen 80;
    server_name netease.com;
    proxy_cache one;    

    location / {
      proxy_pass http://netease.com;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_cache_key $host$request_uri$cookie_user;
    }
  }
}

缓存有效期

  1. 默认情况下缓存是长期保留的,除非缓存量超出限制。

  2. 可以指定缓存时间:

/*200 302的请求缓存10分钟*/
proxy_cache_valid 200 302 10m;
/*所有请求缓存5分钟*/
proxy_cache_valid any 5m;
  1. 可以指定某些请求不服务器缓存:
    使用proxy_cache_bypass,定义的参数有任何一项不为空或者不等于0,代理服务器都不会缓存,直接转发。
location / {
      proxy_pass http://netease.com;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_cache_bypass $cookie_nocache $arg_nochache $arg_comment;
    }

理解这个配置要从网页的缓存设置说起:

网页的缓存是由Cache-control来控制的,由服务端的响应头配置,常见的配置有private no-cache max-age must-revalidate等,默认为private。

public: 所有内容都会被缓存,客户端和服务端都可以缓存。

private: 仅允许私有缓存,客户端可以缓存,服务端不可以缓存。

no-cache: 通过配置相关验证tag,并且服务端也配置了相关tag的验证处理,以此让客户端知道当前内容是否被改变,是否需要使用缓存还是重新下载。

no-store: 所有内容都不会缓存到缓存或者internet的临时文件中。禁止缓存。

must-revalidation/proxy-revalidation: 如果缓存失效,必须发往服务端/代理端重新验证。

max-age: 有效时间(秒),此配置只在Http1.1有效,如果和Last-Modified一起配置优先级较高。

通常我们可以把一些静态资源放到源服务器上,配置好Cache-control,再配置一个专门的缓存服务器作为代理,原服务器的Cache-control大致如下:

location ~* \.(?:manifest|apache|html|?|xml|json)$ {
  expires -1;
}
location ~* \.(?:rss|atom)$ {
  expires 1h;
  access_log: off;
  add_header Cache_Control "public";
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
  expires 1M;
  add_header Cache_Control "public";
}
location ~* \.(?:css|js)$ {
  expires 1y;
  add_header Cache_Control "public";
}

其他参考文章:
https://www.cnblogs.com/tugenhua0707/p/10841267.html

相关文章

网友评论

      本文标题:Nginx代理缓存

      本文链接:https://www.haomeiwen.com/subject/pfhqzktx.html