加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

聊聊高并发系统之HTTP缓存

发布时间:2021-01-09 05:36:32 所属栏目:安全 来源:网络整理
导读:副标题#e# 《聊聊高并发系统之HTTP缓存》要点: 本文介绍了聊聊高并发系统之HTTP缓存,希望对您有用。如果有疑问,可以联系我们。 简介 最近遇到很多人来咨询我关于浏览器缓存的一些问题,而这些问题都是类似的,因此总结本文来解答以后遇到类似问题的朋友.

对于静态资源会自动添加ETag,可以通过添加“etag off”指令禁止生成ETag.如果是静态文件Last-Modified是文件的最后修改时间;Expires是根据当前服务端系统时间算出来的.如上nginx配置的计算逻辑(实际计算逻辑比这个多,具体参考官方文档):

if (expires == NGX_HTTP_EXPIRES_ACCESS ||r->headers_out.last_modified_time == -1) {

max_age = expires_time;

expires_time += now;

}

if-modified-since

此指令用于表示nginx如何拿服务端的Last-Modified和浏览器端的If-Modified-Since时间进行比较,默认“if_modified_since exact”表示精确匹配,也可以使用“if_modified_sincebefore”表示只要文件的上次修改时间早于或等于浏览器短的If-Modified-Since时间,就返回304.

nginx proxy expires

使用nginx作为反向代理时,请求会先进入nginx,然后nginx将请求转发给后端应用.如下图所示:

首先配置upstream:

upstream backend_tomcat {

server 192.168.61.1:9080 max_fails=10 fail_timeout=10s weight=5;

}

接着配置location:

location = /cache {

proxy_pass http://backend_tomcat/cache$is_args$args;

}

接下来我们可以通过如http://192.168.61.129/cache?millis=1471349916709访问nginx,nginx会将请求转发给后端java应用.也就是说nginx只是做了相关的转发(负载均衡),并没有对请求和响应做什么处理.

假设对后端返回的过期时间需要调整,可以添加expires指令到location:

location = /cache {

proxy_pass http://backend_tomcat/cache$is_args$args;

expires 5s;

}

然后再请求相关的URL,将得到如下响应:

过期时间相关的响应头被expires指令更改了,但是Last-Modified是没有变的.

即使我们更改了缓存过期头,但nginx本身没有对这些内容做缓存,每次请求还是要到后端验证的,假设在过期时间内,这些验证在nginx这一层验证就可以了,不需要到后端验证,这样可以减少后端的很大压力.即整体流程是:

1、浏览器发起请求,首先到nginx,nginx根据url在nginx本地查找是否有文档缓存;

2、nginx没有找到本地缓存,则去后端获取最新的文档,并放入到nginx本地缓存中;返回200状态码和最新的文档给浏览器;

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读