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