似乎有几个第三方模块可以实现这一点
但是如果可能的话,我不想重建 nginx,我认为这是使用这两个模块的必要条件。我最初尝试使用$msec
但$pid
没有成功(我有一个进程在同一毫秒内处理两个请求)。我读过$connection
并且似乎可以与 一起使用$msec
。这会起作用吗?或者有没有更好的方法,而无需使用第三方模块?
答案1
nginx 版本 v1.11(2016 年 5 月)更新:
http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id
您可以使用$request_id
:
由 16 个随机字节生成的唯一请求标识符,十六进制(1.11.0)
答案2
您可以使用nginx-extras
并使用嵌入式 Perl 或 Lua。
$ sudo apt-get install libossp-uuid-perl
在你的 nginx 配置中:
perl_require "Data/UUID.pm";
perl_set $request_uuid 'sub {
my $ug = new Data::UUID;
return $ug->create_str();
}';
然后对于给定的location
:
proxy_set_header Request-Id $request_uuid
我们正在使用这在生产中并且对我们后端服务的更好的跟踪感到非常高兴。
答案3
如果你可以使用nginx-extras或者perl在 nginx 中。
然后您可以使用设置请求变量perl_set
perl_set $uuid 'sub {
return join "", map{(a..z,A..Z,0..9)[rand 62]} 0..7;
}';
如果您需要更多详细信息: http://yozik04.blogspot.com/2014/12/nginx-request-id-using-perl.html