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

Время кеширования по умолчанию прокси NGINX с Cache-Control и без срока действия

У меня включено кеширование на прокси-сервере 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.