问题描述:

在做一个企业微信的移动端项目时,每次修改代码后并且打包、部署完毕,再次打开页面总是会有上一次的缓存,一开始以为是cookie和webStorage缓存导致的,然后每次清除还是有缓存,后来把企业微信本身的缓存清除了之后再重进才有效果

问题推理:
如果每次打开是上一次的缓存,那可能就是index.html的根文件被缓存住了,因为index.html里面会加载所有css、js文件,当时打开network看了下,响应头里面并没有Cache-Control: no-store, no-cache的字段,那问题的原因肯定是出在这儿了,上线的相关的部署配置是放在nginx上的;因为公司走的都是统一的容器化部署,当时nginx的部署也可以定制化的;

原因定位:
根据上面的问题推理,找到了前端项目的相关nginx配置(default.conf ),代码如下:

server {
listen 80;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
root /usr/share/nginx/html; location / {
try_files $uri /index.html;
index index.html index.htm;
} location ^~ /freight {
try_files $uri /freight/index.html;
} location ^~ /s3/ {
# fix ios previewImage 加载失败
proxy_set_header Accept "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
proxy_pass xxxxxx;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} location ~* .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$ {
expires 7d;
access_log off;
add_header Cache-Control "public";
} location ~* .*\.(?:js|css)$ {
expires 7d;
access_log off;
add_header Cache-Control "public";
} location ~* .*\.(?:htm|html)$ {
add_header Cache-Control "no-store, no-cache";
add_header Pragma "no-cache";
}
}

一眼扫过去,发现有针对html文件去除缓存的配置啊,如下:

 location ~* .*\.(?:htm|html)$ {
add_header Cache-Control "no-store, no-cache";
add_header Pragma "no-cache";
}

那为什么network里面响应头里面没有携带“no-store, no-cache” 信息呢?经过一番摸索,问题其实是出在下面这个配置上了,因为项目代码存放的文件夹是freight

// 当匹配到该路径时,try_files的作用是会直接解析freight下面index.html文件,nginx就会终止往下查询了
location ^~ /freight {
try_files $uri /freight/index.html;
}

那就需要把相关去除缓存的配置移动到location ^~ /freight这个匹配项里面去,如下所示:

location ^~ /freight {
try_files $uri /freight/index.html; if ($uri ~* .*\.(?:htm|html)$) {
add_header Cache-Control "no-store, no-cache";
add_header Pragma "no-cache";
} if ($uri ~* .*\.(?:js|css|jpg|jpeg|gif|png|ico|cur|gz|ttf|woff|ico|svg|svgz|mp4|ogg|ogv|webm)$) {
expires 7d;
access_log off;
add_header Cache-Control "public";
}
index index.html index.htm;
}

最终问题得到解决了!



记录一次由nginx配置引发出来的一系列的缓存问题的更多相关文章

  1. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  2. 记录一次nginx配置vhost的小bug

    话说这篇博客是在是为了保持自己记录生活的习惯而写的,没有什么阅读的价值,各位读者可以直接忽略了.今天在配置一个域名的时候,写了new_example.com(举例而已) 因为是内测,所以并未想象到深层 ...

  3. Nginx配置日志格式记录cookie

    Nginx配置日志格式记录cookie1. 一般用来做UV统计,或者获取用户token等. 配置方式:  在nginx的配置文件中有个变量:$http_cookie来获取cookie的信息.配置方式很 ...

  4. Nginx记录-Nginx配置

    1. 启动,停止和重新加载Nginx配置 要启动nginx,请运行可执行文件. 当nginx启动后,可以通过使用-s参数调用可执行文件来控制它. 使用以下语法: nginx -s signal 信号( ...

  5. [记录]NGINX配置HTTPS性能优化方案一则

    NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...

  6. Nginx配置两份日志记录

    nginx配置 版本-1.4.4 --- access_log /alidata/log/nginx/access/wordpress1.log ; access_log /alidata/log/n ...

  7. 记录一次 Nginx 配置 proxy_pass 后 返回404问题

    一. Nginx 配置 proxy_pass 后 返回404问题 故障解决和定位 1.1. 问题 在一次生产涉及多次转发的配置中, 需求是下面的图: 在配置好了 proxy_pass 之后,请求 ww ...

  8. Nginx 配置简述

    不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦.不过,我们往往只是需要 ...

  9. Nginx配置详解

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...

  10. 【nginx配置】nginx做非80端口转发

    一个场景 最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目.搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL ...

随机推荐

  1. nginx重新整理——————http请求的11个阶段中的access阶段[十五]

    前言 简单介绍一下access 阶段. 正文 限制某些ip地址的访问权限: syntax: allow address| CIDR|unix:|all; defuat: - context: http ...

  2. python爬虫实战以及数据可视化

    需要准备的环境: (1)python3.8 (2)pycharm (3)截取网络请求信息的工具,有很多,百度一种随便用即可. 第一:首先通过python的sqlalchemy模块,来新建一个表. 第二 ...

  3. python websocket 参数

    websocket中就有建立连接connect.发送消息send等函数可供使用,但是websocket.WebSocketApp将这些都封装好了,只用在实例化的时候传入自定义函数即可,更方便.因此这里 ...

  4. Kafka 的分片和副本机制

    我们在使用 Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如在日志收集场景,数据量是非常巨大的,例如大批量的集群每分钟产生的日志都能以 GB 计,所以如何将这么大的 ...

  5. Oracle的主键id自增

    Oracle的主键id自增 可以直接用序列加触发器的方式实现 首先表里面要有个主键,没有的话用语句或者在编译器中加一下,都可以 然后创建一个序列,一般来说最常用的有这几个参数 CREATE SEQUE ...

  6. 牛客网-SQL专项训练21

    ①Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入如下记录:('1014' , '张三' , '2002-01-06' , '男'); S ...

  7. 一看即会:Serverless 应用开发的 7 个实战小技巧

    ​简介:干货满满,马住收藏! ​ Serverless 应用开发的 7 个经验心得 作者说:Serverless 架构下的应用开发,与传统架构的应用开发还是有比较大的区别点的,例如天然分布式架构会让很 ...

  8. 重度使用Flutter研发模式下的页面性能优化实践

    简介: 淘宝特价版是集团内应用Flutter技术场景比较多,且用户量一亿人以上的应用了.目前我们首页.详情.店铺.我的,看看短视频,及评价,设置等二级页面都在用Flutter技术搭建.一旦Flutte ...

  9. 从改一个老项目开始的PHP踩坑记

    php所有版本的地址: https://windows.php.net/downloads/releases/archives/ 访问控制器时省略了index.php报No input file sp ...

  10. k8s安全---安全机制之RBAC授权(14)

    一.k8s 安全管理:认证.授权.准入控制概述 k8s 对我们整个系统的认证,授权,访问控制做了精密的设置:对于 k8s 集群来说,apiserver 是整 个集群访问控制的唯一入口,我们在 k8s ...