Про обновление кеша статики была предыдущая статья, а здесь я хочу дать рецепт в стиле "средствами nginx". Такой подход подойдет для only-html сайтов, без использования динамики при формировании страниц. Пусть в нашем примере на работающем production-сервере лежит код из ветки master, а на dev/test серверах мы не хотим иметь каких-либо сложностей с кешем.
Внутри production конфига нам надо включить ssi и разрешить доступ к файлу с номером коммита только для самого nginx:
server { ... ssi on; ... location = /.git/refs/heads/master { internal; } ... }
А вот вариант конфига для dev/test-среды:
server { ... ssi on; ... location = /.git/refs/heads/master { internal; return 200 $msec; } ... }
Выполняем применение конфига:
user@server$ sudo /etc/init.d/nginx reload
Возьмем пример кода до наших правок:
<!DOCTYPE html> <html> <head> <script src="/js/jquery.js" type="text/javascript"></script> <script src="/js/app.js" type="text/javascript"></script> </head> ....
А задача - добавить динамический параметр, который обновит кеш статики при ее релизе. Для этого нам придется прочитать документацию nginx по ssi, и посмотреть на пример ниже:
<!DOCTYPE html> <html> <head> <script src="/js/jquery.js?<!--# include file="/.git/refs/heads/master" -->" type="text/javascript"></script> <script src="/js/app.js?<!--# include file="/.git/refs/heads/master" -->" type="text/javascript"></script> </head> ....
В случае prod-среды в результате работы nginx html на выходе станет таким:
<script src="/js/jquery.js?c3cabd10fda4b10b3901dd427ef04588399ac7f7" type="text/javascript"></script> <script src="/js/app.js?c3cabd10fda4b10b3901dd427ef04588399ac7f7" type="text/javascript"></script>
В случае dev/test-среды таким:
<script src="/js/jquery.js?1512108234.679" type="text/javascript"></script> <script src="/js/app.js?1512108234.679" type="text/javascript"></script>
Но всё же, лучше использовать фреймворки, которые делают это сами своим штатным способом, чем изобретать велосипеды.
Особенности серверных приложений, работающих с сетью IoT-устройств на практике и в теории
Если считаете, что парсинг Вашего сайта - проблема, то эта статья для Вас.
В проекте морской навигации есть особенность, грамотная реализация которой и позволяет жить всей системе
Docker Registry - установка и использование хранилища образов Docker
Какой правильно ставить expires (время жизни кеша) и как его правильно сбрасывать?