本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Nginx
  • 【Nginx模块配置教程】Nginx缓存配置教程

【Nginx模块配置教程】Nginx缓存配置教程

发布:TangLu2018-9-21 11:19分类: Nginx 标签: Nginx

Nginx支持缓存功能,将用户请求尽可能的往前推,减少后端服务器的压力。常见的缓存类型有服务端缓存(Redis、Memcached)、代理缓存(Nginx)、客户端缓存(浏览器)。在Nginx中除了可以使用expires选项开启客户端缓存外还支持代理缓存,要开启代理缓存功能的话所使用到的模块是ngx_http_proxy_module,其包含了proxy_cache功能,主要用到了以下几个选项:

proxy_cache  zone | off ; :调用定义好的缓存,off为关闭缓存;zone是缓存的名字,由proxy_cache_path所定义,可定义在http、server、location便签

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

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标签中

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


看示例更容易明白上面选项的含义:

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;
        }
}

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

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则不缓存
    }
}


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【Nginx模块配置教程】Nginx缓存配置教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-444.html  [生成短网址]

已有 0/971 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~