nginx 获取header
Nginx获取HTTP头的实用指南:从基础配置到场景应用
在Web服务架构中,HTTP请求头(Header)承载着大量关键信息——从用户设备型号到访问来源,从认证令牌到代理链信息。作为反向代理与负载均衡的核心工具,Nginx如何高效捕获并利用这些头信息?本文将结合3类典型场景,拆解Nginx获取请求头的配置逻辑与实战技巧。
一、为什么要获取HTTP头?
在实际应用中,HTTP头是实现业务逻辑的"隐形钥匙"。比如:
- 安全验证:通过
Authorization头校验JWT令牌,过滤非法请求; - 流量控制:根据
User-Agent区分设备类型,对移动端返回适配页面; - 调试排查:通过
X-Forwarded-For定位请求经过的代理节点,快速定位问题; - 日志审计:记录关键头信息(如
Referer),为合规审计提供数据支撑。
Nginx通过内置变量系统,无需额外开发即可实现对HTTP头的读取与处理,这也是其成为Web架构中"头信息管理专家"的核心原因。
二、基础语法:Nginx如何读取请求头?
Nginx中,HTTP请求头以$http_为前缀,拼接头名(小写化+下划线替换连字符)形成变量。例如:
User-Agent→$http_user_agentX-Forwarded-For→$http_x_forwarded_forReferer→$http_referer
注意:
- 头名需严格匹配原始HTTP头的大小写(如
X-Forwarded-For不能写成X-Forwarded-for); - 变量名仅支持字母、数字、下划线,不允许空格或特殊字符(如
X-API-Key需写成$http_x_api_key)。
三、三大场景实战配置
场景1:根据请求头动态处理业务逻辑
需求:识别用户设备类型(手机/PC),返回对应页面。
server {
listen 80;
server_name example.com;
location / {
# 判断设备类型:提取User-Agent并匹配关键词
if ($http_user_agent ~* "Mobile|Android|iPhone|iPad") {
return 200 "移动端专属页面";
}
return 200 "PC端标准页面";
}
}
原理:通过正则匹配$http_user_agent,对移动端用户返回差异化内容,提升用户体验。
场景2:日志记录关键请求头信息

需求:排查请求异常时,快速获取头信息辅助调试。
http {
# 自定义日志格式,包含关键头信息
log_format main '$remote_addr [$time_local] '
'request:$request '
'ua:$http_user_agent '
'xff:$http_x_forwarded_for';
server {
access_log /var/log/nginx/access.log main;
location /api/user {
proxy_pass http://backend;
}
}
}
效果:日志中会记录类似ua:Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15的设备信息,帮助定位移动端请求问题。
场景3:反向代理中传递自定义头
需求:后端微服务需通过X-API-Token头获取认证信息,Nginx作为代理需转发该头。
server {
listen 80;
location /api/ {
# 显式传递原始请求头
proxy_set_header X-API-Token $http_x_api_token;
# 传递关键头(Host、User-Agent默认由Nginx自动转发)
proxy_set_header Host $host;
proxy_pass http://backend-service;
}
}
关键:若未显式配置proxy_set_header,Nginx会自动转发Host、User-Agent等基础头,但自定义头(如X-API-Token)需手动添加,否则后端将无法识别。
四、进阶技巧与避坑指南
- Cookie处理:Nginx通过
$cookie_前缀读取Cookie,例如$cookie_sessionid可获取用户会话ID。 - 头名规范:避免使用Nginx保留关键字(如
Referer、Accept-Language),若需自定义头,建议以X-为前缀(符合HTTP标准)。 - 性能考量:频繁获取
User-Agent等大体积头可能增加内存占用,可通过limit_req或log_by_lua(OpenResty扩展)优化。 - 安全风险:禁止直接暴露敏感头(如
Authorization)到前端页面,需通过if或auth_request模块过滤后再传递。
五、总结
从基础的$http_*变量读取,到日志审计、反向代理,Nginx对HTTP头的处理能力贯穿Web架构全链路。掌握这一技能,不仅能快速解决设备识别、安全验证等业务问题,更能通过精准的头信息管理优化系统性能。建议结合实际场景尝试配置,并通过nginx -t验证语法,逐步熟悉ngx_http_headers_module的变量体系。
延伸学习:若需更复杂的头信息过滤(如基于IP段的X-Forwarded-For校验),可结合geoip模块或Lua扩展实现。Nginx的灵活性,正是其在云原生时代持续被推崇的核心原因。

上一篇





