前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 常见headers配置

Nginx 常见headers配置

作者头像
李俊鹏
发布2020-06-12 15:09:52
14.2K0
发布2020-06-12 15:09:52
举报
文章被收录于专栏:运维研习社运维研习社

在nginx中,经常需要因为各种原因,修改header,所以今天整理下nginx中header的一些指令

header是http中的消息头,里面包含很多信息,通常又分为request headers(请求头)和response headers(响应头)

客户端向服务器发送的请求中包含请求头,服务器向客户端回复的响应中包含响应头,消息头通常是以冒号分隔的键值对

在nginx中有headers模块,其中有三条指令,分别是:

  • add_header
  • add_trailer
  • expires

expires就不用多说了,用来控制缓存时间的,证书就是缓存的时间,0或负数就是缓存无效

add_trailer和add_header一样的效果,都是在headers中添加字段,不过trailer是添加到响应头的末尾

nginx中通常就通过这三个控制response的headers信息

另外涉及到headers修改的指令,通常是在反向代理的时候,也就是proxy_pass的时候,有以下几个指令可以操作header

  • proxy_set_header
  • proxy_ignore_headers
  • proxy_pass_header
  • proxy_hide_header
  • proxy_pass_request_headers

proxy_set_header通常用的最多,可以在提交给上游服务器的header中添加或重写header,比如通常用到的,反向代理的时候,添加客户端IP、XFF等字段

proxy_ignore_headers通常用来禁用上游服务器的某些响应字段,如:

  • X-Accel-Expires
  • Expires
  • Cache-Control
  • Set-Cookie
  • Vary
  • X-Accel-Redirect
  • X-Accel-Limit-Rate
  • X-Accel-Buffering
  • X-Accel-Charset

不过根据测试发现,根本不起任何作用,写了个简单的php脚本,用proxy_pass代理,在php中用header写Expires字段

访问查看response headers

接着,用proxy_ignore_headers忽略掉Expires字段,再次请求看下效果

没有任何效果,开始以为是在php中写不行,写到上游nginx配置中尝试

访问测试,仍然没有忽略掉

生效的,仍然是后端的expires,从官方以及网上看到的文章,我理解,都是忽略上游设置的Expires

不过proxy_hide_header可以将上游响应中的header中的字段忽略掉

请求如下:

proxy_pass_header正好和proxy_hide_header相反,有些header字段nginx默认不会响应到代理,nginx官方文档中举例说Date、Server、X-Pad、X-Accel等字段,测试,同样在php中设置Server

在nginx中设置proxy_pass_header Server

proxy_pass_request_headers则是控制客户端request的header,是否传递到上游服务器,默认是开启的,也就是客户端请求携带的header,都会被转发到上游服务器,还是拿php脚本来获取request_header信息

查看访问结果:

在nginx中关闭proxy_pass_request_headers

再次获取访问结果

以上就是nginx自带的调整,设置header的一些指令,通常调整header最常见的几个场景:

  • 通过add_header添加允许跨域
  • 通过header头,设置缓存生效时间
  • 通过添加自定义header,做灰度
  • 反向代理,将自定义字段传递到后端,特别xff获取真实客户端IP

除了自带的headers模块,也可以安装第三方的headers-more模块,对应headers的控制更全面,更方便,headers-more是openresty的一个模块,openresty就自带了,nginx的话,需要编译添加动态模块

headers-more模块下载地址:https://github.com/openresty/headers-more-nginx-module

下载好之后编辑添加

通过make modules,编译动态模块文件,生成在objs目录下,将.so文件复制到modules目录下,在nginx配置文件中通过load_modules加载

这样headers-more模块就添加好了

该模块主要有4个指令:

  • more_set_headers 用于添加、修改、清除响应头
  • more_clear_headers 用于清除响应头
  • more_set_input_headers 用于添加、修改、清除请求头
  • more_clear_input_headers 用于清除请求头

headers-more相比nginx自带的headers,处理headers更方便,更灵活,所以,如果有nginx自带headers模块满足不了的需求,可以添加headers-more模块

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档