Розуміння директиви nginx proxy_cache_path


30

Припустимо, у мене є цей конфігураційний файл nginx

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • Що keys_zone=myCache:8mозначає? Про це в документах мало сказано:

Крім того, всі активні клавіші та інформація про дані зберігаються у зоні спільної пам'яті, ім'я та розмір якої налаштовано параметром keys_zone.

  • Що робити, якщо proxy_cache_valid( 12h) вище вказаного inactiveзначення ( 1h) у proxy_cache_path? Яке правило воно буде дотримуватися? напр

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

Спасибі!

Відповіді:


39

Що означає keys_zone = myCache: 8m?

Як сказано в документації , nginx буде зберігати всі активні ключі, а інформація про дані зберігається в зоні спільної пам'яті, чиї nameта sizeналаштовані параметром keys_zone. Як повноти, давайте розбитися на частину

  • /var/cache/nginx- це місце, де зберігається фактичний кеш. Всередині папки кеш-файл був бінарним файлом, але ви можете легко помітити html-тег всередині нього.
  • levels=1:2 Параметр рівнів задає кількість підкаталогічних рівнів у кеші.
  • keys_zone=myCache:8mвизначав зону спільної пам'яті з назвою myCache з максимальним розміром 8 Мб. Він містить всі активні ключі та метадані кеша. Отже, кожного разу, коли nginx перевіряє, чи була кешована сторінка, вона спочатку звертається до зони спільної пам'яті, а потім шукає місце фактичного кешу, /var/cache/nginxякщо кеш існує.
  • max_sizeбув максимальний розмір кешу, наприклад розмір файлів на /var/cache/nginx.
  • inactive=1hВкажіть максимальний неактивний кеш часу, який можна зберігати. Кешовані дані, до яких немає доступу протягом часу, визначеного inactiveпараметром, вилучаються з кеша незалежно від їх свіжості.

Як працює перевірка та видалення кешу

Взято зі списків розсилки nginx

  • Директива proxy_cache_valid визначає, як довго відповідь буде вважатися дійсною (і повертається без запитів до бекенду). Після закінчення цього часу відповідь буде вважатися "несвіжим" і або не повернеться, або залежатиме від налаштування proxy_cache_use_stale .

  • Довід неактивні з proxy_cache_path визначає , як довго відповідь буде зберігатися в кеші після останнього використання. Зауважте, що навіть застарілі відповіді будуть вважатися нещодавно використаними, якщо до них будуть запити.

Як я розумію, тут псевдокод працює як nginx

Коли запит надходить

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

В іншому процесі менеджер кеша виконує цю логіку

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Що робити, якщо proxy_cache_valid (12h) вище вказаного неактивного значення (1h) у proxy_cache_path?

Поки запит і отримує доступ до певного кешу, цей об'єкт кеша буде діяти до 12 год після того, як об'єкт буде поставлений у кеш. Після цього кеш вважався недійсним, тому nginx виймається з бекенда та скидає дійсний таймер. Але якщо об'єкт був неактивним (не звертався до нього) більше однієї години - навіть у 12-часовий термін дійсного кешу -, nginx видалить його через inactiveпараметр.


"Після цього кеш вважався недійсним, тому nginx виймається з бекенда та скидає дійсний таймер." - це цікаво. Отже, nginx отримує запит, навіть якщо жоден користувач не отримує його? Так, наприклад, якщо неактивним є 365dі дійсний, 1dто nginx щорічно протягом року надсилатиме запити в кеш, навіть якщо ніхто не робить такий запит?
Мартін Тома

1
Приємна відповідь, але я, здається, не можу знайти жодної документації щодо одиниць вимірювання, які ми використовуємо з деякими з цих параметрів. Наприклад, inactiveпарами займають значення часу, але я не бачу, які значення я можу використати, крім h(як приблизно 1 місяць? Або 1 день? Тощо). І що ми маємо конкретизувати max_size? Байти? Чи можу я використовувати 1М на 1 мегабайт?
Суніл Д.

4
@SunilD. - ось вам: nginx.org/en/docs/syntax.html
adamczi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.