mod_uid - значения переменных $uid_got и $uid_set пропадают
Anatoly Matyakh
protopartorg at gmail.com
Wed Feb 7 06:47:14 MSK 2007
Понадобилось транзакции собирать - т.е., считать связки, когда посетителю
выдаётся результат 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
More information about the nginx-ru
mailing list