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

Как указать nginx соблюдать кеш-память сервера?

Я использую php-fpm с nginx в качестве http-сервера (я мало что знаю об обратных прокси, я просто установил его и ничего не трогал), без Apache или Varnish.

Мне нужен nginx, чтобы понимать и соблюдать отправляемые мной HTTP-заголовки. Я пробовал с этой конфигурацией (взятой из документации), но не работал:

/etc/nginx/nginx.conf:

fastcgi_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=website:10m inactive=10m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

/ и т.д. / nginx / сайты-доступные / веб-сайт:

server {
    fastcgi_cache website;
    #fastcgi_cache_valid 200 302 1h;
    #fastcgi_cache_valid 301     1d;
    #fastcgi_cache_valid any     1m;
    #fastcgi_cache_min_uses 1;
    #fastcgi_cache_use_stale error timeout invalid_header http_503;
    add_header X-Cache $upstream_cache_status;
}

Я всегда получаю "MISS", а каталог кеша пуст. Если я раскомментирую другие директивы, я получу удар, но мне не нужны эти «глупые» настройки, мне нужно управлять ими в моем бэкэнде. Например, если мой серверный модуль говорит «public, s-maxage = 10», кеш должен считаться устаревшим через 10 секунд. Вместо этого nginx будет хранить его в течение 1 часа из-за этих директив.

Я думал, стоит ли попробовать proxy_cache, не уверен, в чем разница. В документах модулей fastcgi и proxy говорится следующее:

The cache honors backend's Cache-Control, Expires, and etc.
since version 0.7.48, Cache-Control: private and no-store only
since 0.7.66, though. Vary handling is not implemented.

версия nginx: nginx / 1.1.19

Есть предположения?

pd: У меня также есть обратный прокси-сервер, предлагаемый Symfony2 (который я отключаю, чтобы использовать nginx). Заголовки интерпретируются им правильно, так что я думаю, что делаю правильно.

Видимо nginx не распознает этот заголовок: Cache-Control: public, s-maxage=10. Я пробовал с maxage и работал нормально.

Интересно, будут ли работать другие кеши (ETag, Last Modified и т. Д.) ...