ПРОЕКТЫ 


  АРХИВ 


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: memcached upstream: exited on signal 11



On Mon, Dec 24, 2007 at 03:39:45PM +0300, Andrey Ignatov wrote:

> On Mon, Dec 24, 2007 at 11:48:57AM +0300, Andrey Ignatov wrote:
> > On Thu, Dec 20, 2007 at 08:02:18PM +0300, Andrey Ignatov wrote:
> > > Использую memcached бекенд в nginx. В результате воркер, на который
> > > приходит запрос падает в корку от первого же запроса.
> > 
> > Игорь, можете прокомментировать ситуацию ?
> 
> Вот минимальный конфиг, с которым у меня стабильно падает (пробовал на
> двух разных серверах - freebsd 5.4 и 6.2):
> 
> 
> config #1
> ------------------------------------------------------------------------
> user                  www www;
> worker_processes      2;
> error_log             /var/log/nginx-error.log info;
> 
> events {
>       worker_connections      8192;
>       use                     kqueue;
>       debug_connection        192.168.18.14;
> }
> 
> http {
>       include                 mime.types;
>       default_type            application/octet-stream;
> 
>       server {
>               listen          192.168.18.250;
>               server_name     domain.tdl;
> 
>               location / {
>                       if ($request_uri ~ 
> "\/(\d+)\/blogs\.(rss|rss2|atom)\.xml$") {
>                               set     $user_id        "$1";
>                               set     $type           "$2";
>                       }
> 
>                       #set    $user_id        "788";
>                       #set    $type           "rss2";
> 
>                       set     $memcached_key  "blogfeed::$user_id::$type";
> 
>                       memcached_pass  192.168.0.205:11211;
>               }
>       }
> }
> ------------------------------------------------------------------------
> 
> Причем, если закомментировать блок if и раскомментировать set'ы, где
> переменные задаются явно, то падать перестает (пусть это будет config #2).
> 
> Запрос делается такой: http://domain.tdl/788/788/blogs.rss2.xml
> 
> 
> Еще заметил, что при работе с config #1, в дебаг-логе получаем:
> 
> http memcached request: "/788/788/blogs.rss2.xml"
> 
> Т.е. $memcached_key почему то стал равен $uri.
> 
> При работе же с config #2, получаем как задумано:
> 
> http memcached request: "blogfeed::788::rss2"
> 
> Однажды вообще получил:
> 
> http memcached request: "192.168.18.14"
> 
> Т.е. переменной $memcached_key был присвое IP заданный в
> debug_connection. Но эту ситуацию у меня воспроизвести не получилось
> пока.

Проблема в том, что memcached_pass и "set $memcached_key ..." не наследуются
в конфигурацию внутри блока if. Прилагаемый патч разрешает использовать
memcached_pass внутри if. Конфигурация должна выглядеть так:

        location / {
             if (...) {
                 set        $user_id        "$1";
                 set        $type           "$2";
                 set        $memcached_key  "blogfeed::$user_id::$type";
                 memcached_pass        192.168.0.205:11211;
             }

             set  ...

             set        $memcached_key        "blogfeed::$user_id::$type";
             memcached_pass        192.168.0.205:11211;
        }

Более корректного решения до нового ngx_http_script_module не будет.


-- 
Игорь Сысоев
http://sysoev.ru
Index: src/http/modules/ngx_http_memcached_module.c
===================================================================
--- src/http/modules/ngx_http_memcached_module.c        (revision 1096)
+++ src/http/modules/ngx_http_memcached_module.c        (working copy)
@@ -58,7 +58,7 @@
 static ngx_command_t  ngx_http_memcached_commands[] = {
 
     { ngx_string("memcached_pass"),
-      NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+      NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
       ngx_http_memcached_pass,
       NGX_HTTP_LOC_CONF_OFFSET,
       0,


 




Copyright © Lexa Software, 1996-2009.