Назад | Перейти на главную страницу

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

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

Однако, если возможно, я не хочу перестраивать 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