Отключить кэш nginx для файлов JavaScript

27
задан Musterknabe 25 October 2016 в 15:13
поделиться

1 ответ

Я знаю, что этот вопрос немного стар, но я предложил бы использовать некоторый хеш cachebraking в URL JavaScript. Это работает отлично в производстве, а также во время разработки, потому что у Вас могут быть и бесконечные времена кэша и мгновенные обновления, когда изменения происходят.

Позволяет, предполагают, что у Вас есть файл /js/script.min.js JavaScript, но в ссылке html/php файл Вы не используете фактический путь, но:

<script src="/js/script.<?php echo md5(filemtime('/js/script.min.js')); ?>.min.js"></script>

Поэтому каждый раз файл изменяется, браузер получает другой URL, который в свою очередь означает, что не может кэшироваться, быть этим локально или на любом промежутке прокси.

Для создания этой работы Вам нужен nginx для перезаписи любого запроса к/js/script. [0-9a-f] {32} .min.js к исходному имени файла. В моем случае я использую следующую директиву (для css также):

location ~* \.(css|js)$ {
                expires max;
                add_header Pragma public;
                etag off;
                add_header Cache-Control "public";
                add_header Last-Modified "";
                rewrite  "^/(.*)\/(style|script)\.min\.([\d\w]{32})\.(js|css)$" /$1/$2.min.$4 break;
        }

я предположил бы, что вызов filemtime даже не требует доступа к диску на сервере, как это должно быть в кэше файла Linux. Если у Вас есть сомнения или статические файлы HTML, можно также использовать фиксированное случайное значение (или возрастающий или довольный хеш), который обновляется, когда JavaScript / css препроцессор закончил или позволил одному из рычагов мерзавца изменить его.

В теории Вы могли также использовать cachebreaker в качестве фиктивного параметра (как/js/script.min.js? cachebreak=0123456789abcfef), но тогда файл не кэшируется, по крайней мере, некоторыми прокси из-за" ? ".

0
ответ дан 27 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: