Sobes.tech
Middle

¿Por qué instalar Nginx antes de Ruby?

sobes.tech AI

Respuesta de la IA

Nginx se instala delante de la aplicación Ruby (por ejemplo, Rails o Sinatra) por las siguientes razones:

  1. Servicio de archivos estáticos: Nginx entrega de manera eficiente (más rápido y con menor consumo de recursos) archivos estáticos (CSS, JS, imágenes), liberando procesos Ruby para manejar solicitudes dinámicas.
  2. Proxy inverso: Nginx actúa como proxy inverso, aceptando todas las solicitudes HTTP entrantes y redirigiéndolas a los servidores Ruby (por ejemplo, Puma, Unicorn) a través de un protocolo (por ejemplo, HTTP o socket Unix). Esto permite gestionar múltiples procesos Ruby y equilibrar la carga entre ellos.
  3. Terminación SSL/TLS: Nginx puede manejar conexiones SSL/TLS cifradas, descargando a la aplicación Ruby de esta tarea.
  4. Caché: Nginx puede almacenar en caché las respuestas, acelerando la entrega de contenido solicitado con frecuencia.
  5. Compresión: Nginx puede comprimir las respuestas (gzip, brotli), reduciendo el volumen de datos transmitidos.
  6. Balanceo de carga: Nginx puede distribuir las solicitudes entrantes entre varias instancias de la aplicación Ruby, aumentando la disponibilidad y escalabilidad.
  7. Registro: Nginx ofrece potentes capacidades de registro de solicitudes HTTP.
  8. Seguridad: Nginx puede realizar funciones básicas de seguridad, como limitar la velocidad de solicitudes, bloquear direcciones IP y proteger contra ciertos tipos de ataques (por ejemplo, DDoS a nivel HTTP).
  9. Separación de responsabilidades: Nginx se encarga de tareas de infraestructura (manejo de HTTP, SSL), permitiendo que la aplicación Ruby se concentre en la lógica de negocio.

Ejemplo de configuración de Nginx para proxy a 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;
    }

    # Opcional: servir archivos estáticos directamente
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}