使用Nginx配置浏览器缓存,页面展示更快一步

 更新时间:2024年01月25日 10:51:32   作者:fkjavaer  
这篇文章主要介绍了使用Nginx配置浏览器缓存,页面展示更快一步问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.简介

缓存能够存储请求的响应结果,可以很方便的再次访问,使用缓存的优点是很明显的。

  • 加速内容的访问,降低响应时间
  • 减少服务器的负载

Nginx不仅仅是一个web服务器,它也是一个web缓存服务器。

通过Nginx缓存,我们对一些静态资源或者更新频率低的数据做缓存,降低请求的响应时间,同时也能降低服务器的负载,一举多得。

web缓存通常有以下分类:

  • 客户端缓存(浏览器缓存等)
  • 服务器缓存(Nginx缓存、Redis缓存等)

我们将着重介绍 浏览器缓存

2.浏览器缓存

B/S架构是一种很流行的软件架构,浏览器在这种架构中扮演着极其重要的角色。

在使用浏览器的过程中,要刷新页面,可以使用快捷键F5刷新,这个时候有些小伙伴可能会遇到页面信息并没有刷新的情况,这就是浏览器缓存在“作祟”,这个时候我们需要强制刷新(Ctrl + F5),才能够越过浏览器缓存获取最新的数据。

对于浏览器缓存,有以下几个关键点:

  • 浏览器为什么要对资源进行缓存
  • 浏览器获取缓存的流程

1)浏览器为什么要对资源进行缓存呢?

为了节约网络资源,加速访问,浏览器会在用户磁盘上对最近访问的页面的资源进行存储,当再次访问该页面时,浏览器就可以从磁盘缓存中加载这些资源,避免频繁向服务器发起请求,这样可以加速页面的展示,并降低服务器的负载。

2)浏览器获取缓存的流程

既然浏览器可以将页面的资源缓存到本地磁盘,那么浏览器又是怎么去加载这些缓存资源的呢?

下面这张图就是具体流程:

图里面存在几个header的定义:

header示例说明
Etag“6459ce31-15499”资源的哈希码
Last-ModifiedTue, 09 May 2023 04:38:09 GMT用于表示资源最后修改时间
If-None-Match“6459ce31-15499”将当前资源的哈希码发送给服务器进行匹配
If-Modified-SinceTue, 09 May 2023 04:38:09 GMT将当前资源的最后修改时间发送给服务器进行匹配

了解流程之后,我们来具体演示一下。访问页面:http://192.168.110.98/jquery.js

1)第一次访问,没有缓存,响应状态码:200,资源大小87.5kb

请求头信息:

响应头信息:

2)新建标签页访问,响应状态码:200,资源来自disk cache,说明是直接加载的磁盘缓存

3)F5刷新页面,状态304,资源大小182B,说明会向web服务器发送请求,服务器响应304,因此浏览器去磁盘缓存加载资源。

🔔Tips:F5刷新页面,会让浏览器认为缓存已过期,因此会走缓存已过期的流程。Ctrl+F5强制刷新页面,会直接跳过浏览器缓存。

请求头信息:

相比第一次访问时,多了两个header:If-Modified-SinceIf-None-Match

3)Nginx对浏览器缓存的配置

前面,在看浏览器获取缓存的流程时,有一步是 请求响应,缓存协商,这就涉及到nginx的一些配置指令。

ngx_http_headers_module模块中,该模块可以将ExpiresCache-Control添加到响应头中,供浏览器使用,我们可以对其进行配置。

主要的指令如下:

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

1)expires [modified] time;

time可以为正数,也可以为负数,默认单位为秒。

  • 如果为负数,则响应为:Cache-Control:no-cache,即不缓存
  • 如果为正数或0,则响应为:Cache-Control:max-age=time

示例:设置缓存过期时间10s

location /jquery {
	gzip_types application/javascript;
	gzip_min_length 20;
	# 缓存过期时间10s
	expires 10;
	root   html;
}

发送请求,查看结果,和预期保持一致。Date和Expires的时间也是相差10s。

2) expires epoch | max | off;

指令响应头说明
expires epochExpires:Thu, 01 Jan 1970 00:00:01 GMTCache_Control:no-cache不缓存
expires maxExpires:Thu, 31 Dec 2037 23:55:55 GMTmax-age=315360000缓存10年
expires off响应头不添加Expires和Cache-Control

总结

以上就是Nginx对浏览器缓存的配置,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。

这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx正反向代理及负载均衡等功能实现配置代码实例

    Nginx正反向代理及负载均衡等功能实现配置代码实例

    这篇文章主要介绍了Nginx正反向代理及负载均衡等功能实现配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • nginx反向代理二级域名绑定方法及注意事项

    nginx反向代理二级域名绑定方法及注意事项

    本文介绍了利用nginx实现多域名和多站点的绑定的方法及相关注意事项,需要的朋友可以参考下
    2018-04-04
  • 解决502 Bad Gateway错误的详细指南与实例

    解决502 Bad Gateway错误的详细指南与实例

    这篇文章主要给大家介绍了关于解决502 Bad Gateway错误的详细指南与实例,502 Bad Gateway错误通常是由于网关或代理服务器在尝试访问上游服务器(通常是Web服务器)时未能及时接收到响应导致的,文中将解决办法介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • Django+Nginx+uwsgi服务器部署

    Django+Nginx+uwsgi服务器部署

    这篇文章介绍了Django+Nginx+uwsgi服务器部署的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Nginx动态配置upstream的使用小结

    Nginx动态配置upstream的使用小结

    本文深入探讨了Nginx动态配置upstream的多种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • Linux版本中Nginx平滑升级与回退

    Linux版本中Nginx平滑升级与回退

    这篇文章主要介绍了Linux中的Nginx平滑升级与回退,详细介绍了平滑升级概念和思路讲解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • 详解nginx安装过程并代理下载服务器文件

    详解nginx安装过程并代理下载服务器文件

    Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行,这篇文章主要介绍了详解nginx安装过程并代理下载服务器文件,需要的朋友可以参考下
    2022-02-02
  • 一些可能是你极易忽略的Nginx知识点总结

    一些可能是你极易忽略的Nginx知识点总结

    无论是运维、开发、测试,Nginx技术栈的学习是必不可少的,只是不同的岗位掌握的深度与广度不同而已,这篇文章主要介绍了一些可能是你极易忽略的Nginx知识点,需要的朋友可以参考下
    2026-06-06
  • Nginx反向代理实现支持长连接详解

    Nginx反向代理实现支持长连接详解

    这篇文章主要给大家介绍了关于Nginx反向代理实现支持长连接的相关资料,文字介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Nginx显示500错误的原因以及解决方法

    Nginx显示500错误的原因以及解决方法

    nginx出现500错误,不会显示具体错误信息,要到日志文件里面去看,下面这篇文章主要给大家介绍了关于Nginx显示500错误的原因以及解决方法的相关资料,需要的朋友可以参考下
    2022-12-12

最新评论