透传客户端浏览器特征画像需完整传递User-Agent、Accept-Language、Sec-CH-UA系列、DNT、Upgrade-Insecure-Requests及Sec-Fetch-*等关键请求头,Nginx仅负责准确转发,后端结合行为日志等构建画像。

透传客户端浏览器特征画像,本质是把能反映用户终端环境的关键请求头完整、准确地交给后端,而不是“画一个像”。Nginx 本身不生成画像,只负责传递原始信号。真正做画像的是后端服务——它结合 User-Agent、Accept-Language、Sec-CH-UA 等字段,再叠加行为日志、设备指纹等,才能构建出可用的画像。
必须透传的核心浏览器标识头
以下字段默认已透传,但需确认未被覆盖或清除:
-
User-Agent(UA):Nginx 默认透传,等效于
proxy_set_header User-Agent $http_user_agent;。无需额外配置,除非你要改写(如加“(via Nginx)”标记) -
Accept-Language:反映用户语言偏好,直接透传即可:
proxy_set_header Accept-Language $http_accept_language; -
Sec-CH-UA 系列(Chrome UA Client Hints):现代浏览器(Chromium 101+)用这些替代部分 UA 信息,更细粒度且可选。需显式透传:
proxy_set_header Sec-CH-UA $http_sec_ch_ua;<br> proxy_set_header Sec-CH-UA-Mobile $http_sec_ch_ua_mobile;<br> proxy_set_header Sec-CH-UA-Platform $http_sec_ch_ua_platform;
可选增强:补充上下文维度
单靠 UA 不足以支撑高质量画像,建议同步透传以下字段,供后端关联分析:
-
DNT(Do Not Track):
proxy_set_header DNT $http_dnt;,辅助判断用户隐私倾向 -
Upgrade-Insecure-Requests:
proxy_set_header Upgrade-Insecure-Requests $http_upgrade_insecure_requests;,反映客户端对 HTTPS 的支持态度 -
Sec-Fetch-* 系列(如 Sec-Fetch-Site、Sec-Fetch-Mode):有助于识别请求来源(站内跳转 / 外链 / iframe),增强场景还原能力:
proxy_set_header Sec-Fetch-Site $http_sec_fetch_site;<br> proxy_set_header Sec-Fetch-Mode $http_sec_fetch_mode;<br> proxy_set_header Sec-Fetch-Dest $http_sec_fetch_dest;
注意事项与验证要点
透传不是“全量转发”,而是有选择、有保障地传递:
- 所有
proxy_set_header必须放在location块中、proxy_pass行之前;重复设置同名 header 时,仅最后一条生效 - 避免手动覆盖关键头为固定值(如
proxy_set_header User-Agent "Unknown"),会丢失真实信号 - 若前端经过 CDN 或 WAF,部分 Client Hints 可能已被剥离(尤其非安全上下文下),需检查链路是否支持并启用
Permissions-Policy: ch-ua=*等响应头 - 验证方法:用 curl 模拟带 Client Hints 的请求,或在 Chrome DevTools 的 Network 面板中查看原始请求头,并比对后端日志中接收到的值是否一致











