Re: nginx rewrite + memcached не срабатывает эта связка

Igor Sysoev igor на sysoev.ru
Чт Июн 10 18:49:04 MSD 2010


On Thu, Jun 10, 2010 at 06:41:59PM +0400, Igor Sysoev wrote:

> On Thu, Jun 10, 2010 at 05:09:49PM +0400, TJ at dir.bg wrote:
> 
> > Приветствую!
> > 
> > Nginx 0.7.65, debian
> > 
> > Есть мемкеш, в нем по ключу "$host:$uri" лежит содержимое страницы 
> > (ключи экспарятся каждую минуту).
> > 
> > Если такого ключа нет, управление передается (proxy_pass и далее) 
> > php-скрипту, который отрабатывает запрос, показывает содержимое и кладет 
> > содержимое страницы в кеш по нужному ключу.
> > 
> > Тут все стандартно, все работает.
> > 
> > Также есть rewrite, работающий, проверено.
> > 
> > А вот при попытке скрестить реврайт и мемкеш получается странное, 
> > редирект на корень хоста!
> > 
> > 
> > Кусок конфига:
> > ...
> >         location / {
> >  
> >             if ($request_method = POST) {
> >                     proxy_pass http://127.0.0.1:8050;
> >                     break;
> >             }
> >  
> >            location /news/ {
> >                     rewrite ^/news/(.*)-([0-9]+)$   /news.php?id=$2 last;
> >             }
> >  
> >             set  $memcached_key  "$host:$uri";
> >  
> >             memcached_pass   10.100.0.47:11211;
> >  
> >             default_type     text/html;
> >             error_page       404 502 403 503 = /_fall_ ;
> >         }
> >  
> >         location = /_fall_ {
> >             proxy_pass 127.0.0.1:8070
> >             ...
> >         }
> > ...
> > 
> > Причем, выносили rewrite за пределы location / (меняя на break в конце) 
> > - не помогает.
> > 
> > реврайт срабатывает:
> > 2010/06/09 10:10:21 [notice] 12727#0: *2215 "^/news/(.*)-([0-9]+)$" 
> > matches "/news/la-la-la-6456827", client: 123.123.123.123, server: 
> > aaaa.bbb.cc, request: "GET /news/la-la-la-6456827 HTTP/1.1", host: 
> > "aaaa.bbb.cc"
> > 2010/06/09 10:10:21 [notice] 12727#0: *2215 rewritten data: "/news.php", 
> > args: "id=6456827", client: 123.123.123.123, server: aaaa.bbb.cc, 
> > request: "GET /news/la-la-la-6456827 HTTP/1.1", host: "aaaa.bbb.cc"
> > 
> > После не следует никакого обращения к php-скрипту news.php, в proxy_pass 
> > не передается ничего, просто редирект в /
> > 
> > В чем может быть затык?
> > 
> > Спасибо за помощь!
> 
> Поставьте 0.8.40 с таким конфигом:
> 
>     proxy_cache_path  /path/to/cache  levels=1:2  keys_zone=CACHE:10m;
> 
>     server {

+          proxy_cache         CACHE;
+          proxy_cache_valid   1m;

>          location / {
>              proxy_pass 127.0.0.1:8070;
>          }
>   
>          location /news/ {
>              location ~ ^/news/(.*)-([0-9]+)$  {
>                  proxy_pass   proxy_pass 127.0.0.1:8070/news.php?id=$2;
>              }
>          }


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru