一,nginx中expires指令的作用

网站的图片等静态文件一旦发布,通常很少改动,

为了减小对服务器请求的压力,提高用户浏览速度,

我们可以设置nginx中的expires,

使用户访问一次后,将图片缓存在用户的浏览器中

说明;如果用户对浏览器强制刷新或着清除缓存,

则expires的设置会失效,因为浏览器本地的缓存文件都没了

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,expires指令的语法:

语法: expires [time|epoch|max|off]
默认值: expires off
作用域: http, server, location

使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标

起到控制页面缓存的作用

Expires头标的值将通过当前系统时间加上设定time值来设定

1,负数表示no-cache

例: -1:指定“Expires”的值为当前服务器时间-1s,即永远过期

2,max:指定“Expires”的值为31 December2037 23:55:55GMT,"Cache-Control"的值为10年

例子:

Cache-Control: max-age=315360000
Expires:Thu, 31 Dec 2037 23:55:55 GMT

3,epoch:指定“Expires”的值为 1 January,1970,00:00:01 GMT

例子:

Cache-Control:no-cache
Expires:Thu, 01 Jan 1970 00:00:01 GMT

可以看到缓存不起作用

4,正数或零表示max-age=time

5,off:关闭,不修改响应头“Expires”和"Cache-Control"的值

三,expires的使用例子

1,对于图片,通常过期时间可以设置为一个月

     location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
expires 30d;
}

2,对js/css,通常过期时间设置为1周

    location ~* \.(js|css)$ {
expires 7d;
}

四,查看expires缓存效果

返回给浏览器的缓存信息:

Cache-Control: max-age:是缓存的总时间长度

Expires:是缓存到期的时间

看截图:

Cache-Control:max-age=2592000

这个cache的时间长2592000秒就是30天:

60x60x24x30 = 2592000

Expires:Wed, 27 May 2020 09:14:43 GMT

我们在4月27日打开的图片文件,会在5月27日过期

五,在缓存过期之前,js文件或图片文件有修改怎么办?

1,

缓存过期之前,js文件和图片会保存在用户的浏览器端,

如果这时我们修改了js/css代码或图片,

此时用户看到的仍然是有问题或未修改过的图片。

这时我们需要通知浏览器,让它重新加载修改过的页面元素。

2,

一个js设置重新加载的例子:

//是否需要刷新的开关设置
var is_refresh_img = true;
//生成随机数
var refresh_version = Math.random();
...
//如果需要刷新,则给图片的src添加一个随机参数,使浏览器重新加载
if (is_refresh_img == true) {
var objs = document.getElementsByClassName("magaimg");
for (var i = 0; i < objs.length; i++) {
var arr_src = objs[i].src.split("?");
objs[i].src=arr_src[0]+"?t="+refresh_version;
}
}

说明:

refresh_version 可以设置为固定值,不要每次访问页面时都重新生成

因为这样导致缓存失效,导致页面每次加载时都刷新图片

会影响浏览器的访问速度

六,查看ngnix版本

[root@blog ~]# /usr/local/openresty/nginx/sbin/nginx -v
nginx version: openresty/1.15.8.2

nginx优化:使用expires在浏览器端缓存静态文件的更多相关文章

  1. 霸气!Nginx 中缓存静态文件秘籍

    导读 这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件)设 ...

  2. 用nginx缓存静态文件

        这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件) ...

  3. 【摘自张宴的"实战:Nginx"】使用nginx的proxy_cache模块替代squid,缓存静态文件

    #user nobody;worker_processes 1; error_log logs/static_source.error.log;#error_log logs/error.log no ...

  4. js操作serviceWorker缓存静态文件

    js操作serviceWorker缓存静态文件 serviceWorker的作用就是用来做离线应用的,在手机端程序中用的较多 先看下效果 index.html <!DOCTYPE html> ...

  5. nginx js、css、图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常

    nginx js.css.图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常 http://upstreamname:port/....../. ...

  6. vue服务端渲染浏览器端缓存(keep-alive)

    在使用服务器端渲染时,除了服务端的接口缓存.页面缓存.组建缓存等,浏览器端也避免不了要使用缓存,减少页面的重绘. 这时候我们就会想到vue的keep-alive,接下来我们说一下keep-alive的 ...

  7. Nginx优化_压缩处理与内存缓存

    对页面进行压缩处理; 服务器内存缓存. 1.对页面进行压缩处理 [root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf http { ... gzip ...

  8. apache下用expires_module让浏览器缓存静态文件

    让浏览器缓存CSS.JS.图片.静态文件等是很重要的事情,这样可以减轻服务器的压力,省的浏览器经常要去服务端下载这些静态文件.下面看看配置方法吧. 1.开启apache扩展模块mod_expires. ...

  9. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

随机推荐

  1. 入门alibaba的EasyExcel

    一.关于EasyExcel 1.什么是EasyExcel,有什么作用? EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. ...

  2. 乔悟空-CTF-i春秋-Web-Not Found-🙋🏻‍♂️

    2020.09.08 又是匆匆忙忙的一天- 做题 题目 题目地址 做题 做题??做个屁,啥也不知道,干瞪眼

  3. Java面试必问之-JUC

    JUC:java.util.concurrent (Java并发编程工具类) 代码:D:\JAVA\Java_Learning\Elipse_Project\workspace200301EE\JUC ...

  4. 前端直传文件到aliyun OSS

    <template> <div id="container"> <div class="img-item m-1 upload-file&q ...

  5. ribbon源码(2) 负载均衡器

    负载均衡器对外提供负载均衡的功能,本质上是是维护当前服务的服务器列表和服务器状态,通过负载均衡算法选取合适的服务器地址. 用户可以通过实现ILoadBalancer来实现自己的负载均衡器,ribbon ...

  6. Mac部署spark2.4.4

    环境信息 操作系统:macOS Mojave 10.14.6 JDK:1.8.0_211 (安装位置:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jd ...

  7. 《Java从入门到失业》第四章:类和对象(4.4):方法参数及传递

    4.4方法参数及传递 关于这个知识点,我想了很久该不该在这里阐述.因为这个知识点稍微有点晦涩,并且就算不了解也不影响用Java编写代码.不过笔者刚开始工作的时候,就是因为这块内容没有过多的关注,以至于 ...

  8. Dubbo工作流程

    一.dubbo整体架构 其中Service 和 Config 层为 API,对应服务提供方来说是使用ServiceConfig来代表一个要发布的服务配置对象,对应服务消费方来说ReferenceCon ...

  9. python类,魔术方法等学习&&部分ssti常见操作知识点复习加深

    python类学习&&部分ssti常见操作知识点复习加深 在做ssti的模块注入的时候经常觉得自己python基础的薄弱,来学习一下,其实还是要多练习多背. 在python中所有类默认 ...

  10. Cookies题解

    来源:<算法竞赛进阶指南> Describe: 有M块饼干要分给N个孩子.当有k个孩子分到的饼干数比第i个孩子分到的多时,会产生g[i]*k的贡献.求最小的贡献及任意一种方案. Solut ...