Nginx 中常见 header 配置及修改

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

在 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 模块下载地址:GitHub - openresty/headers-more-nginx-module: Set, add, and clear arbitrary output headers in NGINX http servers

下载好之后编辑添加

通过 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 模块

openresty headers-more-nginx使用 阅读详情

相关推荐

Nginx: proxy_set_header 与 add_header 区别

proxy_set_header 和 add_headerNginx 配置中两个不同的指令, 它们各自有不同的用途 proxy_set_header 指令用于修改转发到代理服务器(通常是后端应用服务器)的 HTTP 请求头 它允许您设置或覆盖请求头中的字段,以便后端服务器能够接收正确的信息或根据这些信息做出响应 例如,有时可能会使用 proxy_set_header 来设置 Host 头,这样后端服务器就知道它正在为哪个域名提供服务 有时候,还可以设置 X-Real-IP 和 X-Forwarded-

Wang的专栏 3142

nginx安全基线检测

1.Nginx后端服务指定的Header隐藏状态 隐藏Nginx后端服务X-Powered-By头 加固建议 隐藏Nginx后端服务指定Header的状态: 1、打开conf/nginx.conf配置文件(或主配置文件中的inlude文件); 2、在http下配置proxy_hide_header项; 增加或修改为 proxy_hide_header X-Powered-By; proxy_hide_header Server; 2.Nginx的WEB访问日志记录状态 应为每个核心站点启用access

Bertram的博客 6692

Nginx 无法获取header中自定义的带下划线的参数解决方法

今天现学现卖,现记一个关于nginx的问题解决方法。 今天遇到一个后台无法获取数据的问题。在公司同事的指导下,才知道是因为nginx由于后台无法访问带下划线的自定义在header中的参数,需要修改配置。需要在nginx配置修改underscores_in_headers的属性,因为该属性默认为off,表示如果header_name中包含下划线,忽略掉。 所以需要进入nginx文件夹下面的c...

lindiwo的博客 2124

小话nginx实战

1.通过学习可以掌握nginx实用功能2.通过学习可以掌握nginx各模块在生产环境中使用场景

(八)nginx反向代理功能

nginx反向代理概念 反向代理也称reverse proxy,指的就是代理外网用户请求到内部指定web服务器,并将数据返回给用户的一种方式。 nginx除了可以在企业提供高性能的web服务之外,另外还可以将本身不具备的请求通过某种预定的协议转发至其他服务器处理,不同的协议就是nginx服务器与其他服务器进行通信的一种规范,主要在不同场景使用以下模块实现不同的功能。 ngx_http_proxy_module: 将客户端的请求以http协议转发至指定服务器进行处理。 ngx_stream_proxy_

Spider_xiaoma的博客 2532

nginx做转发时,带'_'的header内容丢失

nginx做转发时,带’_’的header内容丢失原本在测试环境测试通过的APP,今天准备切到线上环境做最后测试,结果发现了错误。查看日志发现是APP端发送的http请求中的header内容丢失了。那么代码没有改动,怎么平白无故会丢失头信息? 于是想到两个环境的不同之处在于线上是通过nginx做的代理转发,会不会是nginx搞的鬼?于是搜索“nginx request header 丢失”,果不其

Nazir2513的专栏 5920

Nginx Header,实现对HTTP/S请求、响应进行添加、修改、删除等操作

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34128237的博客 4613

nginx java header 获取不到

原来是nginx默认不支持下划线的传参。但是部署到服务器获取不到了。前端header设置了。本地调试能获取到参数值。

qq_30333355的博客 328

关于nginx请求头中有下划线_的坑

1,前言 风平浪静的下午,一个前端开发同事找到我,说感觉好像nginx那边有一些转发并没有到达后端。 我问,怎么了? 她说的也非常具体,第一是常规访问服务,然后返回的状态是401,提示令牌失效(Token Invalid )。接着直接访问后端所代理的服务,然后就是正常的。 哦,听上去很明显啦,事儿就是到nginx这里卡住了呗。我问她详细的情况是怎样的? 她说获取验证码以及登陆都是没有问题的,但是就是这里的token没有传过去,token是放在请求头里边的,这个头的名称是“old_token”。 听上去一切好

因上努力,果上随缘。但行好事,莫问前程。 5217

nginx 代理之修改header 的HOST,实现代理转代理

现有一个需求,需要从nginx跳转到k8s的traefik代理上,从而实现服务的访问,用于测试。直接修改proxy_set_header的HOST,修改为traefuk代理的域名,proxy_pass是traefik的代理地址. server { listen 80; server_name kbe.get.com; location ...

weixin_30552635的博客 1082

html读取nginx定义header,通过Nginx定义Header头信息

导读通过修改nginx的conf文件,轻松达到自定义HTTP Header的目的。Nginx 使用 ngx_headers_more 模块来增加、删除出站、入站的 Header 信息。默认该模块没有加入到 Nginx 的源码中,要想使用相关功能需要在编译 Nginx 时加入该模块。本人服务器中的 Nginx 在编译时没有加入该模块,使用 -V 查看当前 Nginx 的编译参数:[root@z-di...

weixin_29883867的博客 315

nginx反向代理proxy_set_header自定义header头无效

为什么80%的码农都做不了架构师?>>> ...

weixin_34174105的博客 2273

通过Nginx定义Header头信息

通过修改nginx的conf文件,轻松达到自定义HTTP Header的目的。

流風餘韻的专栏 9172

springcloud gateway nginx header 丢失

springcloud gateway nginx header 丢失 1、默认的情况下nginx引用header变量时不能使用带下划线的变量。要解决这样的问题只能单独配置underscores_in_headers on; 2、默认的情况下会忽略掉带下划线的变量。要解决这个需要配置ignore_invalid_headers off。 不使用带下划线的header 或者修改nginx 配置 ...

lvzhyt的专栏 1903

nginx做转发时,带'_'的header内容丢失(转发)

转发:https://blog.csdn.net/Nazir2513/article/details/70889319 原本在测试环境测试通过的APP,今天准备切到线上环境做最后测试,结果发现了错误。查看日志发现是APP端发送的http请求中的header内容丢失了。那么代码没有改动,怎么平白无故会丢失头信息? 于是想到两个环境的不同之处在于线上是通过nginx做的代理转发,会不会是ng...

680

Nginx 自定义header

场景:微服务部署到 k8s nginx 在处理header 时收取不到值 解决方案: 修改nginx nginx.conf 配置文件 加入如下的内容: underscores_in_headers on; proxy_pass_header header_key ...

刘涛的博客 463

宝塔Nginx设置图片访问跨域

宝塔Nginx设置图片访问跨域

A-南的博客 1207

nginx header 下划线问题

关键字: 问题描述: 通过nginx反向代理到tomcat,自定义Header中,其中带下划线的Hdader在tomcat应用中获取不到,类似于n_name/cookie_sig这样的名称; 处理办法: 1:配置中http部分 增加underscores_in_headers on; 配置 2:用减号-替代下划线符号_,避免这种变态问题。nginx默认忽略掉下划线可能有些原因。 原因(...

春泥夏花的专栏 3795

nginx反向代理proxy_set_header自定义header头无效的问题

###案例1 环境nginx,linux,tomcat 域名访问是走nginx给后端服务器处理的, 问题是域名经过nginx访问直接不能获取到headers,直接tomcat访问可以 那么问题肯定在nginx上无法处理headers的问题了, 经过查询上面资料得到是nginx的锅,hearders有下划线的锅,nginx设置underscores_in_...

weixin_34221276的博客 2994
上一篇: 一文搞懂Redis持久化
下一篇: Linux面试题(总结最全面的面试题)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值