`
jinnianshilongnian
  • 浏览: 21513618 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2420447
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3010220
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5640568
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:260217
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597925
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250368
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5860558
Group-logo
跟我学Nginx+Lua开...
浏览量:702867
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785734
社区版块
存档分类
最新评论

错误的日期格式可能导致走nginx proxy cache时不能进行304响应

 
阅读更多
昨天在整合某些系统的nginx配置时,出现了当使用nginx cache时无法返回304响应的情况,出问题的响应头:
Content-Type:text/html; charset=gb2312
Date:Mon, 05 Jan 2015 01:58:05 GMT
Expires:Mon, 05 Jan 15 02:03:00 GMT
Last-Modified:Mon, 05 Jan 15 01:58:00 GMT
 
对于这个日期格式 nginx是不认识的,nginx能识别的日期格式:
no = 0,
rfc822, /* Tue, 10 Nov 2002 23:50:13 */
rfc850, /* Tuesday, 10-Dec-02 23:50:13 */
isoc /* Tue Dec 10 23:50:13 2002 */
 
这是因为Expires和Last-Modified是通过如下方式设置的:

 

header('Last-Modified: ' . gmdate('D, d M y H:i:s', $now_time) . ' GMT');
header('Expires: ' . gmdate('D, d M y H:i:s', $now_time + $max_age) . ' GMT');
 
这样生成的年是两位而不是四位,把小写y改成大写Y即可。
 
不过对于如上内容,浏览器和CDN端能正常识别该日期,并能正确的返回304。
 
 
另外在测试时发现,在使用Chrome浏览器时:
【1】假设第一次请求时响应内容是:
Status Code:200 OK
Age:20
Cache-Control:max-age=300
Connection:keep-alive
Content-Encoding:gzip
Content-Length:14412
Content-Type:text/html; charset=gbk
Date:Mon, 05 Jan 2015 02:10:56 GMT
Expires:Mon, 05 Jan 2015 02:15:55 GMT
Last-Modified:Mon, 05 Jan 2015 02:10:55 GMT
Vary:Accept-Encoding
 
【2】当按F5时,会发现返回了304:
Status Code:304 Not Modified
Cache-Control:max-age=300
Connection:keep-alive
Date:Mon, 05 Jan 2015 02:12:11 GMT
Expires:Mon, 05 Jan 2015 02:15:55 GMT
Vary:Accept-Encoding
【3】如果再次按F5时,会发现
Status Code:200 OK
Age:4
Cache-Control:max-age=300
Connection:keep-alive
Content-Encoding:gzip
Content-Length:14412
Content-Type:text/html; charset=gbk
Date:Mon, 05 Jan 2015 02:10:56 GMT
Expires:Mon, 05 Jan 2015 02:15:55 GMT
Last-Modified:Mon, 05 Jan 2015 02:10:55 GMT
Vary:Accept-Encoding
如果【2】时再带上Last-Modified,那么【3】还是304, 目前测试几个浏览器中只有Chrome是这种情况。
 
如果那种预售秒杀商品,是会频繁刷新的。
 
3
2
分享到:
评论

相关推荐

    Nginx启用proxy_cache缓存的方法

    - keys_zone=proxycache:60m:定义一块共享内存区域,名称为proxycache,大小为60MB,用于存放缓存的key和元数据。 - max_size=120m:设置缓存的最大空间大小,超过这个大小后,会根据LRU(最近最少使用)算法删除最...

    nginx_cache_purge.zip

    《Nginx Cache Purge:高效管理Web缓存的利器》 ...在日常运维中,理解并熟练运用Nginx Cache Purge,不仅能够提升网站性能,还能帮助我们在应对内容频繁更新的场景时,保持服务的稳定性和准确性。

    nginx系列(十)nginx缓存代理proxy_cacahe和CDN实现的原理

    1. **Nginx proxy_cache**:proxy_cache是Nginx的一项功能,允许服务器缓存来自上游服务器(如后端应用服务器)的响应,减少对上游服务器的请求,提高响应速度。当一个请求到达Nginx时,如果该资源已经在缓存中,...

    nginx proxy_cache批量清除缓存的脚本介绍

    由于其高性能和稳定性,Nginx在互联网上广泛用于提供静态内容服务。...不过在运行脚本之前,了解nginxproxy_cache的工作机制和脚本的执行逻辑是很有必要的,以确保可以正确处理任何可能出现的问题。

    nginx cache 学习总结 1

    【Nginx Cache 学习总结】 在Nginx中,缓存机制是一个重要的功能,它可以帮助提升网站的响应速度,减少对后端服务器的压力。本文主要总结了Nginx缓存的一些关键指令和概念。 1. **proxy_cache**: - `proxy_cache...

    squid、varnish、ngx_cache的性能测试对比报告

    尽管proxy_cache作为Nginx的一个模块,在处理磁盘IO方面可能不如专业的缓存软件,但Nginx的高并发处理能力仍为其带来了性能优势。 Squid在此次测试中的综合表现最佳,尤其在磁盘IO处理方面表现突出。这一点可能是...

    Nginx 性能优化实践1

    Nginx提供了多种机制来控制缓存的更新,如`proxy_cache_revalidate`(根据Last-Modified或ETag头验证缓存)、`proxy_cache_bypass`(决定是否跳过缓存)和`proxy_cache_lock`(防止同一资源的并发请求导致多次缓存...

    nginx的各项详细配置-超多注释

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { location /static/ { proxy_cache my_cache; proxy_cache_bypass $http_pragma; proxy_cache_revalidate on;...

    nginx笔记.zip

    通过设置`proxy_next_upstream`等指令,Nginx可以对后端服务器进行健康检查,当检测到某服务器异常时,自动将请求转发到其他健康的服务器。 **缓存功能** Nginx可以作为缓存服务器,预先加载常用资源到内存,提高...

    Nginx 应用技术指南Nginx Tips【第二版】.zip

    - **页面缓存**:学习如何配置Nginx的proxy_cache模块,实现对后端响应的缓存,提高网站响应速度。 - **缓存策略**:理解不同的缓存策略,如基于时间、大小或命中率的缓存更新规则。 7. **日志管理** - **日志...

    nginx-1.0.12_ngx-cache-purge1.5.tar.gz

    标题 "nginx-1.0.12_ngx-cache-purge1.5.tar.gz" 指的是一个包含 Nginx 版本 1.0.12 与 ngx_cache_purge 模块 1.5 的软件包。这个压缩文件(.tar.gz格式)通常用于在 Linux 或类 Unix 系统中分发开源软件,因为它...

    nginx 配置及优化

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { ... location /static/ { proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_key $scheme$...

    nginx开发指南

    proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=PROXY:10m max_size=10g inactive=60m; server { location /images/ { proxy_pass http://upstream_server; proxy_cache PROXY; proxy_cache_...

    nginx-http-flv-module-1.2.10(包含nginx-rtmp-module)

    使用`proxy_cache`设置缓存,减少服务器压力;通过`upstream`配置实现负载均衡,提高服务可用性。 6. **跨平台兼容性** 使用Nginx-http-flv-module和nginx-rtmp-module创建的流媒体服务通常能很好地在各种操作系统...

    nginx 笔记和资料

    在Linux系统中,Nginx的安装通常通过包管理器进行,例如在Ubuntu或Debian上使用`apt-get`,在CentOS或Fedora上使用`yum`或`dnf`。首先,更新包列表,然后安装Nginx: ```bash sudo apt-get update sudo apt-get ...

    nginx-1.17.4.zip

    对于CSS、JavaScript、图片等资源,Nginx能直接返回,无需经过后端应用服务器,显著提高响应速度。 5. **缓存机制**:Nginx 可以缓存HTTP响应,减少对后端服务器的压力。通过`proxy_cache`和`proxy_cache_key`等...

    nginx负载均衡配置文件demo

    在`location`块中添加`proxy_cache`指令,可以将响应结果存储在缓存中,下次相同请求可以直接从缓存返回,减少对后端服务器的压力: ```nginx location ~* \.(jpg|jpeg|png|gif|css|js)$ { proxy_cache my_cache; ...

    nginx cache不缓存问题的原因与解决方案

    另外,如果Expires头部日期早于当前时间,或者Set-Cookie头部存在,同样会导致NGINX不缓存响应内容。 要解决NGINX缓存不生效的问题,首先需要检查并确保源服务器的HTTP头部信息没有包含上述禁用缓存的指令。如果...

Global site tag (gtag.js) - Google Analytics