Назад к вопросам
Middle
144
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Nginx устанавливается перед Ruby-приложением (например, Rails или Sinatra) по следующим причинам:

  1. Обслуживание статических файлов: Nginx эффективно (быстрее и с меньшим потреблением ресурсов) отдает статические файлы (CSS, JS, изображения), освобождая Ruby-процессы для обработки динамических запросов.
  2. Обратный прокси: Nginx выступает в роли обратного прокси, принимая все входящие HTTP-запросы и перенаправляя их к Ruby-серверам (например, Puma, Unicorn) через протокол (например, HTTP или Unix Domain Socket). Это позволяет управлять несколькими Ruby-процессами и балансировать нагрузку между ними.
  3. SSL/TLS терминирование: Nginx может обрабатывать шифрованные SSL/TLS соединения, разгружая Ruby-приложение от этой задачи.
  4. Кэширование: Nginx может кэшировать ответы, что ускоряет отдачу часто запрашиваемого контента.
  5. Сжатие: Nginx может сжимать ответы (gzip, brotli), уменьшая объем передаваемых данных.
  6. Балансировка нагрузки: Nginx может распределять входящие запросы между несколькими экземплярами Ruby-приложения, повышая доступность и масштабируемость.
  7. Логирование: Nginx предоставляет мощные возможности по логированию HTTP-запросов.
  8. Безопасность: Nginx может выполнять базовые функции безопасности, такие как ограничение скорости запросов, блокировка IP-адресов и защита от некоторых видов атак (например, DDoS на уровне HTTP).
  9. Разделение ответственности: Nginx занимается инфраструктурными задачами (обслуживание HTTP, SSL), позволяя Ruby-приложению сосредоточиться на бизнес-логике.

Пример конфигурации Nginx для проксирования на Unicorn:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://unix:/path/to/your/app/tmp/sockets/unicorn.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Optional: serve static assets directly
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}