Nginx:强制上游服务器记录代理服务器的请求ID,而不是自身的请求ID。

我已经设置了一个代理服务器,将客户端请求转发到上游服务器,目前一切正常。然而,我正在尝试解决的问题是强制上游服务器记录代理服务器的请求ID。这个可能吗?只是想让你知道,上游服务器的$_SERVER变量包含[HTTP_X_REQUEST_ID] => 84708dd39a6c0c91e0d1a97404b40f75 代理服务器 配置
server {
    ...

    add_header              X-Request-ID       $request_id;
    proxy_set_header        X-Request-ID       $request_id;

    location ~ ^/api/(.*) {
        proxy_pass http://192.168.0.1:8080/$1$is_args$args;
    }

    ...
}
日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" "$request_id"';

日志

172.17.0.1 ...... "84708dd39a6c0c91e0d1a97404b40f75"

上游服务器

配置

server {
    location ~ ^/index\.php(/|$) {
        fastcgi_pass php_server:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }
}
日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" "$request_id"';

日志

172.20.0.1 ...... "172.17.0.1" "7376e0cead9741e7ec07a9194efc80e6"

预期日志

172.20.0.1 ...... "172.17.0.1" "84708dd39a6c0c91e0d1a97404b40f75"
1个回答

你实际上不希望上游服务器在$request_id中记录请求ID。相反,你希望它记录名为X-Request-ID的HTTP请求头的内容。 在这种情况下,你应该记录对应于该HTTP请求头的变量:$http_x_request_id。