Как уже писали выше, например, так:
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

Ответить