Re: статический контент и NodeJS Express
Илья Шипицин
chipitsine на gmail.com
Вт Сен 29 05:42:03 UTC 2020
вт, 29 сент. 2020 г. в 10:14, Cyril Zlachevsky <cyril.zlachevsky на gmail.com>:
> В middleware NextJS каталог public прописан как protected:
> protected generatePublicRoutes(): Route[] {
>
> Авторизация требуется только на загрузку файлов в данный каталог через
> запросы PUT и POST и реализована в Express.
> И насколько я представляю задачу, нужно, чтобы nginx знал об Express и
> динамический контент отдавал ему (на порт 3000 например), а работу со
> статикой брал на себя.
> Как этот функционал реализовать?
>
при помощи try_files
>
> пн, 28 сент. 2020 г. в 21:07, Alexey Galygin <mif на 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.zlachevsky на 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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20200929/6dd62d8f/attachment.htm>
Подробная информация о списке рассылки nginx-ru