首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何防止nginx中的"304 Not Modified"?

防止 Nginx 中的 "304 Not Modified" 可以通过以下方法实现:

  1. 配置文件中的缓存控制

在 Nginx 的配置文件中,可以设置缓存控制头,以便浏览器更好地缓存静态资源。以下是一个示例配置:

代码语言:txt
复制
location ~* \.(jpg|jpeg|gif|png|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public";
}

这个配置将静态文件的缓存时间设置为 30 天,并添加了 Cache-Control 头,以便浏览器缓存这些文件。

  1. 使用 ETag

ETag 是一种 HTTP 响应头,用于标识资源的特定版本。当浏览器发送请求时,它会将 ETag 与请求的资源进行比较,如果资源未更改,则返回 304 Not Modified。

要启用 ETag,可以在 Nginx 配置文件中添加以下配置:

代码语言:txt
复制
location ~* \.(jpg|jpeg|gif|png|ico|css|js)$ {
    etag on;
}

这将为静态文件启用 ETag 支持。

  1. 使用 Last-Modified 和 If-Modified-Since

Last-Modified 和 If-Modified-Since 是另一种 HTTP 缓存机制,它们基于文件的最后修改时间。当浏览器发送请求时,它会将 If-Modified-Since 头与服务器上的文件最后修改时间进行比较。如果文件未更改,则返回 304 Not Modified。

要启用 Last-Modified 和 If-Modified-Since,可以在 Nginx 配置文件中添加以下配置:

代码语言:txt
复制
location ~* \.(jpg|jpeg|gif|png|ico|css|js)$ {
    if_modified_since before;
    expires modified +1y;
}

这将为静态文件启用 Last-Modified 和 If-Modified-Since 支持,并将缓存时间设置为 1 年。

  1. 使用 gzip 压缩

gzip 压缩可以减少传输的数据量,从而减少带宽消耗和延迟。要启用 gzip 压缩,可以在 Nginx 配置文件中添加以下配置:

代码语言:txt
复制
gzip on;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

这将为指定的 MIME 类型启用 gzip 压缩。

总之,通过配置 Nginx 的缓存控制、ETag、Last-Modified 和 If-Modified-Since 以及 gzip 压缩,可以有效地防止 "304 Not Modified" 响应,从而提高网站性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Nginx学习之如何防止流量攻击

大家都知道服务器资源有限,但是客户端来请求是无限(不排除恶意攻击), 为了保证大部分请求能够正常响应,不得不放弃一些客户端来请求,所以我们会采用Nginx限流操作, 这种操作可以很大程度上缓解服务器压力...如何使用Nginx实现基本限流,比如单个IP限制每秒访问50次。通过Nginx限流模块,我们可以设置一旦并发连接数超过我们设置,将返回503错误给客户端。这样可以非常有效防止CC攻击。...这个示例定义了一个100m容器,按照32bytes/session,可以处理3200000个session。 limit_rate 300k; 对每个连接限速300k....而且也不能一直排队,所以nginx还设了超时,排队超过一定时间,也是直接退回,返回服务器忙响应。...小结 限流目的就是防止恶意请求流量,恶意哦公积,或者防止流量超出系统峰值。 实现方案有很多,Nginxlimit模块只是其中一个思路。

2.9K80
  • nginx实例 - 如何防止大图片占满带宽?

    场景 前几天网站出现了访问缓慢情况,查看系统资源状况后,发现出网带宽一直是占满状态 查看服务器日志,发现了很多10M左右超大图片请求,这些图片占满了带宽,严重影响了其他访问请求 正常情况下是应该访问缩放过小图...,一般在100K以内,查找问题和修改程序来不及,需要紧急处理 想到方法就是对大图加载进行限速 配置 修改nginx配置文件图片访问配置部分 思路: 对于正常小图访问不限制,把正常图大小限定为...expires 30d; limit_rate_after 100k; limit_rate 100k; } limit_rate_after 100k; limit_rate 100k; 这两句意思就是当图片加载了...100k以后进行限速,最高 100k 测试 测试服务器带宽为1M,准备了一张3.3M图片 分别测试限速前后网络情况,使用网络监控命令进行查看 限速前 访问图片,查看网络流量状态,速度一直保持在...130k/s 左右,正好为1M带宽满载状态 限速后 访问图片,查看网络流量状态,速度一直保持在 100k/s 左右,说明限速成功 ?

    2.2K60

    zk如何防止羊群效应

    在java分布式环境下,分布式应用越来越常见,本文将介绍zk中使用分布式锁并有效防止羊群效应。 那么什么是羊群效应呢?...羊群是一种很散乱组织,平时在一起也是盲目地左冲右撞,但一旦有一只头羊动起来,其他羊也会不假思索地一哄而上,全然不顾旁边可能有的狼和不远处更好草。...就是当A获取锁并加锁时候,B会监听A结点变化,当A创建临时结点被删除时候,B会去竞争锁。懂了没? 那么问题来了?...整体步骤如下: 所有客户端都尝试去创建临时有序节点以获取锁 序号最小临时有序节点获得锁 未获取到锁客户端给自己上一个临时有序节点添加监听 获得锁客户端进行自己操作,操作完成之后删除自己临时有序节点...当监听到自己上一个临时有序节点释放了锁,尝试自己去加锁 操作完成之后释放锁 之后剩下客户端重复加锁和解锁操作 因此,本方法可以有效解决zk羊群效应,使得分布式锁可以有顺序执行。

    2.9K20

    如何有效防止PCDN流量攻击?

    有效防止PCDN流量攻击可以采取以下策略和方法:1.加强流量监控和分析:通过实时监控网络流量,可以发现异常流量模式和潜在攻击行为。...利用流量分析工具,可以深入了解流量来源、目的地和特征,从而及时发现并应对流量攻击。2.配置防火墙和过滤规则:针对PCDN特点,配置高效防火墙和过滤规则是防止流量攻击关键。...防火墙可以阻止未经授权访问和异常流量进入,而过滤规则可以基于IP地址、协议、端口等因素来限制或屏蔽恶意流量,建议选购亿程智云小盒子收益还是不错比较稳定。...5.定期更新和升级安全策略:随着攻击手段不断演变,定期更新和升级安全策略是保持PCDN防护能力关键。这包括更新防火墙规则、升级安全补丁和漏洞修复等。...综上所述,有效防止PCDN流量攻击需要综合运用多种策略和方法,包括加强流量监控和分析、配置防火墙和过滤规则、引入流量清洗设备、实施负载均衡和容错机制、定期更新和升级安全策略以及建立安全意识和培训等。

    13210

    服务端返回 304 如何做到

    Last-Modified/If-Modified-Since 通常服务器知道你所请求数据最后修改时间,并且 HTTP 为服务器提供了一种将最近修改数据连同你请求数据一同发送方法。...如果你第二次 (或第三次,或第四次) 请求相同数据,你可以告诉服务器你上一次获得最后修改日期:在你请求中发送一个 If-Modified-Since 头信息,它包含了上一次从服务器获得数据所获得时间...服务器简单地返回 304: Not Modified,因此浏览器就会知道从本地缓存加载页面。...其工作方式是:服务器回传你所请求数据同时,发送这些数据 hash (在 ETag 头信息给出),hash 的确定完全取决于服务器(比如简单点md5值)。...当第二次请求数据时,客户端需要在 If-None-Match 头信息包含 ETag hash。

    1.4K30

    通过 Nginx 防止网络盗链方法

    随着网站和应用程序内容增加,防止未经授权外部网站或应用程序盗用您资源变得至关重要。Nginx是一个强大工具,提供了多种方法来实现防盗链保护。...本博客将介绍几种不同Nginx防盗链方法,以帮助您保护您资源免受盗链攻击。...如果请求引用来源不在允许列表Nginx将返回403禁止访问错误。 方法2:使用geo模块 Nginxgeo模块允许您基于客户端IP地址进行访问控制。...然后,在location块,我们使用if指令检查这个变量。如果IP地址不在允许列表Nginx将返回403错误。...优缺点对比 以下是各种Nginx防盗链方法优缺点对比: 方法 优点 缺点 使用valid_referers指令 - 简单易用- 不需要额外计算资源 - 依赖于请求Referer字段,不够安全-

    1.2K20

    使用ETag和Expires调优web服务器性能

    (Http Request Header),服务器端响应并记录相关记录属性标记文件没有发生改动,服务器端返回304,直接从缓存读取: HTTP/1.x 304 Not Modified Date: Tue...服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空响应体。...Nginx针配置Etag和Expires,有效缓存纯静态如css/js/pic/页面/流媒体等文件。...其他请参考NginxExpires B.1、ApacheEtag设置 在Apache设置Etag支持比较简单,只用在含有静态文件目录建立一个文件.htaccess, 里面加入: FileETag...第四个参数肯定是要enable, 前面三个就看实际需要来选吧,推荐使用修改时间 B.3、 Nginx Etag Nginx默认没有添加对Etag标识.Igor Sysoev观点”在对静态文件处理上看不出如何

    95220

    运营同学如何防止活动系统扑街 ?

    更轻量一点,可能是页面长时间加载,部分或者全部内容不可见。这说明系统响应超时了,忙不过来了。当然这里要排除客户端网络因素,也可能是网络太慢导致。...那么运营同学尤其要注意是,在一些可配置地方粘贴 URL 是否符合规范,比如是否包含特殊字符,参数 ?和 & 是否使用正确等等。...还有就是推送图文消息,链接到自己系统入口放在哪个位置也很关键,比如放在页面底部,那在用户浏览页面的时候,就已经在时间上拉开了差距,分散了系统压力。 有些系统压力,是定时任务造成。...即事应急方案,如果没有提前制定,只能靠技术人员应变能力了。然后事后再通过活动复盘,总结各方经验与教训,避免下次悲剧发生。 总结一下,核心就是以下 6 点: 1....提前计划事应急方案; 6. 事后复盘,总结教训。 怎么样,各位同学学会了吗? 作者 | 姬小光 来源 | 姬小光 [ ID: hi-laser ] 识别二维码获取更多干货文章 ↓↓↓

    71020

    支付系统设计如何防止重复支付?

    wallet-2292428_1280.jpg 在我们支付系统设计,经常会遇到这样一个问题,防止用户重复支付。...用户明明只想购买一次,却因为系统问题,导致重复支付,带来额外物流成本和扯皮退货运营成本,对商家信誉和系统体验很不好。 那么实际我们在设计支付系统时,如何来避免这一问题呢。...如何防止重复支付提交 在我们实际支付系统设计,我们系统设计人员经常无法区分商品订单和支付订单之间关系,经常混为一谈。...这里,我们重点讨论第二种方式,保持支付订单幂等性来防止重复支付。 针对一笔商品订单,在支付时,产生一个唯一支付订单号,这个支付订单号包含了客户选定支付落地支付方式和真正支付渠道。...提供用户申诉手段,让用户提出哪些订单是重复,并且由销售系统店家、商品提供者和买家三方共同根据用户操作记录来协商如何处理。我们需要让技术帮助让这种人工处理几率尽量小。

    4.2K31

    【干货】如何防止接口重复提交?(

    一、摘要 在上一篇文章,我们详细介绍了对于下单流量不算高系统,可以通过请求唯一ID+数据表增加唯一索引约束这种方案来实现防止接口重复提交!...实现逻辑,流程如下: 1.当用户进入订单提交界面的时候,调用后端获取请求唯一 ID,同时后端将请求唯一ID存储到redis再返回给前端,前端将唯一 ID 值埋点在页面里面 2.当用户点击提交按钮时,...,说明服务正在处理,请勿重复提交 4.最后一步,如果加锁成功后,需要将锁手动释放掉,以免再次请求时,提示同样信息;同时如果任务执行成功,需要将redis请求唯一 ID 清理掉 5.至于数据库是否需要增加字段唯一索引...,理论上可以不用加,如果加了更保险 引入缓存服务,防止重复提交大体思路如上,实践代码如下!...RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) @Documented public @interface SubmitToken { } 编写方法代理服务,增加防止重复提交验证

    1.5K10

    前端缓存那些事

    304状态码,浏览器将从缓存读取资源 //response header 第一回合 Last-Modified: Wed, 21 Oct 2019 07:28:00 GMT //request header...一般在expires或者 Cache-Control max-age头部有效时会发生 ❞ 3.2 状态码304 Not Modified ❝ 是浏览器和服务器“交流”了,确定使用缓存后,再用缓存,...也就是第二节讲通过Etag或Last-Modified第二回合对比,对比两者一致,则意味资源不更新,则服务器返回304状态码 ❞ 3.3 状态码 200 ❝ 以上两种缓存全都失败,也就是未缓存或者缓存未过期...,称为 hash ❞ 在vue cli脚手架,我们可以通过配置vue.config.js(本质上是配置webpack)来设置编译生成文件具备hash值,意味着每次打包编译文件都是唯一,来防止因为缓存...[hash].js').end(); } } 复制代码 4.2 Nginx缓存 • 配置expires 假设我想通过web应用图片缓存一周,那你可以在nginx配置如下,配置完之后一周之内资源只会访问浏览器资源

    48772

    Swift Actors 使用以如何防止数据竞争

    Swift Actors 旨在完全解决数据竞争问题,但重要是要明白,很可能还是会遇到数据竞争。本文将介绍 Actors 是如何工作,以及你如何在你项目中使用它们。 什么是 Actors?...然而,最大区别是由 Actor 主要职责决定,即隔离对数据访问。 Actors 如何通过同步来防止数据竞争 Actor 通过创建对其隔离数据同步访问来防止数据竞争。...没有数据竞争风险,因为在读取过程,它值不能从另一个线程改变。 然而,我们其他方法和属性会改变一个引用类型可变状态。为了防止数据竞争,需要同步访问,允许按顺序访问。...为了更好地理解这个概念,让我们来看看这样情况:你想把操作合并到一个方法,以防止额外暂停。...当在你代码持续使用 Actors 时,你肯定会降低遇到数据竞争风险。创建同步访问可以防止与数据竞争有关奇怪崩溃。然而,你显然需要持续地使用它们来防止应用程序中出现数据竞争。

    2.5K10

    一个Bug搞懂浏览器缓存策略

    强缓存 浏览器强缓存是通过设置HTTP响应头中Cache-Control和Expires字段来指定浏览器在一定时间内直接从本地缓存获取资源,而不会向服务器发送请求。...服务器在返回资源时会生成一个唯一ETag标识和最后修改时间,浏览器在下次请求资源时会将这些信息发送给服务器,服务器根据这些信息判断资源是否发生变化,如果没有变化则返回304 Not Modified状态码...,告诉浏览器直接从缓存获取资源。...以及资源文件ETag 是否等于 If-None-Match (ETag优先级高于Last-Modified) 如果相同则返回304,客户端使用缓存 如果不相同则服务器返回资源,且返回新ETag 和...第一次访问服务器返回200和资源并记录ETag 和 Last-Modified,第二次会304 走协商缓存。 如何修改 系统更新,用户强缓存没有过期,直接走了强缓存,导致没有访问服务器最新资源。

    17910

    Nginx下关于缓存控制字段cache-control配置说明 - 运维小结

    比如对于提交订单,为了防止浏览器回退重新提交,可以使用Cache-Control之no-store绝对禁止缓存,即便浏览器回退依然请求是服务器,进而判断订单状态给出相应提示信息!...如果服务器发现没有修改, 则直接返回304(Not Modified)回应信息给浏览器(内容很少), 如果服务器对比时间发现修改了, 则照常返回所请求资源....因此有的时候只设置no-cache防止缓存还是不够保险,还可以加上private指令,将过期时间设为过去时间。...之后,服务器才能返回304. 6、Last-Modified和Etag 分布式系统里多台机器间文件last-modified必须保持一致,以免负载均衡到不同机器导致比对失败....5) 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空响应体。

    7.8K51

    网页性能优化浅谈与实践

    ,否则直接从缓存取, 3.服务器收到请求后,判断文件是否被修改过,若是则直接返回200,否则返回304并且浏览器将从缓存获取文件。...2.缓存校验:如何校验缓存,比如怎么定义缓存有效期,怎么确保缓存是最新。...在浏览器访问地址http://127.0.0.1:88/type.css可以看到响应头部包含nginx配置字段 3) 重复刷新访问,会发现每次状态码都是200,原因是no-store优先级最高,...缓存校验就是用来解决这些问题,在http 1.1 我们主要关注下 Last-Modified 和 etag 这两个字段。...Tips : If-Modified-Since和If-Unmodified-Since区别是,前者告诉服务器如果时间一致,返回状态码304; 后者告诉服务器如果时间不一致,返回状态码412。

    59520

    在linux系统下Nginx缓存策略设置方式

    在开发调试web时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试烦恼,提供下apache不缓存配置和nginx不缓存配置设置。...(如图片,JS,CSS),可以在服务器设置expires过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力目的。...以Nginx服务器为例: location ~ .*\....no-cache指示请求或响应消息不能缓存 no-store用于防止重要信息被无意发布。在请求消息中发送将使得请求和响应消息都不使用缓存。...若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存

    2.2K20

    Nginx 防止 SQL 注入、XSS 攻击实践配置方法

    通过服务器 waf 日志记录分析得出基本都是 SQL 注入、XSS 攻击范畴,这些攻击都绕过了 CDN 缓存规则直接回源请求,这就造成 PHP、MySQL 运算请求越来越多,服务器负载飙升就是这个原因造成...,在日志里可以看到几乎大部分都是 GET/POST 形式请求,虽然 waf 都完美的识别和拦截了,但是因为 Nginx 层面应对措施,所以还是会对服务器负载形成一定压力,于是在 Nginx 里也加入了防止...SQL 注入、XSS 攻击配置,没有想到效果竟然出奇好。...将下面的 Nginx 配置文件代码放入到对应站点.conf 配置文件 [server] 里,然后重启 Nginx 即可生效。 if ($request_method !...#防止SQL注入 if ($query_string ~* (\$|'|--|[+|(%20)]union[+|(%20)]|[+|(%20)]insert[+|(%20)]|[+|(%20)]drop

    6.2K30
    领券