Назад | Перейти на главную страницу

Как правильно разместить Nginx перед приложением Node.js Docker для развертывания AWS ECS?

У нас есть приложение Node.js / Express, которое развертывается как контейнеры Docker в AWS ECS. В этом приложении есть несколько статических ресурсов (CSS, JS), и я хотел бы, чтобы запросы на эти ресурсы обходили Node.js и обслуживались непосредственно Nginx из соображений производительности.

В настоящее время у нас есть docker-compose, запускающий контейнер Nginx, а Nginx настроен с правилом proxy_pass для проксирования и кэширования статических ресурсов из контейнера Node следующим образом:

  location /static {
    proxy_cache STATIC;
    proxy_pass http://nodejs;
  }

Проблема с этим подходом заключается в том, что первый запрос любого статического актива по-прежнему обслуживается Node.js, и только затем кешируется Nginx.

Я хотел бы полностью обойти Node.js для этих ресурсов.

а) Как лучше всего достичь этой цели?

б) я думал об использовании volumes, но в контексте ECS, если мы сделаем это и развернем несколько контейнеров на одном хосте AWS (например, несколько копий Node, контейнеров Nginx, работающих в одном экземпляре EC2), это вызовет проблемы, поскольку все они пытаются смонтировать тот же каталог в файловой системе?

Мы будем очень благодарны за любые рекомендации, поскольку мы не смогли найти какой-либо передовой подход к тому, как справиться с этой ситуацией. Спасибо.

Если это полезно для кого-то еще, вот решение, на которое мы сейчас остановились ...

Настроить docker-compose.yml с дополнительным контейнером Nginx с общим томом для статических ресурсов, например:

version: '3'
 services:
  nodejs:
   build: ./
   volumes:
    - asset-volume:/opt/nodejs_app/static
  nginx:
   build: ./nginx
   ports:
    - 80:80
   volumes:
    - asset-volume:/var/lib/assets:ro

volumes:
 asset-volume:

Затем настройте Nginx default.conf для псевдонима запросов к / static к этому тому:

  location /static {
    alias /var/lib/assets;
    try_files $uri $uri/ =404;
  }

Это позволяет избежать использования proxy_pass для Node.js для получения статических ресурсов, которые теперь могут обслуживаться непосредственно Nginx.

Есть ли отзывы об этой реализации? Есть лучший способ сделать это?