当前位置: > Linux服务器 > nginx >

nginx图片缓存服务器配置实例

时间:2014-06-26 00:18来源:linux.it.net.cn 作者:IT网

例子,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,我们可以选择将缓存放在共享内存中。

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容