大家好,欢迎来到IT知识分享网。
一、图片服务器机制
为了提高图片服务器性能,可利用Nginx中反向代理缓存机制达到目的;本机制共需两台服务器,在图片存储服务器外另部署一台服务器作为图片代理服务器(在一台服务器上同时部署也可),当客户端请求图片信息时,首先访问图片代理服务器,代理服务器会缓存热点图片,从而提高效率。
1、架构图
2、反向代理简介
反向代理是Web服务器隐藏在代理服务器之后,实现这种机制的服务器称作反向代理服务器(Reverse Proxy Server)。此时,Web服务器成为后端服务器,反向代理服务器称为前端服务器。
3、Nginx反向代理缓存机制简介
3.1 工作原理
Nginx的proxy_cache缓存机制为当用户请求图片等静态资源时,首先在代理服务器内存索引中查找是否存在该资源的缓存,如果不存在,则访问存储服务器,查找并读取该资源,响应请求并将其加入缓存;相反如果存在则在缓存中读取并响应请求,从而减少了对存储服务器的访问,提升了性能。
3.2 缓存机制
缓存文件采用内存+硬盘方式缓存,采用md5编码hash后保存,内存中保存的为缓存的索引信息,资源的缓存文件则存在硬盘中,但由于采用了hash算法,相对与无缓存查找还是提升了性能。
相对与memcache缓存,由于memcache将缓存的文件全部缓存在内存中,速度上更优于proxy_cache,但当遇到断电、宕机时,memcache中缓存将全部丢失,可谓各有利弊。此外memcache向缓存中加入数据需要通过编码的方式主动去添加,这样需要统计访问量识别哪些是访问量高的热点图片需要缓存,哪些不需要,还需要日后的维护,而proxy_cache只需一次设置图片的路径后,通过配置文件采取合适的方案即可,无需日后的维护。
3.3 缓存清理
Proxy_cache的清理方式有两种,自动清理和手动清理:
自动清理,配置inactive参数后,如1天,则该缓存中有1天未被请求,则自动清理该资源;此外当内存区达到上限后,将用新的资源取代访问次数最少的。
手动清理,需集成第三方proxy_cache_purge,如想清理URL为http://192.168.1.100/aaa.png 图片,请求http://192.168.1.100/purge/aaa.png即可。
4、Nginx gzip简介
gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序,可以极大的加速网站,但对于图片压缩来说,几乎没有提升,最好不要使用Gzip。
二、测试
第一次访问某图片时:
***22/Oct/2013:19:29:14 -0700 MISSCache-Control: – Expires: – “GET /web/upload/slide/13706572516644398.jpgHTTP/1.1” (200) “Mozilla/5.0 (X11; U; Linux x86_64; en-US;rv:1.9.2.9) Gecko/20110412 CentOS/3.6.9-2.el6.centos Firefox/3.6.9”
MISS表示未被缓存。
第二次访问某图片时:
***22/Oct/2013:19:30:40 -0700 HITCache-Control: – Expires: – “GET /web/upload/slide/13706572516644398.jpgHTTP/1.1” (200) “Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2;WOW64; Trident/6.0; MALCJS)”
HIT表示已被缓存。
共包含以下几种状态可以在缓存日志中查看:
· MISS 未命中,请求被传送到后端
· HIT 缓存命中
· EXPIRED 缓存已经过期请求被传送到后端
· UPDATING 正在更新缓存,将使用旧的应答
· STALE 后端将得到过期的应答
· BYPASS 缓存被绕过了
附录
附录为本次测试的配置文件:
#user nobody;
# nginx进程数,多少cpu多少进程
worker_processes 4;
#允许打开的连接数
worker_rlimit_nofile 10240;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
#单进程允许打开的链接数
worker_connections 10240;
}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
#服务器名的hash库大小
server_names_hash_bucket_size 128;
#服务器名的hash库大小
client_header_buffer_size 4 8k;
#客户端长头文件缓存大小及分配模式 4块 每块8K
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;
log_format cache ‘***$time_local ‘
‘$upstream_cache_status ‘
‘Cache-Control:$upstream_http_cache_control ‘
‘Expires:$upstream_http_expires ‘
‘”$request”($status) ‘
‘”$http_user_agent” ‘;
#gzipon;
#gzip_min_length 1k;
#gzip_buffers 4 16k;
#gzip_http_version1.1;
#gzip_comp_level2;
#gzip_types text/plain application/x-javascript text/cssapplication/xml;
#gzip_varyon;
proxy_temp_path /home/cache/proxy_temp_path;
#缓存路径,级别,检测时间,活动时间
proxy_cache_path /home/cache/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
server
{
listen 80;
server_name 192.168.242.130;
location /
{
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
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.242.130:8080;
access_log /opt/nginx/cache.logcache;
expires 1d;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
#allow 192.168.0.0/255;
#deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://192.168.242.130:80;
}
access_log off;
}
server
{
listen 8080;
server_name 192.168.242.130;
location /
{
root /home/www/;
}
access_log off;
}
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23348.html