ПРОЕКТЫ 


  АРХИВ 


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]

Re: В ngx_http_userid_module нельзя за давать userid_domain из переме нной?


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: В ngx_http_userid_module нельзя за давать userid_domain из переме нной?
  • From: Dmitry Koterov <dmitry@xxxxxxxxxx>
  • Date: Fri, 9 Apr 2010 02:12:07 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received :in-reply-to:references:from:date:x-google-sender-auth:received :message-id:subject:to:content-type; bh=ZEw79UfeXlwT5LbJI1I9cpQ3ca7rkpRnMgsXoQffC0U=; b=bDCqSWJEHjSoZL2HZRJVvQN6Ta2DWfBA68xSwkNazNfkTB1g3x6h9/1cnAdmMfskiO dAwLZ3WRmkx3PX64CixAHvZFlkXALvAzHaWyuUf0IQ80S4aEKRalRG5D4neS0hJRkQ3t hn3Yw0zMzyNp2bwZw3U2XnAxn9cPN9Q6rIDRI=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:content-type; b=MgbhWqQ+htaQc4RDA1WzMmccxdJ3LoV9wf7pYrUBsIshw/sSxcUysSfeg2nLmFa4ZR hkeubfg8Sfw6EoqFf1tUlGHjW9jl3iK6VOfYDNoFcJoTKts4WI5dxXBXMEzmR+lZ3T/r nyPn5umgS3O/8taAoYQ4Bf8c2ffaWXu8Xm5LM=
  • In-reply-to: <s2nd7df81621004081338gcae35c9h3776215b8d0c146b@xxxxxxxxxxxxxx>
  • References: <s2nd7df81621004081338gcae35c9h3776215b8d0c146b@xxxxxxxxxxxxxx>

А вообще, можно вот так сделать:

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@xxxxxxxxxx>
Вот такой конфиг не срабатывает - выставляет куку с "domain=$base_domain" (прямо вот такой строкой):

set $base_domain "none";
if ($http_host ~* "([^.]+\.[^.]+)$") {
    set $base_domain $1;
}
...
userid_domain $base_domain;

А очень жалко. Ведь могут быть блоки server, которые обрабатывают сразу много доменов, и неправильно было бы захардкодить имя домена в директиве userid_domain.

Можно ли с этим что-то сделать?

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.