博客
关于我
Nginx - Header详解
阅读量:798 次
发布时间:2023-02-15

本文共 1933 字,大约阅读时间需要 6 分钟。

HttpHeadersModule 模块:HTTP 头设置与缓存机制

前言

通过 HttpHeadersModule 模块,可以对HTTP响应头进行设置。这种设置主要用于控制缓存行为,但需要注意以下几点:

  • 不能重写已存在的头(如 Last-Modified),只能添加新的头。
  • 设置的有效性依赖于HTTP状态码,仅在200、204、301、302或304状态下生效。
  • Cache-Control 相比,expires 的优先级较低,且两者可以共存,但 Cache-Control 的效果优先。
  • HttpHeadersModule 模块

    2.1 指令

    add_header 指令

    • 语法add_header name value
    • 默认值:无
    • 使用环境httpserverlocation
    • 功能:为HTTP响应添加自定义头。

    expires 指令

    • 语法expires [modified] time | epoch | max | off;
    • 默认值expires off
    • 使用环境httpserverlocationif in location
    • 功能
      • off:阻止修改 ExpiresCache-Control 头。
      • max:设置 Expires 为2037年,并将 Cache-Controlmax-age 设为10年。若设置为时间值或非负数,max-age 会转换为秒数。
    • 注意expires 优先级低于 Cache-Control

    2.2 缓存机制

    Cache-Control

    • 定义:控制缓存机制。
    • 常见取值
      • no-cache:数据不可缓存,每次请求重新获取。
      • no-store:不允许缓存,包括临时存储。
      • private:仅在浏览器缓存,第一次请求后不重新获取(若有 max-age)。
      • public:可在所有缓存区存储。
      • max-age:缓存时间(秒)。

    Last-Modified

    • 功能:记录资源的最后修改时间。
    • 工作流程:1.客户端第一次请求,服务器返回 Last-Modified 头。2.客户端在下一次请求时,发送 If-Modified-Since 头,询问是否有修改。3.服务器判断是否有修改,如果无修改返回 304 Not Modified

    ETag

    • 功能:为资源生成实体标记。
    • 工作原理:1.客户端收到 ETag 后,下一次请求发送 If-None-Match 头。2.服务器检查 ETag 是否匹配,如果不匹配返回 304
    • 注意:在分布式系统中,ETag 不建议使用,因其可能导致比对失败。

    2.3 缓存机制优化

    expires 与 Cache-Control

    • 优先级Cache-Control 高于 expires
    • 注意:在配置中,Cache-Controlmax-age 优先生效。

    Last-Modified 与 expires

    • 组合使用Last-Modified 主要用于减少数据传输量,而 expires 控制缓存期限。
    • 客户端行为
      • 按下刷新键,会发送新的 HTTP 请求。
      • 手动关闭浏览器或切换标签页,会清空缓存。

    ETag 与 Last-Modified

    • 使用场景
      • ETag 适用于资源版本控制,但在分布式环境下可能导致跨服务器比对失败。
      • Last-Modified 更适合精确控制缓存时间,且与 expires 结合使用效率更高。

    2.4 示例

    location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ {    expires 30d;}location ~.*\.(js|css)?$ {    expires 12h;}

    2.5 浏览器缓存行为

    • 默认缓存:浏览器默认以 Cache-Control: private 为标准,仅在浏览器中存储缓存。
    • 控制策略
      • Cache-Control: no-cache:强制每次请求重新获取数据。
      • Cache-Control: no-store:禁止临时存储。

    2.6 注意事项

    • 服务器集群:在分布式系统中,Last-ModifiedETag 需要保持一致,否则可能导致 304 错误。
    • 客户端操作:浏览器缓存行为受用户操作影响,如手动刷新或关闭标签页会清空缓存。

    总结

    通过合理配置 HttpHeadersModule 模块的 add_headerexpires 等指令,可以有效控制HTTP缓存行为。理解 Cache-ControlLast-ModifiedETag 等头的作用及其组合使用,是优化网站性能的关键。同时,注意分布式环境下的潜在问题,确保服务器集群下的缓存一致性。

    转载地址:http://kocfk.baihongyu.com/

    你可能感兴趣的文章
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>