Re: В ngx_http_userid_module нельзя задавать userid_domain из переменной?
Dmitry Koterov
dmitry на koterov.ru
Пт Апр 9 02:12:07 MSD 2010
А вообще, можно вот так сделать:
perl_require "Digest/MD5.pm";
perl_set $uuid 'sub {
my $r = shift;
my $uuid = "";
if (($r->header_in("Cookie")||"") =~ /\buuid=([^;]+)/) {
$uuid = $1;
} else {
my $domain = $r->header_in("Host");
if ($domain !~ /\bstatic\./s && $domain =~ /(\w+ \.
\w+)$/xs) {
$domain = $1;
$uuid = Digest::MD5::md5_hex("super-secret" . time()
. int(rand(2000000000)));
$r->header_out(
"Set-Cookie",
"uuid=$uuid; expires=Wed, 08 Jul 2037 22:53:52
GMT; domain=.$domain; path=/"
);
$r->header_out("P3P", q{policyref="/w3c/p3p.xml",
CP="CUR ADM OUR NOR STA NID"});
}
}
return $uuid;
}';
# Run uuid calculation & header set (use its side-effect: header
# X-Uuid is not used, we only need to execute $uuid-bound Perl code).
add_header X-Uuid $uuid;
...
# Add uuid fo access_log.
log_format main '... "$uuid"';
Вроде это работает и даже не очень сильно замедляет скорость (на тестовой
пустой странице дало где-то 2800 запросов в секунду вместо 3000).
Правда, в боевых условиях пока не проверял, только wget-ом пробил 2 варианта
(когда есть кука uuid и когда нет).
2010/4/9 Dmitry Koterov <dmitry at koterov.ru>
> Вот такой конфиг не срабатывает - выставляет куку с "domain=$base_domain"
> (прямо вот такой строкой):
>
> set $base_domain "none";
> if ($http_host ~* "([^.]+\.[^.]+)$") {
> set $base_domain $1;
> }
> ...
> userid_domain $base_domain;
>
> А очень жалко. Ведь могут быть блоки server, которые обрабатывают сразу
> много доменов, и неправильно было бы захардкодить имя домена в директиве
> userid_domain.
>
> Можно ли с этим что-то сделать?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100409/68353539/attachment.html>
Подробная информация о списке рассылки nginx-ru