【转】nginx图片缓存服务器的配置文件说明

  |   0 评论   |   1,283 浏览

    nginx图片缓存服务器的配置文件说明

    例子,**nginx图片缓存服务器配置文件**。

    复制代码代码示例:

    #需要建立www用户和www用户组
    user www www;
    worker_processes 8;

    error_log /usr/local/nginx-0.8.32/logs/error.log crit;
    pid /usr/local/nginx-0.8.32/nginx.pid;

    events {
    use epoll;
    worker_connections 65535;
    }

    http {
    include mime.types;
    default_type application/octet-stream;

    charset  utf-8;            
    server_names_hash_bucket_size 128;     
    client_header_buffer_size 32k;     
    large_client_header_buffers 4 32k;     
    client_max_body_size 300m;            
    sendfile on;     
    tcp_nopush     on;  
    
    keepalive_timeout 60;  
    tcp_nodelay on;      
    client_body_buffer_size  512k;     
    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;      
    
    gzip on;     
    gzip_min_length  1k;     
    gzip_buffers 4 16k;     
    gzip_http_version 1.1;     
    gzip_comp_level 2;     
    gzip_types text/plain application/x-javascript text/css application/xml;     
    gzip_vary on;  
    
    #注:images_temp和images_cache指定的路径必须在同一分区  
    proxy_temp_path   :/usr/local/nginx-0.8.32/html/SD/images_temp;  
    #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。  
    Proxy_cache_path  :/usr/local/nginx-0.8.32/html/SD/images_cache  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;  
    
    server {  
        listen       80;  
        server_name  192.168.0.146;  
        location / {  
                proxy_cache cache_one;  
                #对不同的HTTP状态码设置不同的缓存时间  
                proxy_cache_valid  200 304 12h;  
                #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内  
                proxy_cache_key $host$uri$is_args$args;  
                proxy_set_header Host  $host;  
                proxy_set_header X-Forwarded-For  $remote_addr;  
                proxy_pass http://192.168.0.146:8080;  
            log_format cache '***$time_local '  '***$upstream_cache_status '  '***Cache-Control: $upstream_http_cache_control ' '***Expires: $upstream_http_expires ' '***"$request" ($status) ' '***"$http_user_agent" ';  
            access_log  /usr/local/nginx-0.8.32/logs/cache.log cache;  
                expires      1d;  
                }  
    
            #用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。  
    location ~ /purge(/.*) {  
            #设置只允许指定的IP或IP段才可以清除URL缓存。  
            allow       127.0.0.1;  
            allow       192.168.0.0/16;  
            deny    all;  
            proxy_cache_purge    cache_one   $host$1$is_args$args;  
    }   
    
            #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。  
    location ~ .*\.(php|jsp|cgi)?$ {  
                proxy_set_header Host  $host;  
                proxy_set_header X-Forwarded-For  $remote_addr;  
                proxy_pass http://192.168.0.146:8080;  
        }  
        access_log  off;  
    }  
    
    server{  
    listen 8080;   
            server_name 192.168.33.243;   
    
    location / {   
        root /usr/local/webapp;   
    }   
        access_log off;  
     }  
    

    }

    nginx控制缓存的参数说明,以nginx缓存图片文件为例。

    **第一,图片文件缓存池
    **

    proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=static:50m max_size=10g inactive=3d;

    这个参数控制缓存池的规模,以及与源服务器的交互频率。缓存淘汰是非常被动的,仅仅是为了维护缓存池的规模。

    本例使用50M共享内存维护缓存文件列表,如果一个文件3天内不活跃,即没被人二次访问,则在缓存池中淘汰掉,在硬盘上缓存的文件总量最高为10G 。

    如果缓存池里的文件都是3天内的文件,且总量已经达到10G,那么此时缓存池的淘汰规则是 LRU –Last Recent Used(访问频率最低的被淘汰)。

    第二,缓存的生命周期

    proxy_cache_valid 200 302 3d;

    这个参数直接控制缓存的生命周期,

    本例中,如果图片在3天内再次被访问,则直接命中缓存池,返回HIT,超过3天时间就主动跳过缓存池,直接从源服务器再取一遍,再跟缓存池进行比较。

    如果缓存池里有,则更新缓存的时间戳,并返回EXPIRE,如果缓存池里没有,则重新生成缓存,并返回MISS,这个值应该 <= 缓存池的文件失效时间才能提高命中率。

    第三,浏览器缓存的生命周期

    expires 7d

    此参数控制浏览器保存图片的时间,几个阶段:
    (不同的浏览器行为稍有不同,以chrome为例)

    1、客户使用浏览器第一次打开网页,服务器返回200,图片进入浏览器缓存,生命周期是7天。

    2、第二天,客户用浏览器再次打开网页时,返回代码依然是200,但是命中的是本地缓存。

    3、客户使用F5刷新了浏览器,强制与服务器发生通信,在与服务器比较后发现,文件跟浏览器缓存是一样的,于是得到了304,如果不一样,则是200 。

    这三个参数,对于缓存服务器影响较大的是第一二个参数。

    首先,需要维护一个尽可能大的缓存池;

    其次,提高缓存命中率,减少缓存与源服务器的交互频率。

    最后,如果是小范围的缓存,为了节省昂贵的磁盘IO,将缓存放在共享内存中。

    评论

    发表评论

    validate