mannaro
@mannaro
Умею профессионально гуглить

Как правильно настроить кеш на nginx?

Коллеги, привет!
Пытаюсь настроить нормальный кеш. У меня есть один location, который проверяет, есть ли файл в папке и (если его нет) переадресовывает на именной location (тот, что @). Именной location делает proxy_pass на nodejs сервер. Хотелось бы, чтобы все файлы, которые приехали с nodejs кешировались. Но только файлы (js/css). Есть какой-то адекватный способ поставить такое ограничение? proxy_cache_bypass похож на то, что нужно, но не понятно, как его настроить.
Пример того, как настроил сейчас будет в спойлере ниже. При таких настройках nginx вообще не сохраняет кеш в /var/cache/nginx, а при попытке его закгрузить ругается, что файла нет в /usr/share/nginx/html/.

Текущие настройки (не работают)
proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:5m inactive=10m max_size=50m;

server {
  listen 80;
  server_name domain.ru;

  proxy_cache_bypass 1;

  location ~(\.js|\.css)$ {
    proxy_cache_bypass 0;
  }

  location / {
    root lp;
    rewrite ^(/pricing|/contacts)/?(.*) /$2 break;
    
    proxy_cache pagecache;
    proxy_cache_valid 10m;

    try_files $uri/index.html $uri @custom;
  }

  location @custom {
    proxy_pass http://ru_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
@dodo512
proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:5m inactive=10m max_size=50m;

server {
  listen 80;
  server_name domain.ru;

  root /var/www/html;

  rewrite ^/(pricing|contacts)/?(.*) /$2;

  location ~ \.(js|css)$ {
    try_files $uri @custom_cache;
  }

  location / {
    try_files $uri/index.html $uri @custom;
  }
  
  location @custom {
    proxy_pass http://ru_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  
  location @custom_cache {
    proxy_cache pagecache;
    proxy_cache_valid 10m;
    proxy_pass http://ru_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы