Я использую 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 и т. Д.) ...