
У меня возникла проблема с настройкой 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)$