【Nginx】Nginx缓存配置教程

发布时间 - 2022-01-14 15:08:02

常见的缓存类型有服务端缓存(Redis、Memcached)、代理缓存(Nginx)、客户端缓存(浏览器),它们的作用都是用于减少后端服务器的压力在Nginx中要开启缓存的话,除了可以使用expires选项开启客户端缓存,还支持代理缓存,要开启代理缓存功能的话所使用到的模块是ngx_http_proxy_module,其包含了proxy_cache功能,常用配置项有以下几个项:

1、proxy_cache  zone | off ; :调用已经定义好的缓存,如果off则关闭缓存;zone代表已经配置好的缓存名字,这个由proxy_cache_path在http、server、location标签中定义

2、proxy_cache_valid [code ...] time;  :缓存过期时间,code为http状态码,可以针对不同状态码进行缓存

3、proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time] ;  :定义缓存以及缓存配置,只能定义在http标签中

4、proxy_cache_key string;:缓存维度,也就是需要缓存的内容

5、proxy_cache_lock:如果有多个相同的请求同时传递给Nginx,将这些请求进行合并

Nginx缓存配置示例

user nginx;  #运行Nginx的用户
worker_processes  1;
error_log  logs/error.log warn;
pid  /var/run/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"';
    access_log  logs/access.log  main;
    sendfile        on;
    tcp_nopush      on;
    #tcp_nodeley    off;
    keepalive_timeout  65;   
    gzip  on; 
    include /etc/nginx/conf.d/*.conf;

    upstream linuxe {
      server  192.168.100.110;
      server  192.168.100.120;
}
  #下面语句是关键,分别定义了缓存存放的目录;缓存目录为2层,目录命名规则为层1个字符,第二层2个字符;缓存空间的名字为linuxe,并且开辟空间为10m,每1m可存放8000个key;缓存目录更大有10g,超出的进行淘汰;60分钟没被使用的缓存文件认为是非活跃文件而被清理
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=linuxe_cache:10m max_size=10g inactive=60m use_temp_path=off;  
    server {
        listen       80;
        server_name  linuxe.cn;
        location {
          proxy_cache linuxe_cache;  #调用了linuxe_cache这个缓存区
          proxy_pass http://linuxe;
          proxy_cache_valid 200 304 12h;  #将200和304的状态码将缓存12个小时
          proxy_cache_valid any 10m;  #其他状态码缓存10分钟
          proxy_cache_key $host$uri$is_args$args;
        }
}


上述设置成功后可以访问页面进行测试,正常情况下即使有做负载均衡但经过缓存后访问的页面是同一个,这个可以通过放置不同的页面进行测试

Nginx缓存清理与过滤

1、要清理缓存的话可以通过rm命令删除缓存目录或者使用第三方扩展模块ngx_cache_purge,该模块装上后,只需要访问指定的路径就可以删除对应的缓存

http://www.linuxe.cn/purge/index.php  #清理index.php页面的缓存

2、使用proxy_no_cache选项可以指定某URL不被缓存,如:

server {
    listen    80;
    server_name    linuxe.cn;
    if ( $request_uri ~ ^/(login|password|test) ){
        set $cookie_nocache 1;  #将访问路径进行正则匹配,如果匹配上了给cookic_nocache这个变量设值为1
    }
    location / {
        proxy_no_cache $cookie_nocache;  #这里no_cache的条件就是变量是否为1,为1则不缓存
    }
}


在线咨询
联系方式
微信二维码
线