大家好,我是mikechen睿哥。
Nginx是大型架构的必备中间件,下面我就重点来详解Nginx缓存核心技术@mikechen
Nginx缓存
Nginx缓存:是指Nginx服务器将客户端请求的资源(例如:静态文件、动态页面的响应。。。等)存储在本地存储介质(如磁盘或内存)中。
当相同的请求再次到达时,Nginx可以直接从缓存中提供资源,而无需再次向后端服务器发起请求。
这种缓存可以显著提高网站的访问速度和可用性,尤其是在处理静态资源或不经常变化的内容时。
通过缓存,Nginx可以直接从本地返回数据,而不需要每次都向后端服务器请求,从而减轻网络负载和后端服务器的压力。
Nginx缓存工作原理
Nginx支持多种缓存机制,适用于不同场景,以下是主要类型:
反向代理缓存
Nginx作为反向代理缓存,将从后端服务器(如应用服务器)获取的内容缓存到本地。
对于后续相同请求,Nginx直接返回缓存内容,无需请求后端服务器。
典型场景:常见于大流量网站,需要快速返回常访问的静态资源或动态页面。
内容缓存(ContentCache)
Nginx可以缓存内容本身(如HTTP响应),减少对后端的请求,提高响应速度。
典型场景:缓存接口数据、或动态页面的生成内容。
静态文件缓存
典型场景:通过长时间缓存静态文件,减少静态文件的重复请求,提高网站响应速度。
FastCGI缓存
对于使用FastCGI协议的动态内容,Nginx也支持缓存,这对于PHP、Python、Ruby等后端应用程序非常有用。
典型场景:缓存动态生成的HTML页面,减少对FastCGI服务器的负担。
其工作原理如下:
客户端发起请求
客户端发送一个HTTP请求到Nginx。
Nginx接收请求
Nginx接收到客户端的请求,并根据配置进行处理。
检查缓存:对于需要代理的请求,Nginx首先会根据配置的proxy_cache_key生成一个缓存Key,并在配置的缓存区域中查找是否存在与该Key匹配的缓存条目。
缓存命中(CacheHit):
缓存未命中(CacheMiss):
后端服务器处理请求并返回响应:后端服务器处理客户端的请求,并将生成的响应返回给Nginx。
缓存响应
Nginx接收到后端服务器的响应后,会根据配置判断是否需要将该响应缓存到本地。
如果满足缓存条件(例如HTTP方法是GET或HEAD,响应状态码在proxy_cache_valid指定的范围内),Nginx会将响应内容存储到缓存区域中,并使用之前生成的缓存Key进行标识。
将响应返回给客户端
无论是从缓存中获取的响应还是从后端服务器获取的响应(并可能已缓存),Nginx最终都会将响应发送回客户端。
Nginx缓存实战案例
1.静态资源缓存
为了减少对静态文件的重复请求,我们可以设置Nginx缓存这些静态资源。
location~*\.(jpg|jpeg|png|gif|css|js|ico|woff|woff2|ttf|eot|svg|otf)nbsp;{expires30d;add_headerCache-Control"public";access_logoff;}
2.商品页面缓存
location/product/{proxy_cachecache_zone;proxy_cache_key$uri;proxy_cache_valid20010m;proxy_cache_valid4041m;proxy_cache_use_staleerrortimeoutupdating;}
通过proxy_cache_valid20010m配置,缓存200状态码的响应10分钟,避免频繁访问后端获取相同数据。
3.API响应缓存
对于电商网站的API接口,可能会有一些数据变化不频繁,可以进行缓存。
location/api/{proxy_cachecache_zone;proxy_cache_valid2005m;proxy_cache_use_staleerrortimeoutupdating;}
通过上述缓存策略,Nginx帮助电商网站提高了性能,减少了后端负担,提升了用户的访问速度和体验。
以上
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。