Назад | Перейти на главную страницу

Конфигурация 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.

Любая идея?

Спасибо

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

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

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

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

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

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