• nginx 部署前端资源的最佳方案


    前言

    最近刚来一个运维小伙伴,做线上环境的部署的时候,前端更新资源后,总是需要清缓存才能看到个更新后的结果。客户那边也反馈更新了功能,看不到。

    方案

    前端小伙伴应该都知道浏览器的缓存策略,协商缓存和强缓存,如有不清楚的地方,可以看看这篇文章[聊聊浏览器缓存] (https://juejin.cn/post/7055224159642583047)。

    现在比较流行的是单页应用。了解了浏览器的缓存之后,在常见的web开发中我们应该怎么设置呢。现在大多数的应用是通过webpack打包的,打包生成的资源名称会带上hash值。下面是打包后的文件

    image.png

    我们可以遵循之下规则

    • index.html入口文件不加强制缓存,设置成协商缓存
    • js 资源在线上环境可以设置成强缓存。

    因为我们每次打包之后,入口文件会有变化,所以协商缓存会失效,会重新从服务器获取新的资源。而对应的js资源有hash的变化,所以有变化,会从服务器中获取。

    nginx配置

    nginx 非根目录部署(root要换成alias)。

    要设置html,htm类型的文件走协商缓存,其它js文件走强缓存,我们可以这样配置。

      #设置某个类型的文件走协商缓存
      if ($request_filename ~* .*\.(?:htm|html)$) {
        add_header Cache-Control 'no-cache';
      }
    

    整体配置

    location /page/appAnalyze {
       try_files $uri $uri/ /index.html last;
       alias /usr/*******/dist;
       index    index.html index.htm;
       #设置某个文件不缓存读取本地,永远走200,拿到最新的
        if ($request_filename ~* .*\.(?:htm|html)$) {
            add_header Access-Control-Allow-Credentials false;
            add_header Access-Control-Allow-Origin $http_origin;
            # header上添加协商缓存
            add_header Cache-Control 'no-cache';
            # 表示请求头的字段 动态获取
            add_header Access-Control-Allow-Headers
            $http_access_control_request_headers;
     }
    

    结束语

    小伙伴可以看看你们的项目缓存是不是这样部署的呢,如果不是,可以加上这些配置。你的网站性能也会提升一点点哈。

    如果你觉得该文章不错,不妨

    1、点赞,让更多的人也能看到这篇内容

    2、关注我,让我们成为长期关系

    3、关注公众号「前端有话说」,里面已有多篇原创文章,和开发工具,欢迎各位的关注,第一时间阅读我的文章

  • 相关阅读:
    (附源码)node.js宠物医生预约平台 毕业设计 030945
    【Objective-C】浅析Block及其捕获机制
    顺序表-c语言实现
    「分辨率比拼」还不够,4D成像雷达进入“软”竞争时代
    自主设计,模拟实现 RabbitMQ - 多虚拟主机管理
    activiti 表达式
    【Linux-Windows】简述IPv4子网掩码网关和DNS
    log4j设置日志的时区
    在单机(物理机)上用虚拟机部署kubernetes集群
    JMeter断言之JSON断言
  • 原文地址:https://www.cnblogs.com/qiaojie/p/16354744.html