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)
例子,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缓存图片文件作为例子。
第一,缓存池 这个参数控制缓存池的规模,以及与源服务器的交互频率。缓存淘汰是非常被动的,仅仅是为了维护缓存池的规模。 本例使用50M共享内存维护缓存文件列表,如果一个文件3天内不活跃,即没被人二次访问,则在缓存池中淘汰掉,在硬盘上缓存的文件总量最高为10G 。如果缓存池里的文件都是3天内的文件,且总量已经达到10G,那么此时缓存池的淘汰规则是 LRU –Last Recent Used(访问频率最低的被淘汰)。
第二,缓存的生命周期
这个参数直接控制缓存的生命周期,
第三,浏览器缓存的生命周期
1、客户使用浏览器第一次打开网页,服务器返回200,图片进入浏览器缓存,生命周期是7天 这三个参数,对于缓存服务器影响较大的是第一二个参数。
首先,我们应该维护一个尽可能大的缓存池,把面做广; 最后,如果是小范围的缓存,为了节省昂贵的磁盘IO,我们可以选择将缓存放在共享内存中。 (责任编辑:IT) |