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 浏览器缓存问题 #### 配置方法和解决方案 对于通过 Nginx 来控制浏览器缓存问题,可以采取多种策略来确保资源能够被正确加载而不受陈旧缓存的影响。 #### 修改 HTTP 响应头设置 为了防止页面或静态资源在客户端长时间缓存,在 Nginx 中可以通过修改响应头部信息实现更精确的缓存管理。具体来说: - **禁用缓存**:如果希望完全关闭某些请求类型的缓存功能,则可以在 location 或 server 段内加入如下指令[^2]: ```nginx add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires 0; ``` 这些命令会向客户端发送信号表明该响应不应该被存储于任何地方,并且每次访问都需要重新获取最新数据。 - **使用 ETag 和 Last-Modified 进行条件验证** 另一种方式是利用 `ETag` 及 `Last-Modified` 头部来进行高效的增量更新检查。当文件发生变化时才返回新的版本给用户端;反之则告知其继续沿用本地副本即可。这既提高了效率又减少了不必要的网络传输开销[^1]。 ```nginx location /static/ { etag on; if_modified_since before; } ``` 上述配置启用了 ETag 功能并设置了基于时间戳(`If-Modified-Since`) 的条件 GET 请求处理逻辑。 - **自定义缓存有效期 (Cache-Control)** 除了简单地阻止一切形式的缓存外,还可以根据不同需求设定特定时间段内的可接受范围。比如让图片、样式表等长期不变动的内容保持较久的有效期,而 HTML 文件只允许短暂保存以便及时反映更改后的状态。 ```nginx location ~* \.(jpg|jpeg|png|gif)$ { expires max; } location ~* \.html$ { expires -1; } ``` 这段代码片段表示图像类资源将尽可能长久地存在于用户的设备上(-max),而对于HTML文档而言则是强制即时刷新(-1)。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值