Назад | Перейти на главную страницу

Nginx, memcached и cakephp: модуль memcached всегда пропускает кеш

У меня простая конфигурация nginx;

server{
  servername localhost;
  root /var/www/webroot;

  location / {
    set_md5  $memcached_key $uri;
    index  index.php index.html;
    try_files $uri $uri/ @cache;
  }

  location @cache  {
    memcached_pass localhost:11211;
    default_type text/html;
    error_page 404  @fallback;
  }

  location @fallback{
    try_files $uri $uri/ /index.php?url=$uri&$args;
  }

  location ~ \.php$ {
    fastcgi_param MEM_KEY $memcached_key;
    include /etc/nginx/fastcgi.conf;
    fastcgi_index  index.php;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
  }
}

У меня есть помощник CakePHP, который сохраняет представление в memcached с помощью параметра MEM_KEY. Я протестировал его, и он работает, однако nginx всегда идет в направлении @fallback. Как я могу решить эту проблему? Может ли быть проблема?

Благодаря комментарию DukeLion я наконец-то смог выяснить, что происходит, nginx выполняет доступ к серверу memcached в порядке, но cakephp изменяет ключ.

Например, я пытаюсь получить доступ к /home_page.html

Nginx получает доступ к кешу памяти с помощью /home_page.html, не находит его, поэтому загружает cakephp, cakephp генерирует представление и сохраняет его в ключе _home__page_html

Решением этой проблемы было расширение механизма memcached cakephp.

Спасибо!!!

pd: вы можете попробовать механизм просмотра memcached в http://andy-gale.com/cakephp-view-memcache.html