Есть ли способ зарегистрировать уникальный идентификатор для каждого запроса для nginx?

12

Похоже, есть пара сторонних модулей для этого

Однако, если возможно, я не хочу перестраивать nginx, что, как я считаю, является обязательным условием для использования обоих этих модулей. Моя первая попытка была использовать $msecс , $pidоднако , что не получилось ( у меня был процесс обслуживать два запроса на одной и той же миллисекунды). Я читал о, $connectionи кажется, что это будет работать в сочетании с $msec. Будет ли это работать или есть лучший способ без использования сторонних модулей?

Джон
источник

Ответы:

10

Обновление для версии nginx v1.11 (май 2016 г.):

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id

Вы можете использовать $request_id:

уникальный идентификатор запроса, сгенерированный из 16 случайных байтов в шестнадцатеричном формате (1.11.0)

user5994461
источник
Для старой версии (<= 1.2.7) вы можете использовать что-то вроде «$ pid- $ date_local», которое должно быть достаточно уникальным для большинства случаев использования.
Bactisme
6

Вы можете использовать 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

Мы используем это в производстве и очень довольны лучшим отслеживанием, которое мы имеем через наши внутренние сервисы.

jabley
источник
1

Если вы можете использовать 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

Евгений Киски
источник