Nginx缓存问题

Nginx在后续版本中加入了proxy_cache实现对后端服务器请求的缓存,并赋予了很多强大的配置,在官方文档及各类技术支持文档中都能找到,本文不再赘述环境搭配及相关问题。主要讨论配置成功后为何Nginx服务器没有生成缓存文件,及无法命中缓存的问题。

1.静态文件JS,CSS等都能生成缓存文件,但是普通请求和HTML无法缓存。

产生这个问题的原因简单点来说是因为后端服务器的Expires和Cache-Control导致的。解决办法有粗暴与深入了解其原理两种。

第一种:强制缓存,在Nginx配置中的HTTP体里加上

proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

此法可以不用修改后台服务端配置,对希望快速配置生效的同学有效。

第二种:修改后端服务器响应头相关配置

具体参考博文https://www.cnblogs.com/zlingh/p/5879988.html

此文描述其机器相当清楚,强烈各位研究。

2.非get、head请求不能缓存

在配置的location块中添加缓存的HTTP方法,示例如下:

proxy_cache_methods GET HEAD POST; 

 3.加了上面的post请求配置,仍然缓存无效

由于大部分使用post请求的都会用到requestBody。而Nginx缓存是以key、value保存的,默认的key是URI,所以需要修改Nginx的缓存key来达到缓存目的。添加下述示例:

proxy_cache_key "$request_uri|$request_body"; 

注意:如果请求头(oauth协议)也会影响请求的,也需要修改key的规则,具体参考官方文档。

 

 

 

 

你可能感兴趣的:(Nginx)