在 nginx 中,使用 proxy_set_header 指令可以直接向被代理的后端服务器发送自定义的标识头。只需在 location 或 server 块中指定新的头部名称和对应的值即可,nginx 会将其包含在转发给后端的 http 请求中。

如何配置静态值的自定义 Header
为所有经过该位置的请求添加一个固定的自定义标识头,例如 X-Request-Source,其值为 Nginx-Proxy。这通常用于后端服务识别流量来源。

server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend_server;
# 添加静态自定义头
proxy_set_header X-Request-Source "Nginx-Proxy";
}
}上述配置中,当客户端访问 /api/ 时,Nginx 会将 X-Request-Source: Nginx-Proxy 添加到请求头中发送给 backend_server。后端接收到请求后,可以通过解析 HTTP 头部获取该值。
如何结合变量动态设置 Header
如果需要基于请求的某些属性(如时间戳、IP 地址)生成动态的标识头,可以在 proxy_set_header 中使用 Nginx 内置变量。例如,添加一个包含当前毫秒级时间戳的 X-Timestamp 头。

server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend_server;
# 添加动态时间戳头
proxy_set_header X-Timestamp $msec;
}
}在此配置中,$msec 是 Nginx 提供的内置变量,表示请求到达时的秒和小数部分(例如 1678886400.123)。每次请求都会生成不同的时间戳值并作为 X-Timestamp 头的值传递给后端。这种方式适用于需要追踪请求处理时间的场景。
如果同时设置了同名 Header 会发生什么
如果在同一个配置层级(如 location)中多次使用 proxy_set_header 设置相同的头部名称,后定义的规则会覆盖先前的定义。Nginx 不会合并这些值,而是保留最后一个生效的值。例如,若先设置 X-Source: A,再设置 X-Source: B,后端最终收到的是 X-Source: B。因此,确保每个自定义头只在一个位置明确设置,避免冲突。


















