А вообще, можно вот так сделать:<br><br><span style="font-family: courier new,monospace;">perl_require "Digest/MD5.pm";</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">perl_set $uuid 'sub {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> my $r = shift;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> my $uuid = "";</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if (($r->header_in("Cookie")||"") =~ /\buuid=([^;]+)/) {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> $uuid = $1;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> } else {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> my $domain = $r->header_in("Host");</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if ($domain !~ /\bstatic\./s && $domain =~ /(\w+ \. \w+)$/xs) {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> $domain = $1;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> $uuid = Digest::MD5::md5_hex("super-secret" . time() . int(rand(2000000000)));</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> $r->header_out(<br>
"Set-Cookie", <br> "uuid=$uuid; expires=Wed, 08 Jul 2037 22:53:52 GMT; domain=.$domain; path=/"<br> );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> $r->header_out("P3P", q{policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"});</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> }</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> }</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> return $uuid;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">}';</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># Run uuid calculation & header set (use its side-effect: header</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"># X-Uuid is not used, we only need to execute $uuid-bound Perl code).</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">add_header X-Uuid $uuid;</span><br>
<span style="font-family: courier new,monospace;"><br>...</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># Add uuid fo access_log.</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">log_format main '... "$uuid"';</span><br style="font-family: courier new,monospace;"><br><br>Вроде это работает и даже не очень сильно замедляет скорость (на тестовой пустой странице дало где-то 2800 запросов в секунду вместо 3000). <br>
Правда, в боевых условиях пока не проверял, только wget-ом пробил 2 варианта (когда есть кука uuid и когда нет).<br><br><br><br><br><div class="gmail_quote">2010/4/9 Dmitry Koterov <span dir="ltr"><<a href="mailto:dmitry@koterov.ru">dmitry@koterov.ru</a>></span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Вот такой конфиг не срабатывает - выставляет куку с "domain=$base_domain" (прямо вот такой строкой):<br>
<br><span style="font-family: courier new,monospace;">set $base_domain "none";</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">if ($http_host ~* "([^.]+\.[^.]+)$") {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> set $base_domain $1;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">...</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">userid_domain $base_domain;</span><br>
<br>А очень жалко. Ведь могут быть блоки server, которые обрабатывают сразу много доменов, и неправильно было бы захардкодить имя домена в директиве userid_domain.<br><br>Можно ли с этим что-то сделать?<br>
</blockquote></div><br>