nginx缓存

开启缓存可以提高网站性能,减轻频繁访问数据,而给数据库带来的压力
合理的缓存,还会减轻程序运算时,对CPU带来的压力
http缓存设置——浏览器访问Nginx,浏览器会Cache
nginx代理层缓存——Nginx 访问后端,Nginx 自己Cache
1.http缓存设置
Nginx提供了 expiresetagif-modified-since 指令来实现浏览器缓存控制
expires让用户访问一次后,将数据缓存在用户的浏览器中
expires的配置
upstream nodejs {
    server 127.0.0.1:3002;
}

server {
    listen 3001;
    server_name 127.0.0.1;
    location / {
        proxy_pass      http://nodejs;
        gzip on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        #gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
        gzip_vary off;
        gzip_disable "MSIE [1-6].";
        expires   3m;
    }

}

开启缓存后第一次请求

 

以后再请求

 

 2.nginx代理层缓存

Nginx实现缓存是通过代理缓存pxory_cache
常用的设置选项有
(1)proxy_cache_path
  定义一个完整的缓存空间,指定缓存数据的磁盘路径、索引存放的内存空间以及一些其他参数,如缓存删除策略
  eg:
proxy_cache_path /data/cache levels=1:2 keys_zone=nodejs:10m max_size=1G inactive=10m; 

  说明:

levels:设置如何将缓存文件保存到文件系统

  如果未定义,则将缓存文件直接保存在定义的路径中。

  如果定义为1:2,则根据缓存文件的md5哈希将其保存在缓存路径的子目录中。

keys_zone:用来为这个缓存区起名,并设置大小

  如上指定名为nodejs,供proxy_cache引用;10m就是内存空间的大小;

max_size:指定最大缓存数据磁盘空间的大小

inactive:在inactive指定的时间内,未被访问的缓存数据将从缓存中删除

  默认值为10分钟

  注:
    只能定义在http块上下文中
(2)proxy_cache
  用来引用上面proxy_cache_path定义的缓存空间, 现时打开缓存功能
(3)proxy_cache_valid
  设置不同响应代码的缓存时间
eg:
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    proxy_cache_path data/cache levels=1:2 keys_zone=nginx:50M max_size=2G  inactive=2h;
    proxy_cache_key    $host$request_uri;

    upstream nodejs {
        server 127.0.0.1:3002;
    }

    server {
        listen 3001;
        server_name 127.0.0.1;
        proxy_cache nginx;
        proxy_cache_valid  301 302 20m;
        proxy_cache_valid any 2m;
        location / {
            proxy_pass      http://nodejs;
            gzip on;
            gzip_min_length 1k;
            gzip_buffers 4 16k;
            #gzip_http_version 1.0;
            gzip_comp_level 2;
            gzip_types text/plain application/json application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
            gzip_vary off;
            gzip_disable "MSIE [1-6].";
            #缓存设置
            proxy_ignore_headers Set-Cookie Cache-Control;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
            proxy_set_header Host $proxy_host:$proxy_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header X-Via $server_addr;
            add_header X-Upstream $upstream_addr;
            add_header  Nginx-Cache $upstream_cache_status;
        }
    }
}

http://127.0.0.1:3001/upload/layui.css

 刷新再访问

 说明:

  $upstream_cache_status变量用来显示缓存的状态

  MISS 未命中,请求被传送到后端

  HIT 缓存命中

  EXPIRED 缓存已经过期请求被传送到后端 

  UPDATING 正在更新缓存,将使用旧的应答  

  STALE 后端将得到过期的应答

 参考

原文地址:https://www.cnblogs.com/baby123/p/11984636.html