У меня включено кеширование на прокси-сервере NGINX.
Насколько я понимаю, я не игнорирую заголовок Cache-Control
в своей конфигурации прокси ( proxy_ignore_headers
]), время кэширования до истечения срока может быть установлено с исходного сервера с помощью Cache-Control
= max-age = XXXX
.
Но какое время кеширования будет по умолчанию? сохранить и использовать для чего-то вроде Cache-Control: public
? Есть ли способ установить максимальное время кеширования по умолчанию для этих ресурсов?
Верно, по умолчанию настроено только 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
.
Вероятно, лучше установить или переписать заголовки управления кэшем внутри Nginx. У меня есть учебное пособие здесь , а в первой части учебного пособия есть загружаемые конфигурационные файлы. Ключевые части находятся ниже
, чтобы они работали, вам нужны headers_more. Некоторые дистрибутивы включают в себя это, некоторые нет, и вам нужно собрать из исходников, что довольно просто и включено в мое руководство.
Скопировано из руководства
Мы используем пару различных техник для установки заголовков управления кэшем. Сначала мы очищаем все существующие заголовки, например, очень старый прагматик, который больше не полезен, очищаем заголовки 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 Configuration
Пример 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:50m inactive=1440m; #RAM
# 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";
}
}