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

У меня включено кеширование на прокси-сервере NGINX.

Насколько я понимаю, я не игнорирую заголовок Cache-Control в своей конфигурации прокси ( proxy_ignore_headers ]), время кэширования до истечения срока может быть установлено с исходного сервера с помощью Cache-Control = max-age = XXXX .

Но какое время кеширования будет по умолчанию? сохранить и использовать для чего-то вроде Cache-Control: public ? Есть ли способ установить максимальное время кеширования по умолчанию для этих ресурсов?

2
задан 6 June 2018 в 17:38
2 ответа

Верно, по умолчанию настроено только 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 .

.
1
ответ дан 3 December 2019 в 11:25

Вероятно, лучше установить или переписать заголовки управления кэшем внутри 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";
  }
}
1
ответ дан 3 December 2019 в 11:25

Теги

Похожие вопросы