Конфигурация Nginx для кэширования статических файлов

Конфигурация Nginx для кэширования статических файлов

У меня возникла проблема с настройкой Nginx для корректного обслуживания приложения AngularJS. Сервер настроен следующим образом:

www.example.com we have the landing page of the application
www.example.com/app we have the application itself

Путь к приложению следующий:

/usr/share/nginx/html/example.com/app/

и статические файлы находятся внутри следующего:

/usr/share/nginx/html/example.com/app/public/app/assets

Теперь я хотел бы установить кэширование на «без кэширования» для всех html-файлов как на целевой странице, так и в приложении, но установить кэширование на 60 дней для всех js-, css-файлов и файлов изображений.

Вот моя текущая конфигурация сервера nginx:

server {
listen 80;

index index.html;

server_name example.com www.example.com;

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 60d;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

location ^~ /app {
    alias /usr/share/nginx/html/example.com/app/public/;
    expires -1;
    add_header Pragma "no-cache";
}

location / {
    root /usr/share/nginx/html/example.com;
    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate,  post-check=0, pre-check=0";
  }
}

Теперь проблема в том, что директива местоположения:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$

никогда не выполняется, поэтому кэш устанавливается как no-cache, как определено в директиве /app.

Есть идеи?

Спасибо

решение1

Цитата из документации nginx:

Если самое длинное совпадающее префиксное местоположение имеет модификатор «^~», то регулярные выражения не проверяются.

Итак, проблема здесь в вашем location ^~ /appопределении. ^Модификатор заставляет nginx игнорировать регулярное выражение для изображений.

Вместо этого следует использовать location /app. В этом месте вам не нужно сопоставление регулярных выражений, достаточно простого сопоставления префиксов.

решение2

Думаю, проблема в "~*", попробуйте просто с "~". Пример:

location ~ \.(?:ico|css|js|gif|jpe?g|png)$

Связанный контент