<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">Express действительно любит кэшировать состояния (правда это больше касается шаблонов — он их компилирует и больше не проверяет, но слышать про файлы такое удивительно, возможно используемое раздающее middleware придерживается другой политики)</div><div class=""><br class=""></div>обычная практика в таких случаях:<div class=""><br class=""></div><div class="">выделение «датахранилки» — папки, которую через настроенный location раздаёт nginx напрямую</div><div class="">с кэшами (заголовки и настройки добавить по вкусу)</div><div class=""><a href="https://nginx.org/ru/docs/beginners_guide.html#static" class="">https://nginx.org/ru/docs/beginners_guide.html#static</a></div><div class=""><br class=""></div><div class="">вся статика складывается туда, и нет смысла грузить backend непрофильными запросами вообще — nginx отстреляется лучше всего</div><div class=""><br class=""></div><div class="">если каким-то файлам требуется авторизация, можно сделать дополнительный internal location и с backend после проверки кидать туда (через x-accel-redirect — <a href="https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/" class="">https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/</a>)</div><div class="">и nginx опять таки отдаст статику напрямую и быстрее любой backend логики</div><div class=""><br class=""></div><div class="">более того, можно сделать, чтобы правильна работала отдача частичного контента (bytes range) и эффективная раздача с диска</div><div class=""><br class=""></div><div class="">всё что не попадает под пути хранилки проксировать на Express</div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 28 Sep 2020, at 20:08, Cyril Zlachevsky <<a href="mailto:cyril.zlachevsky@gmail.com" class="">cyril.zlachevsky@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Есть приложение на NodeJS, которое прекрасно работает в<br class="">developer-режиме. В качестве http-сервера используется ExpressJS.<br class="">В production-режиме появляется проблема - http GET запросы возвращают<br class="">404-ю ошибку для всех новых файлов, загруженных после старта приложения<br class="">в каталог public.<br class=""><br class="">Пример: если до старта файл public/static/old.jpg существовал, GET<br class="">запрос вернет его с кодом 200.<br class="">Если мы загрузили через nodejs-приложение файл public/static/new.jpg<br class="">GET-запрос будет возвращать ошибку 404. Если перезапустить приложение,<br class="">GET на public/static/new.jpg будет возвращать 200.<br class=""><br class="">Гугление проблемы привело к пониманию, что это не ошибка, а особенность<br class="">Express-сервера и для production рекомендуется использовать связку<br class="">nginx+express. Как мне настроить работу этой связки, я не вполне<br class="">представляю, поэтому прошу помощи здесь.<br class="">_______________________________________________<br class="">nginx-ru mailing list<br class=""><a href="mailto:nginx-ru@nginx.org" class="">nginx-ru@nginx.org</a><br class="">http://mailman.nginx.org/mailman/listinfo/nginx-ru</div></div></blockquote></div><br class=""></div></body></html>