В middleware NextJS каталог public прописан как protected:
protected generatePublicRoutes(): Route[] {

Авторизация требуется только на загрузку файлов в данный каталог через
запросы PUT и POST и реализована в Express.
И насколько я представляю задачу, нужно, чтобы nginx знал об Express и
динамический контент отдавал ему (на порт 3000 например), а работу со
статикой брал на себя.
Как этот функционал реализовать?

пн, 28 сент. 2020 г. в 21:07, Alexey Galygin <m...@me.com>:
>
> Express действительно любит кэшировать состояния (правда это больше касается 
> шаблонов — он их компилирует и больше не проверяет, но слышать про файлы 
> такое удивительно, возможно используемое раздающее middleware придерживается 
> другой политики)
>

> обычная практика в таких случаях:
>
> выделение «датахранилки» — папки, которую через настроенный location раздаёт 
> nginx напрямую
> с кэшами (заголовки и настройки добавить по вкусу)
> https://nginx.org/ru/docs/beginners_guide.html#static
>
> вся статика складывается туда, и нет смысла грузить backend непрофильными 
> запросами вообще — nginx отстреляется лучше всего
>
> если каким-то файлам требуется авторизация, можно сделать дополнительный 
> internal location и с backend после проверки кидать туда (через 
> x-accel-redirect — 
> https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/)
> и nginx опять таки отдаст статику напрямую и быстрее любой backend логики
>
> более того, можно сделать, чтобы правильна работала отдача частичного 
> контента (bytes range) и эффективная раздача с диска
>
> всё что не попадает под пути хранилки проксировать на Express
>
> On 28 Sep 2020, at 20:08, Cyril Zlachevsky <cyril.zlachev...@gmail.com> wrote:
>
> Есть приложение на NodeJS, которое прекрасно работает в
> developer-режиме. В качестве http-сервера используется ExpressJS.
> В production-режиме появляется проблема - http GET запросы возвращают
> 404-ю ошибку для всех новых файлов, загруженных после старта приложения
> в каталог public.
>
> Пример: если до старта файл public/static/old.jpg существовал, GET
> запрос вернет его с кодом 200.
> Если мы загрузили через nodejs-приложение файл public/static/new.jpg
> GET-запрос будет возвращать ошибку 404. Если перезапустить приложение,
> GET на public/static/new.jpg будет возвращать 200.
>
> Гугление проблемы привело к пониманию, что это не ошибка, а особенность
> Express-сервера и для production рекомендуется использовать связку
> nginx+express. Как мне настроить работу этой связки, я не вполне
> представляю, поэтому прошу помощи здесь.
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить