nginx:缓存

http{
    proxy_connect_timeout 5; 
    proxy_read_timeout 60; 
    proxy_send_timeout 5; 
    proxy_buffer_size 16k; 
    proxy_buffers 4 64k; 
    proxy_busy_buffers_size 128k; 
    proxy_temp_file_write_size 128k; 
    proxy_temp_path /home/temp_dir; 
    proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:50m inactive=20m max_size=30g;
}

location /gou/detail-id-116  { 
    ##缓存 
    index  index.html index.htm index.php; 
    #被请求3次以上时才缓存
    proxy_cache_min_uses 3;
    #使用名称为cache_one的缓存 如上面配置的proxy_cache_path keys_zone=cache_one
    proxy_cache cache_one; 
    #缓存有效期 proxy_cache_valid any 1d; 任何 有效期1天
    proxy_cache_valid 200 302 1h;         
    proxy_cache_key $host$uri$is_args$args; 
    proxy_pass   http://...; 
    #不处理后端服务器返回的指定响应头,作用就是能够缓存动态页面,比如.php的页面,如果不加这一行就只能缓存静态的页面内容了
    proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
    #-1 表示不缓存
    expires 30d; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    #如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发
    #proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
    #proxy_cache_methods GET HEAD POST;

========================================================
proxy_cache_path有两个必填参数,第一个参数为 缓存目录,第二个参数keys_zone指定缓存名称和占用内存空间的大小(注:示例中的10m是对内存中缓存内容元数据信息大小的限制,如果想限制缓存总量大小,需要用 max_size 参数)

如:
// 缓存目录:/data/nginx/cache
// 缓存名称:one
// 缓存占用内存空间:10m
// 加载器每次迭代过程最多执行300毫秒
// 加载器每次迭代过程中最多加载200个文件
// 缓存硬盘空间最多为 200m
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300
loader_files=200 max_size=200m;

========================================================
1) nginx先把请求地址/1.png用md5进行哈希,得到e0bd86606797639426a92306b1b98ad9
md5的参数就是上面的配置中:
proxy_cache_key 
值,如md5("www.xxx.com/gou/detail-id-116");

2) level=1:2就是把最后一位数9拿出来建一个目录,然后再把9前面的2位建一个目录,最后把刚才得到的这个缓存文件放到9/ad目录中。
同样的方法推理,如果level=1:1,那么缓存文件的路径就是/usr/local/nginx/cache/9/d/e0bd86606797639426a92306b1b98ad9
========================================================
memcached
memcached connect_timeout:在NGINX和memcached服务器之间建立连接的超时。
memcached_send_timeout:将请求写入memcached服务器的超时。 memcached_read_timeout:从memcached服务器读取响应的超时。
========================================================
http{
   memcached_send_timeout 30s;
   memcached_connect_timeout 30s;
   memcached_read_timeout 30s;
   server{
      location /python/ {
         set memcachedkey"memcachedkey"request_method$request_uri";
         charset utf-8;
         memcached_pass 127.0.0.1:11211;
         #error_page 404 502 504 = @pythonfallback;
         default_type text/html;
      }
      location @pythonfallback {
         rewrite ^/python/(.*) /$1 break;
         proxy_pass http://127.0.0.1:5000;
         proxy_set_header X-Cache-Key "requestmethodrequestmethodrequest_uri";
      }
   }
}

猜你喜欢

转载自samson870830.iteye.com/blog/2385127