Nginx 中常见 header 配置及修改

nginx中 add_header与more_set_headers 的区别总结 在 Nginx 配置中,add_header和都用于向响应中添加 HTTP 头部,但它们的行为和使用场景有所不同。 阅读详情
AI摘要

本文介绍了Nginx中处理HTTP Header的指令,包括add_header、add_trailer、expires等,以及在反向代理时的proxy_set_header、proxy_ignore_headers等。文章还探讨了proxy_pass_header和proxy_hide_header的区别,并提到了headers-more模块的使用,以实现更灵活的Header管理。

在 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 模块

Nginx 如何处理请求中的自定义标头? 在网络世界的广袤天地中,Nginx 就如同一位精明能干的交通指挥员,有条不紊地处理着来来往往的请求。而请求中的自定义标头,就像是包裹上的特殊标签,蕴含着独特的信息。那么,Nginx 是如何巧妙应对这些自定义标头的呢?这就像是解开一个神秘的谜题,让我们一同探索。想象一下,你在寄快递的时候,除了填写收件人和寄件人的基本信息,还额外在包裹上贴了一张纸条,上面写着“加急”或者“易碎物品”等特殊说明。 阅读详情

相关推荐

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

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

lindiwo的博客 2128

小话nginx实战

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

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的博客 6707

(八)nginx反向代理功能

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

Spider_xiaoma的博客 2538

Unity PSD分层导入插件ps2d原理与实战指南

PSD作为UI设计主流源文件,其图层结构、混合模式、文字矢量属性等核心语义在传统引擎导入中普遍丢失,导致设计还原度低、多语言适配难、运行时不可控。ps2d通过深度解析PSD二进制规范,将图层映射为GameObject树、文字转为TextMeshPro可编辑组件、形状生成矢量Mesh、蒙版与图层样式编译为定制Shader,实现设计意图的精准程序化表达。该方案显著提升UI开发效率,支撑高保真还原、动态修改、分辨率自适应及运行时热重载等工程需求,是Unity中连接设计师与程序员的关键工作流中枢。

weixin_32943857的博客 348

均匀直线阵的常规波束形成matlab

常规波束形成概述 波束形成是将基阵各阵元输出进行一定的处理,从而形成基阵空间指向性的技术。一个波束形成器可以对空间某方位的信号有响应,而抑制其他方位的信号,所以又被称为空域滤波。一般分为常规波束形成(CBF)和自适应波束形成(ABF)。 常规波束形成较为基础,一般又可以根据实现的途径不同,分为时延波束形成和频移波束形成。 时延波束形成 在各阵元间添加时延使波束控制于不同方位的方法成为时延波束形成。设定一个目标方向,当信号来源方向在该目标方向时,响应最大;信号来源于其他方向时,响应较小。将这种响应大小

Xujing1143的博客 2万+

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

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

Nazir2513的专栏 5926

在VSCode中使用LaTex+(grammarly语法检测,chatgpt翻译,Sumatra PDF 轻量级pdf阅读器)

整个文章分为以下几个内容,打 * 的是必须要安装的。

u011895157的博客 2万+

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

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

weixin_34128237的博客 4616

Windows下Nginx发布DEM地形瓦片数据全流程(含Cesium调用避坑指南)

本文详细介绍了在Windows环境下使用Nginx发布DEM地形瓦片数据的完整流程,并提供了Cesium前端调用的详细配置与避坑指南。重点讲解了Nginx的核心配置、跨域问题解决以及CesiumTerrainProvider的关键参数设置,帮助开发者快速搭建本地地形服务,实现高效的三维地形可视化。

weixin_29212867的博客 435

GPMC开发笔记(TI开发者推荐笔记)

因为gpmc(General-Purpose Memory Controller)是TI特有的驱动,gpmc的资料比较少,本人开发gpmc驱动算是摸了很多石头过河的。所以想通过这遍文章可以给也做GPMC驱动开发的后来者有一点参考价值。文章如有瑕疵也请各位批评改正。 1.GPMC介绍 gpmc主要用于与nandflash,norflash,fpga进行通信。在这里主要介绍gpmc16位数据和地址线不复用nor模式下的通信。 注意:在这种模式下gpmc_a[0]引脚是没法使用的 1.1GPMC信号线

weixin_44316996的博客 7509

nginx java header 获取不到

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

qq_30333355的博客 329

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2603

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

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

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

【时空图神经网络 & 交通】相关模型3:STFGNN | 空间-时间依赖性 | 基于数据驱动的方法来生成“时间图” | 时空融合图模块,门控卷积模块 | 动态时间规整 | 顶会文章解析

STFGNN(时空融合图神经网络)在交通流量预测中的优势主要体现在以下几个方面:首先,它提出了一种数据驱动的方法生成“时间图”,弥补了传统空间图可能无法反映的某些相关性。其次,STFGNN通过并行处理不同时间段的空间图和时间图,有效地学习隐藏的时空依赖关系。此外,它将融合图模块与门控卷积模块整合到一个统一层中,通过层层堆叠处理长序列,进一步增强了模型的表达能力。实验结果表明,STFGNN在多个交通数据集上表现出色,优于其他基准方法,展示了其在实际应用中的强大潜力。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 386

手把手教你学simulink实例--基于Simulink的轨道交通车辆悬挂系统仿真

轨道交通车辆悬挂系统是保证列车运行平稳性、舒适性和安全性的重要组成部分。通过悬挂系统的合理设计,可以有效减小车辆在运行过程中受到的轨道不平顺和振动影响。基于MATLAB/Simulink平台进行悬挂系统仿真,可以对悬挂系统的动力学行为、控制策略以及性能优化等环节进行建模与分析,从而验证系统的设计性能并优化参数。本项目旨在构建一个完整的轨道交通车辆悬挂系统仿真模型,包括悬挂系统动力学建模、控制策略模块以及性能评估模块,并通过仿真验证系统的稳定性和舒适性。

MHD0815的博客 1034

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

weixin_34174105的博客 2277

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

通过Nginx定义Header头信息

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

流風餘韻的专栏 9174

springcloud gateway nginx header 丢失

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

lvzhyt的专栏 1906

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

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

681

Nginx: proxy_set_header 与 add_header 区别

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

Wang的专栏 3214

Nginx 自定义header

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

刘涛的博客 465

宝塔Nginx设置图片访问跨域

宝塔Nginx设置图片访问跨域

A-南的博客 1209

nginx header 下划线问题

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值