@datafilterman

Как кэшировать в nginx ответы с backend только тех страниц, которые не содержат аргументы?

На странице /page/index.php есть href ведущий на /page/index.php?arg=1
Нижеследующий код добавляет страницу /page/index.php в кэш, но при попытке зайти на /page/index.php?arg=1 — показывает всё ту же страницу из кэша ( /page/index.php ) будто игнорируется if вовсе

location = /page/index.php {
        if ($is_args != "") {
              proxy_pass http://backend;
              break;
        }
        proxy_pass http://backend;
        proxy_cache nginx;
        proxy_cache_key $scheme$proxy_host$uri;
        proxy_ignore_headers Cache-Control Expires Set-Cookie;
        proxy_cache_valid 10m;
        proxy_cache_methods GET;
    }
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
Лучше вместо if, который, is evil, использовать proxy_cache_bypass:
location = /page/index.php {
  proxy_pass http://backend;
  proxy_cache nginx;
  proxy_cache_key $scheme$proxy_host$uri;
  proxy_ignore_headers Cache-Control Expires Set-Cookie;
  proxy_cache_valid 10m;
  proxy_cache_methods GET;

  # перечислить каждый из возможных параметров:
  proxy_cache_bypass $arg_a$arg_b$arg_c; 
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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