У меня есть веб-приложение, работающее с AppCache, и я хотел бы, чтобы при изменении файлов html / css / js, а затем обновлении манифеста кеша, когда пользователь обращается к моему веб-приложению, у них будет обновленная версия этих файлов. Если я изменяю файл HTML, он работает отлично, но когда я меняю файлы CSS и JS, старая версия по-прежнему используется.
Я все проверял и думаю, что это связано с моей конфигурацией nginx. У меня есть файл cache.conf, содержащий следующее:
gzip on;
gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ \.(css|js|htc)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
}
location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
expires 3600s;
add_header Pragma "public";
add_header Cache-Control "max-age=3600, public, must-revalidate, proxy-revalidate";
}
И в default.conf у меня есть мои локации. Я хотел бы, чтобы это кеширование работало во всех местах, кроме одного, как я могу это настроить? Я пробовал следующее, и это не работает:
location /dir1/dir2/ {
root /var/www/dir1;
add_header Pragma "no-cache";
add_header Cache-Control "private";
expires off;
}
Спасибо
Обновить:
Мой cache.conf теперь выглядит так:
location ^~ /desk/ {
add_header Pragma "no-cache";
add_header Cache-Control "private";
expires off;
}
location ^~ /dev/desk/ {
add_header Pragma "no-cache";
add_header Cache-Control "private";
expires off;
}
gzip on;
gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ \.(css|js|htc)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
}
Расположение в nginx определяет эксклюзивные конфигурации, то есть с двумя местоположениями
location /dir1/dir2/ {
# configuration A
}
location ~ \.(css|js|htc)$ {
# configuration B
}
для запроса будет использоваться только одна конфигурация. С указанными выше местоположениями (как в вашей конфигурации) для запроса на /dir1/dir2/file.css
будет выбран location ~ \.(css|js|htc)$
согласно правила выбора места.
Если вы хотите, чтобы nginx не искал местоположения, заданные регулярными выражениями, если запрос начинается с /dir1/dir2/
, используйте ^~
модификатор:
location ^~ /dir1/dir2/ {
# configuration A
}
location ~ \.(css|js|htc)$ {
# configuration B
}
Таким образом, location ^~ /dir1/dir2/
место будет использоваться для /dir1/dir2/file.css
запрос.
В качестве альтернативы вы можете изолировать свои местоположения регулярных выражений под другим местоположением префикса, например location /
, как это:
location / {
# configuration for normal files under /
location ~ \.(css|js|htc)$ {
# configuration for css/js/htc files under /
}
}
location /dir1/dir2/ {
# configuration for all files under /dir1/dir2/
}
Видеть http://nginx.org/r/location для получения дополнительной информации. В Как nginx обрабатывает запрос статья тоже может быть полезной.