Как уже писали выше, например, так: server { location / { proxy_pass http://127.0.0.1:3000; }
location /public/static/ { root /var/www/path/to/static; } } 29.09.2020 12:14, Cyril Zlachevsky пишет: > В 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 > _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru