У меня включено кеширование на прокси-сервере NGINX.
Насколько я понимаю, пока я не игнорирую Cache-Control
заголовок в моей конфигурации прокси (proxy_ignore_headers
), время кеширования до истечения срока может быть установлено с исходного сервера с помощью Cache-Control
знак равно max-age=XXXX
.
Но какое время кеширования по умолчанию он будет использовать для чего-то вроде Cache-Control: public
? Есть ли способ установить максимальное время кеширования по умолчанию для этих ресурсов?
Возможно, вам лучше установить или переписать заголовки управления кешем внутри Nginx. У меня есть руководство по этому поводу Вот, а в первой части руководства есть загружаемые файлы конфигурации. Ключевые части ниже
Тебе нужно headers_more чтобы они работали. Некоторые дистрибутивы включают это, некоторые нет, и вам нужно собирать из исходников - что довольно просто и включено в мое руководство.
Скопировано из учебника
Мы используем несколько различных методов для установки заголовков управления кешем. Сначала мы очищаем все существующие заголовки, например очень старую Pragma, которая больше не нужна, очищаем заголовки Expires (что, вероятно, бессмысленно, поскольку мы устанавливаем их позже), и очищаем имя сервера для безопасности.
more_clear_headers "Pragma"; more_clear_headers Server; more_clear_headers "Expires";
Затем мы можем установить заголовок вручную. Для изображения мы используем довольно долгий срок годности
add_header Cache-Control "public, max-age=691200, s-maxage=691200";
Для страниц мы делаем его короче - многим сайтам он понадобится намного короче.
add_header Cache-Control "public, max-age=86400, s-maxage=86400";
В некоторых местах для удобства мы используем альтернативный формат.
expires 8d;
Пример конфигурации Nginx
Пример сервера Nginx (некоторые части отсутствуют, например, настройка SSL)
# Caching. Putting the cache into /dev/shm keeps it in RAM, limited to 10MB, for one day.
# You can move to disk if you like, or extend the caching time
fastcgi_cache_path / dev / shm / nginxcache levels = 1: 2 keys_zone = CACHE: 50 м неактивно = 1440 м; #ОЗУ
# This needs to match your PHP configuration. Port is sometimes 9000 ****
upstream php {
server 127.0.0.1:9001;
}
server {
server_name www.example.com;
listen 443 ssl http2;
root /var/www/***folder;
location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg)$ {
log_not_found off; access_log off;
# Set up caching - 8 days for static resources
# Remove the old unnecessary Pragma and hide the server version
more_clear_headers "Cache-Control";
add_header Cache-Control "public, max-age=691200, s-maxage=691200";
more_clear_headers Server; more_clear_headers "Pragma"; mo re_clear_headers "Expires";
}
# PHP requests
location ~ \.php$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Use the cache defined above. Cache 200 (success) status's, for 24 hours, and cache
# specific other status's for an hour. This helps mitigate DDOS attacks.
# Only cache GET and HEAD requests
fastcgi_cache CACHE;
fastcgi_cache_valid 200 1440m;
fastcgi_cache_valid 403 404 405 410 414 301 302 307 60m;
add_header X-Cache $upstream_cache_status;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
# Set the cache control headers we prepared earlier. Remove the old unnecessary Pragma and hide
# the server version. Clearing existing headers seems necessary
more_clear_headers "Cache-Control";
add_header Cache-Control $cacheControl;
more_clear_headers "Pragma"; more_clear_headers Server; more_clear_headers "Expires";
}
}
Правильно, по умолчанию только proxy_cache
настроен, nginx кэширует только ответы, max-age
установлен в Cache-Control
заголовок.
Без всяких Cache-Control
заголовок или просто Cache-Control: public
nginx не кеширует ответ (т.е. вы получаете каждый раз X-Cache-Status: MISS
когда вы также настраиваете add_header X-Cache-Status $upstream_cache_status;
).
Вы можете настроить время кеширования по умолчанию для ответов без Cache-Control
заголовок или без max-age
поле в Cache-Control
заголовок:
# for 200, 301, 302 responses
proxy_cache_valid 10m;
# for all other responses
proxy_cache_valid any 1m;
Это означает Cache-Control
заголовок имеет приоритет над proxy_cache_valid
настройки и нет значений по умолчанию для proxy_cache_valid
.