Зачем устанавливать Nginx перед Ruby-приложением?

Nginx может отдавать статику и принимать внешние HTTP-запросы перед Puma или другим сервером Ruby-приложения. Это полезный, но необязательный слой инфраструктуры.

Короткий ответ

Что ответить на собеседовании

Nginx используют как обратный прокси: для TLS, статики, сжатия, балансировки и ограничений запросов. Динамику он передаёт серверу приложения, например Puma. Nginx необязателен: часть задач может выполнять облачный балансировщик или сам сервер приложения. Кеширование персональных ответов и доверие к forwarded-заголовкам требуют отдельной настройки; ограничения запросов не заменяют полноценную DDoS-защиту.

Подробный разбор

Ответ с пояснениями

Обычно Nginx ставят не «перед языком Ruby», а перед сервером Ruby-приложения, например Puma или Unicorn. Клиент обращается к Nginx, а тот либо отдаёт статический файл, либо передаёт запрос приложению как обратный прокси. Так можно централизовать TLS-сертификаты, раздачу статики, ограничения размера запросов и правила маршрутизации. Руководство Nginx

Дополнительные задачи — балансировка между несколькими экземплярами приложения и сжатие ответов. Gzip поддерживается штатным модулем; для Brotli нужен отдельный модуль или сборка с ним, поэтому обещать его наличие в любой установке нельзя. Балансировка, gzip, модуль Brotli

Иллюстративный фрагмент внутри server, если Puma уже слушает 127.0.0.1:3000, а Nginx — единственный внешний прокси:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Это не полный production-конфиг: здесь нет настройки TLS, домена, таймаутов и ограничений. Пример перезаписывает X-Forwarded-For, а не принимает присланную клиентом цепочку за достоверную. Приложение должно доверять таким заголовкам только от известных прокси; при нескольких промежуточных узлах схему доверия проектируют отдельно. Проксирование

Кеширование динамических ответов включают осознанно: личный кабинет нельзя бездумно помещать в общий кеш. Учитывают авторизацию, cookie, Cache-Control и состав ключа. Ограничение частоты запросов снижает часть прикладной нагрузки, но не защищает само по себе от переполнения внешнего сетевого канала. Ограничение запросов

Наконец, Nginx не обязателен: нужные функции могут уже обеспечиваться внешним балансировщиком, а Puma способен принимать HTTP-запросы самостоятельно. Решение зависит от архитектуры и требований, а не от самого факта использования Ruby. Возможности Puma

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку