• Nginx缓存


    一、基于proxy_cache的缓存

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include      mime.types;
        default_type  application/octet-stream;
        sendfile        on;
    
        keepalive_timeout  65;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" "$upstream_cache_status"';
        proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_zone:50m inactive=1d max_size=1g; 
        #指定缓存文件路径选项只允许放在http标签下
        #缓存文件名命名规则/usr/local/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
        
        server {
            listen      80;
            server_name  localhost;
            access_log  logs/access.log  main;     
            location / {
                proxy_cache cache_zone;
                proxy_cache_valid  5m;    #缓存HTTP状态代码为200,301和302的数据,5分钟后不再找缓存里的数据
                proxy_cache_valid 200 304 302 24h;
                proxy_pass  http://192.168.0.37/;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                add_header  Nginx-Cache "$upstream_cache_status";   #在http header上增加缓存命中显示
                expires 30m;    #设置浏览器缓存过期时间为30分钟
            }
        }
     }

    proxy_temp_path /usr/local/nginx/cache_temp;
    #指定临时文件目录
    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_zone:50m inactive=1d max_size=1g;
    #设置Web缓存区名称为cache_zone,内存缓存为50MB,自动清除1天内没有被访问的文件,硬盘缓存为1GB。
    #proxy_cache_path:表示缓存文件存放的路径,该路径是预先就要创建好的
    #levels=1:2:设置在相对于path指定目录的第几级hash目录中缓存数据
    #levels=1,表示一级hash目录,levels=1:2,表示两级hash目录,目录的名称是基于请求URL通过哈希#算法得到的
    #keys_zone=cache_zone:50m:设置缓存区名称为cache_one,内存缓存为50MB
    #inactive=1d:自动清除1天内没有被访问的文件
    #max_size=1g:设置硬盘中缓存数据的最大缓存空间为1G

    代理缓存参数
    proxy_cache cache_zone;
    #增加使用web缓存区cache_zone
    client_body_buffer_size 512k;
    #增加缓冲区代理缓冲客户端请求的最大字节数
    proxy_connect_timeout 60;
    #增加连接后端服务器超时时间
    proxy_read_timeout 60;
    #增加后端服务器响应请求超时时间
    proxy_send_timeout 60;
    #增加后端服务器发送数据超时时间
    proxy_buffer_size 32k;
    #设置代理服务器保存用户头信息的缓冲区大小
    proxy_buffers 4 64k;
    #proxy_buffers缓冲区,网页平均在64k以下的设置
    proxy_busy_buffers_size 128k;
    #增加系统繁忙时可申请的proxy_buffers大小(proxy_buffers*2)
    proxy_temp_file_write_size 128k;
    #增加proxy缓存临时文件的大小
    proxy_cache_valid 200 301 302 24h;       #等于proxy_cache_valid 24h;(超过24h不再使用缓存中的数据)
    proxy_cache_valid any 1m;
    #proxy_cache_valid中使用any表示缓存所有其它proxy_cache_valid中未指定HTTP状态码的数据,时间为1分钟
    #proxy_cache_valid 200 302 10m;
    #proxy_cache_valid 301 1h;
    #表示对返回状态码为200,302的响应数据缓存10分钟,对返回状态码为301的响应数据缓存1小时
    $upstream_cache_status包含以下几种状态:
    MISS:未命中,请求被传送到后端
    HIT:缓存命中
    EXPIRED:缓存已经过期请求被传送到后端
    UPDATING:正在更新缓存,将使用旧的应答
    STALE:后端将得到过期的应答
    添加到http头中后通过curl或浏览器查看http header如下
    HTTP/1.1 200 OK
    Date: Mon, 22 Apr 2013 02:10:02 GMT
    Server: nginx
    Content-Type: image/jpeg
    Content-Length: 23560
    Last-Modified: Thu, 18 Apr 2013 11:05:43 GMT
    Nginx-Cache: HIT
    Accept-Ranges: bytes
    Vary: User-Agent
    添加到nginx日志中
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                              '$status $body_bytes_sent "$http_referer" '
                              '"$http_user_agent" "$http_x_forwarded_for" "$upstream_cache_status"';

    二、基于proxy_store的缓存

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include      mime.types;
        default_type  application/octet-stream;
        sendfile        on;
    
        keepalive_timeout  65;
    
        server {
            listen      80;
            server_name  localhost;
            }
                  
            location / {
                  root "/web1";
                  proxy_store on;
                  proxy_store_access user:rw group:rw all:r;
                  proxy_temp_path "/web1";
                  if ( !-f $request_filename )        
                  {
                    proxy_pass   http://192.168.0.37;
                  }       
            }
     }

    通过location的 if 条件判断驱动nginx代理服务器与后端服务器通信和web缓存;判断请求的资源在nginx代理服务器上是否存在,如果不存在就通过后端服务器获取数据,然后回传给客户端,同时使用proxy store进行缓存。
    用户一访问的时候,主目录为/web1,如果里面没有用户需要的数据,就去代理取,然后缓存到自己的主目录,下次再访问同样的资源的时候,就能在缓存这里得到数据
    创建文件夹:mkdir /web1
    proxy store 与proxy cache的区别:proxy store不提供缓存过期更新,内存索引建立等功能,缓存文件一直会保存在本地磁盘中

    参考链接:
               https://www.cnblogs.com/lemon-le/p/7804347.html

  • 相关阅读:
    代码规范总结
    git记住提交密码的技巧
    php foreach遍历
    flight学习笔记
    the resource is not on the build path of a php project
    Google安装postman插件
    PHP开发框架CodeIgniter
    eclipse中php项目开发的环境配置说明
    MyBatis入门篇
    mybatis学习(十二)——mybatis逆向工程
  • 原文地址:https://www.cnblogs.com/xwupiaomiao/p/10168984.html
Copyright © 2020-2023  润新知