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

TJ на dir.bg TJ на dir.bg
Пт Июн 11 13:28:05 MSD 2010


Игорь, благодарю за ваш ответ!

К сожалению, дисковый кеш не подходит, у нас веб-сервера - бездисковые 
(network boot).
По-этому был выбран мемкеш.

Вопрос, возможно ли использовать связку rewrite и memcache в текущих 
редакциях nginx? Архитектурно нет противоречий/противопоказаний?


С уважением,
TJ


Igor Sysoev пишет:
> 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;
>>              }
>>          }
>>     
>
>
>   



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