网站首页 > 技术教程 正文
Nginx常用模块---ngx_http_headers_module设置HTTP响应头
HTTP头信息,是实际业务中一个很重要的功能。例如,如果需要将请求结果在浏览器上缓存一段时间,或者在请求代理到后端服务器的过程中生成一个唯一的 ID进行识别。通过对 Nginx进行配置,可以轻松实现这些功能。
ngx_http_headers_module是在 Nginx编译时默认自带的模块,主要包含 add_header和 expires两个指令。
使用语法
expires
expires语法: expires [modified] time; expires epoch | max | off; 默认值: expires off; 环境: http、 server、 location、 if in location 用途:设置 Expires和 Cache-Control响应头字段,主要作用是控制缓存时间,如在浏览器上的缓存时间、 CDN的缓存时间。参数值可以是正数、负数或零;
示例如下:
如果要求在浏览器第一次访问后,数据在浏览器上缓存 1h,则配置如下:
此配置只能在 HTTP状态码是 200、 201、 204、 206、 301、 302、 303、 304、 307或 308时才会生效。
即只有当请求处于正常的返回状态时,才会发送缓存头,毕竟在浏览器上缓存一个错误状态不是什么好事情。
在 Nginx 1.7.9版本之后, expires指令可以使用变量来配置响应头,并根据响应头的 Content-Type来定义缓存时间,也就是可以根据不同的条件动态地调整缓存时间。
例如,如果 Content-Type是 application/ pdf,则添加 cache-control: max-age = 3600响应头信息;如果 Content-Type是 image/,则添加 ache-control: max-age = 36000响应头信息;如果没有匹配到对应的 Content-Type,则执行 default的配置 off,即不进行缓存,代码如下:
在上述配置中, map指令会根据响应头 Content_ Type的值对 $expires进行赋值(通过 $ sent_ http_ content_ type获取 Content-Type的值)。
add_ header
语法: add_ header name value [always]; 默认值:无 环境: http、 server、 location、 if in location 用途:添加自定义的响应头。
例如,可以用来添加 Cache-Control响应头,以达到 expires指令的效果,不过它不如 expires那样简洁、明了,
示例如下:
在默认情况下, add_ header只能在 HTTP状态码是 200、 201、 204、 206、 301、 302、 303、 304、 307或 308时输出响应头,如果出现 404、 500等异常状态码则无法输出响应头。
但 Nginx 1. 7. 5以上的版本新增了 always参数,使之可以在任何 HTTP状态下输出响应头,示例如下:响应头信息输出如下:测试结果表明,即使发生了 500错误,加入 always参数后依然可以输出 add_header响应头信息。
实战经验
添加请求头有很多需要注意的地方,下面是在长期使用中总结的一些经验,供参考。
- 关于指令 expires 1h
expires 1h表示在浏览器上的缓存时间是 1h,但如果缺少 Last-Modified响应头(文末有说明),大部分浏览器不会使用缓存。在业务代码生成过程中,部分代码可能没有使用规范的框架输出数据,因此可能会缺少 Last-Modified信息,无法在浏览器上进行缓存,但请求仍会回源到服务器上,导致带宽压力增大。因此负责网络带宽和用户体验的技术人员要对使用规范进行说明和管理,避免出现缓存效果不理想的情况。
- 关于指令 add_ header
如果使用 always参数,那么即使在业务出现异常时,也会输出 add_ header响应头信息,因此要慎重使用此参数。另外,如果后端服务器在返回响应体时返回了一个和 add_ header相同的响应头,则会导致两个响应头重复输出到浏览器上,从而引起不必要的 Bug
关于Last-Modified的说明:
猜你喜欢
- 2024-10-10 Nginx之gzip模块(nginx配置gzip压缩)
- 2024-10-10 Nginx源码分析之模块初始化(初始化nginx命令)
- 2024-10-10 Nginx的Gzip模块配置指令(二)(nginx gzip json)
- 2024-10-10 nginx随机模块——ngx_http_random_index_module
- 2024-10-10 写一个Nginx的模块没有那么难(nginx 模块开发)
- 2024-10-10 Nginx模块主要有三种角色(nginx模块主要有三种角色和什么)
- 2024-10-10 后端开发组件,nginx从模块开始,让你对nginx有全新的理解
- 2024-10-10 12、Nginx模块配置应用——模块概述
- 2024-10-10 了解Nginx模块开发与架构,看这一篇就够了,图表齐全通俗易懂
- 2024-10-10 nginx有哪些模块(nginx有哪些功能)
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)