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

nginx возвращает поврежденные данные из memcached

На моем веб-сайте я сделал кеширование данных с помощью memcached. В нем хранятся полностью сгенерированные html-страницы. Следующим шагом было получить эти данные из memcached с помощью nginx и отправить обратно пользователю без запуска процесса apache. Сначала я попытался получить данные из кеша с помощью php-бэкэнда, и это сработало. Но когда я пытаюсь сделать это с помощью nginx - я вижу почти не поврежденные данные. что-то вроде http://i.stack.imgur.com/JFGW0.png

я прошу помощи с этой проблемой.

p.s. вот часть конфигурации nginx, если это может помочь

location / {
    #add_header    Content-Type  "text/html";
    set $cachable 1;

    if ($request_method = POST){
        set $cachable 0;
        break;
    }
    if ($http_cookie ~ "beauty_logged") {
        set $cachable 0;
        break;
    }

    if ($cachable = 1) {
        set             $memcached_key   'nginx_$host$uri';
        memcached_pass  127.0.0.1:11211;
    }

    default_type    text/html;
    error_page      404 502 504 405 = @php;
    #proxy_pass http://front_cluster;
}

location @php {
    proxy_pass http://front_cluster;
}

Nginx не обрабатывает контент, хранящийся в Memcached, он просто получает его и возвращает в браузер как есть.

Настоящая причина - клиентская библиотека Memcached, которую использует ваше приложение. Большинство библиотек сжимают большие значения (обычно, когда размер значения превышает некоторый порог), поэтому вы должны настроить его так, чтобы это не происходило, или установить memcached_gzip_flag с участием модуль gunzip включен.