ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mod_uid - значения переменных $uid_got и $uid _set пропадают


  • To: nginx-ru@xxxxxxxxx
  • Subject: mod_uid - значения переменных $uid_got и $uid _set пропадают
  • From: "Anatoly Matyakh" <protopartorg@xxxxxxxxx>
  • Date: Wed, 07 Feb 2007 05:47:14 +0200
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:date:to:subject:from:organization:content-type:mime-version:content-transfer-encoding:message-id:user-agent; b=cPYJKhK8tWnmIUhnD9KGa5IVj2zgYPnoMdlrOhcs5TMG9Od5HL2ptfmbf2sZ30tv4xvg1XcmVucLkGXx+5yAbGvI7n7r6FiKNiCzH2uiQUv0Fu/cWeiq7/nLOkWouWG0nRT0+iGC+SJSAkOqfeCFpF/sS2B1GTkx5D9VuIpNdN0=
  • Organization: Unseen University of Infospace


Понадобилось транзакции собирать - т.е., считать связки, когда посетителю
выдаётся результат fastcgi-запроса, затем он запрашивает что-то ещё. Для
ускорения разбора логов fastcgi-скрипт пишет свой лог, в который выводит
специфические параметры.

Нужны два лога: один ведёт nginx в отдельном location, другой - скрипт.
Я "разогнался" изобразить такую вот конструкцию:

log_format uid '$remote_addr\t$msec\t$request\t$http_referer\t$uid_got\t$uid_set';
userid        on;
userid_name   uid;
userid_domain whateverdomain.com;

location /something {
    root ...;
    access_log /var/log/stat/something.log uid;
}

location /script {
    include       fastcgi_params.conf;
    fastcgi_param UID_GOT $uid_got;
    fastcgi_param UID_SET $uid_set;
    fastcgi_pass  unix:/var/run/whateverscript.sock;
    # и в отладочных целях
    access_log /var/log/stat/script.log uid;
}

Оказалось - не работает. Параметры UID_GOT и UID_SET передаются пустыми.
В "проверочный" script.log тоже пишутся прочерки на месте $uid_got/$uid_set.

Убираю строки "fastcgi_param UID_..." - начинает нормально писать в лог.

Короче, любое обращение к $uid_got или $uid_set делает их пустышками.
Даже такой вариант не проходит:

set  $uid  "";
if ($uid_got ~ "^uid=(.+?)") {
    set  $uid  $1;
}
if ($uid_set ~ "^uid=(.+?)") {
    set  $uid  $1;
}
fastcgi_param UID $uid;

- если его включить внутрь location /script, то UID скрипту идёт пустое,
и в лог также пишутся пустышки вместо $uid_*.

Чего я не понимаю в логике подстановки переменных nginx?
Или это просто глюк?


p.s. Я в курсе, что скрипту uid передаётся в Cookie. Но форматы Cookie и
записи uid в лог трагически не совпадают - для того, чтобы привести Cookie
в соответствие со строкой uid из лога, нужно напрягаться примерно вот так:

$uid = uc unpack("H*",pack("V*",unpack("N*",decode_base64($uid_cookie))));

что не есть хорошо в случае узких мест, как в fastcgi-скрипте, так и в скрипте
сведения логов.

--
IT Philosopher



 




Copyright © Lexa Software, 1996-2009.