当前位置: 首页 > Linux

Linux下玩转nginx系列(六)---nginx实现缓存(caching)服务

时间:2023-04-07 01:05:27 Linux

Ngnix缓存在各个项目中很常见。作为高效的代理服务器,nginx还提供了强大的缓存机制,想象一下,在一些大型网站中,当有大量的静态html、js、css文件等,在加载页面时,如果没有缓存,页面会很慢。这种情况下,可以考虑使用nginx提供的缓存功能进行配置。Nginx的网页缓存Nginx从0.7.48版本开始提供缓存功能。Nginx是基于ProxyStore实现的。其原理是将URL及相关组合作为Key,通过MD5算法对Key进行哈希运算,得到硬盘上对应的哈希目录路径,从而将缓存内容保存在目录中。可以支持任意URL连接,也支持404/301/302等非200状态码。Nginx可以支持为指定的URL或状态码设置过期时间,或者使用purge命令手动清除指定URL的缓存。Nginx缓存设置相关指令Nginx的web缓存服务主要是使用ngx_http_proxy_module模块相关指令集完成的。下面总结一下常用的指令:proxy_cache_path指定用来设置缓存文件的存储路径语法格式proxy_cache_pathpath[levels=number]keys_zone=zone_name:zone_size[inactive=time][max_size=size];参数说明path缓存路径地址/usr/local/proxy_cachelevels指定缓存空间对应的目录,最多可以设置3层,每层的值为1|2例如:levels=1:2缓存空间有两层目录,第一层是1个字母,第二层是2个字母例子:zcy[key]经过MD5加密,值为:43c8233266edce38c2c9af0694e2107d最后生成cache目录的含义是:levels=1:2,最终存放路径为/usr/local/proxy_cache/d/07;levels=2:1:2,最终存放路径为/usr/local/proxy_cache/7d/0/21;levels=2:2:2最终的存放路径是??/usr/local/proxy_cache/7d/10/e2keys_zone用来给这个缓存设置名称和指定大小。例如:keys_zone=zcy:200m缓存名称为zcy,大小为200M,1M可以存放8000个左右的key。inactive指定缓存数据如果多次不访问则删除。示例:inactive=1d,缓存数据1天内未访问将被删除,缓存空间满则默认覆盖缓存时间最长的资源,如:max_size=2g配置文件nginx.conf主配置文件worker_processes1;events{worker_connections65536;}http{includemime.types;default_type应用程序/八位字节流;发送文件;keepalive_timeou吨65;log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_loglogs/access.logmain;#CDNIncludeincludeproxy.conf;包括upstrem.conf;包括test.example.com.conf;服务器{听80;服务器名称本地主机;error_page500502503504/50x.html;location=/50x.html{根html;}}}catproxy.conf#testcacheproxy_temp_path/data/cdn_cache/proxy_temp_dir;proxy_cache_path/data/cdn_cache/proxy_cache_dirlevels=1:2keys_zone=cache_one:50minactive=1dmax_size=1g;proxy_connect_timeout5;proxy_read_timeout60;proxy_send_timeout5;proxy_buffer_size16k;proxy_buffers464k;proxy_busy_buffers_size128k;proxy_temp_file_write_size128k;proxy_next_upstream错误超时invalid_headerhttp_500http_502http_503http_404;[root@centos-1conf]#catupstrem.confupstreamtest.example.com{server192.168.1.102:80weight=10max_fails=3;}[root@centos-1conf]#mkdir/data/cdn_cache-p[root@centos-1conf]#cattest.example.com.confserver{listen80;服务器名称test.example.com;access_loglogs/test.example.com-access.logmain;位置~.*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf)${#Proxyproxy_redirectoff;proxy_next_upstreamhttp_502http_504http_404错误超时invalid_header;proxy_set_header主机$host;proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_passhttp://test.example.com;#使用代理缓存proxy_cachecache_one;proxy_cache_key"$host$request_uri";add_header缓存“$upstream_cache_status”;proxy_cache_valid2003043013028h;proxy_cache_valid4041m;proxy_cache_valid任意2d;}location/{proxy_redirect关闭;proxy_next_upstreamhttp_502http_504http_404错误超时invalid_header;proxy_set_header主机$host;proxy_set_headerX-real-ip$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_passhttp://test.example.com;client_max_body_size40m;client_body_buffer_size128k;proxy_connect_timeout60;代理发送超时60;proxy_read_timeout60;proxy_buffer_size64k;代理缓冲区432k;proxy_busy_buffers_size64k;}}[root@centos-1nginx]#ps-ef|grepnginxroot56201021:31?00:00:00nginx:主公关处理sbin/nginxnginx56215620021:31?00:00:00nginx:工作进程nginx56225620021:31?00:00:00nginx:缓存管理器进程nginx562356200x21:31?00:00::cacheloader进程查看进程,发现多了两个缓存进程。通过以上配置,运行后可以得到如下结论。1、访问html时,不要使用缓存。2.第一次访问图片时,缓存处于未命中状态。3、第二次访问图片时,缓存处于命中状态。登录缓存服务器查看分析nginx缓存过程第一步:访问两个网址:http://192.168.1.102/index.htmlhttp://192.168.1.102/test.jpg第二步:查看缓存目录:[root@centos-1cdn_cache]#tree-A/data/cdn_cache//data/cdn_cache/+--proxy_cache_dir|+--9||+--a8||+--f28e02e3877f3826567907bcb0ebea89|+--电子|+--88|+--114250cf63938b2f9c60b2fb3e4bd88e+--proxy_temp_dir6个目录,2个文件步骤三:缓存配置参数:proxy_cache_path/data/cdn_cache/proxy_cache_dirlevels=1:2步骤四:查看缓存内容步骤五:分析过程通过echo-n'192.168加密.1.102/index.html'|md5sum|awk'{print$1}'114250cf63938b2f9c60b2fb3e4bd88eecho-n'192.168.1.102/test.jpg'|md5sum|awk'{print$1}'f28e02e3877f3826567907bcb0ebea89配置:根据Cache分析.级别=1:2。2.其中1代表MD5的最后一位。3、其中2代表倒数第三位,MD5的第三位。4.冒号表示一层。参考文档nginx-proxy_pass官网NGINX缓存使用官方指南FullExampleConfiguration