Nginx获取自定义请求header参数

自定义Header与Nginx重定向
本文介绍如何使用JQuery设置自定义HTTP请求Header,并在Nginx中通过这些Header实现请求重定向,特别关注于过滤并重定向非HTTPS请求的方法。
部署运行你感兴趣的模型镜像

一、自定义请求header (Jquery为例)

$.ajax({
	.......
	headers: { 
		Accept: "application/json; charset=utf-8", 
		TimerLocal: "Bin"  //这个是自定义的请求头
	},
	.......
});

二、在Nginx中获取请求header

在nginx的location配置中,在获取header配置时,需要在header名称前面加上固定前缀“http_“,并将header名称中的“-”中划线变为下划线,举例说明:

例如:

       自定义的header名称为X-TimerLocal,那在nginx中使用$http_x_timerlocal 来获取到X-TimerLocal的值。

if ($http_x_timerlocal  = 'BIN') {
	rewrite ^(.*/timerbin/.*)$ https://$host$1 permanent;
}

包含X-TimerLocal=BIN的header请求进行判断,如果发现路径中包含/timerbin/路径时,对请求URL进行重写,重新跳转。

三、用途

我们借助在nginx中判断自定义header方式,应用于过滤重定向非https请求。

您可能感兴趣的与本文相关的镜像

Qwen-Image-Edit-2509

Qwen-Image-Edit-2509

图片编辑
Qwen

Qwen-Image-Edit-2509 是阿里巴巴通义千问团队于2025年9月发布的最新图像编辑AI模型,主要支持多图编辑,包括“人物+人物”、“人物+商品”等组合玩法

<think>嗯,用户现在问到nginx如何携带自定义header的问题。从引用内容来看,用户应该是在配置nginx时遇到了自定义header传递的问题,可能是反向代理场景下header丢失的情况。用户之前已经看过一些资料,但引用3提到"网上搜的资料都是说用proxy_set_header,却只愿意介绍最基本的几个参数",说明用户对基础教程不满意,需要更落地的解决方案。 仔细梳理引用里的关键点:引用1提到两种场景——传递nginx自建header用proxy_set_header,传递客户端原始header用proxy_pass_header;引用2指出必须开启underscores_in_headers on来支持带下划线的header;引用4则给出了实际获取header的变量命名规则($http_x_wps...这种蛇形换)。用户真正的痛点可能在反向代理时自定义header神秘消失的问题,这通常涉及三个层面:接收、处理、发。 考虑到用户可能是运维或后端开发者,回复需要包含完整链路:首先解决nginx接收时header被丢弃的问题(下划线配置),然后区分两种不同来源header的处理方式(自建vs客户端),最后补充调试技巧。针对引用3用户的挫败感,要特别调变量命名的换规则这个易错点,比如x-api-key必须写成$http_x_api_key。 用户没有明确场景,但引用1和3都涉及proxy_set_header,大概率是反向代理配置。可以预设两个典型场景:作为入口网关时传递客户端header,作为中间代理时添加新header。调试部分准备给出三种方法:返回500显示header、记录到log、curl测试,这样用户总能选到适合的验证方式。 相关问题设计要覆盖延伸需求:引用2提到的CORS配置是常见关联问题,header命名规范和安全限制也是实际部署时容易踩的坑。用户可能还想知道如何传递给上游应用,这涉及到fastcgi_param等额外配置,但当前问题范围可暂不展开。 </think>以下是 Nginx 携带自定义 Header 的完整解决方案,综合引用信息并补充关键细节: --- ### 一、携带自定义 Header 的两种场景 #### 1. **接收客户端自定义 Header** 当客户端请求携带自定义 Header(如 `curl -H "X-API-KEY:123"`)时: ```nginx http { # 开启下划线支持(必需) underscores_in_headers on; # [^2][^4] server { location / { # 获取客户端自定义 Header(变量名规则): # 格式:$http_头名(大写小写,"-""_") set $api_key $http_x_api_key; # 获取 X-API-KEY [^4] # 传递到上游服务(默认不传递自定义 Header) proxy_pass http://backend; proxy_pass_header X-API-KEY; # 显式允许传递 [^1] } } } ``` #### 2. **Nginx 自行添加 Header** 在反向代理中添加新 Header: ```nginx location / { proxy_pass http://backend; # 添加静态值 Header proxy_set_header X-Forwarded-By "Nginx"; # 添加动态值 Header(如客户端原始域名) proxy_set_header X-Client-Domain $http_host; # [^1][^3] } ``` --- ### 二、关键配置说明 1. **下划线支持** ```underscores_in_headers on;``` 必须声明在 `http{}` 块,否则 Nginx 会忽略带下划线的 Header(如 `X_API_KEY`)[^2][^4]。 2. **变量命名规则** - 客户端 Header `X-API-KEY` → Nginx 变量 `$http_x_api_key` - 客户端 Header `User-Token` → `$http_user_token` (全小写 + `-` `_`)[^4] 3. **传递客户端 Header** 使用 `proxy_pass_header Header名;` 显式发,否则默认丢弃[^1]。 --- ### 三、调试技巧 #### 1. 验证 Header 是否被接收 ```nginx location /debug { # 直接返回 Header 值(测试用) return 200 "API Key: $http_x_api_key"; # [^4] } ``` #### 2. 查看日志记录 ```nginx log_format main '$remote_addr - $http_x_api_key'; access_log /var/log/nginx/access.log main; ``` #### 3. 测试命令 ```bash curl -H "X-API-KEY: test123" http://your-domain.com/debug ``` --- ### 常见问题解决 - **Q:配置了 `proxy_set_header` 但上游未收到?** A:确保未使用 `underscores_in_headers off;`(默认值),且 Header 名无下划线时无需此配置[^3]。 - **Q:反向代理后 Header 丢失?** A:检查是否遗漏 `proxy_pass_header` 或 `proxy_set_header`[^1][^3]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值