вт, 29 сент. 2020 г. в 12:11, Cyril Zlachevsky <cyril.zlachev...@gmail.com>:
> спасибо за помощь, все заработало как надо, с небольшими изменениями - > в строке конфига nginx > root root /var/www/path/to/static; > не нужно указывать в конце static, иначе nginx будет добавлять static > два раза в запрос и не находить запрашиваемый файл: > 2020/09/29 09:21:30 [error] 1530#1530: *179 open() > > "home/user/src/nodejs-app/public/static/static/paintings/ekGLnI-1601359891434.jpg" > failed (2: No such file or directory), client: 127.0.0.1, server: , > request: "GET /static/paintings/ekGLnI-1601359891434.jpg HTTP/1.1", > host: "127.0.0.1:8080", referrer: > "http://127.0.0.1:8080/admin/paintings/16" > > В итоге рабочий конфиг у меня получился такой: > server { > listen 8080; > location / { > proxy_pass http://127.0.0.1:3000; > } > > location /static/ { > root /home/user/src/nodejs-app/public/; > } > } > > Осталось как-то проверить, будут ли отклоняться запросы PUT и > POST-запросы к каталогу public/static, не содержащие кук авторизации - > эта проверка есть на бек-энде, но я не уверен, сработает ли она в > текущей связке с nginx. > curl -X POST ... curl -X PUT ... > > > вт, 29 сент. 2020 г. в 08:44, fox <red-f...@ya.ru>: > > > > Как уже писали выше, например, так: > > 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