Похоже, для этого есть пара сторонних модулей
Однако, если возможно, я не хочу перестраивать nginx, что, как я считаю, является обязательным требованием для использования обоих этих модулей. Моя первая попытка заключалась в том, чтобы использовать $msec
с участием $pid
однако это не сработало (у меня был процесс, обслуживающий два запроса за одну миллисекунду). Я читал о $connection
и кажется, что это будет работать вместе с $msec
. Будет ли это работать или есть лучший способ без использования сторонних модулей?
Обновление для nginx версии v1.11 (май 2016 г.):
http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id
Ты можешь использовать $request_id
:
уникальный идентификатор запроса, сформированный из 16 случайных байтов в шестнадцатеричном формате (1.11.0)
Ты можешь использовать 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
Мы используем это в производстве и очень довольны улучшенной трассировкой наших серверных служб.
Если вы можете использовать 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