Sobes.tech
Middle

Por que instalar o Nginx antes do Ruby?

sobes.tech IA

Resposta da IA

O Nginx é instalado antes da aplicação Ruby (por exemplo, Rails ou Sinatra) pelos seguintes motivos:

  1. Serviço de ficheiros estáticos: O Nginx entrega de forma eficiente (mais rápido e com menor consumo de recursos) ficheiros estáticos (CSS, JS, imagens), libertando processos Ruby para lidar com pedidos dinâmicos.
  2. Proxy reverso: O Nginx atua como proxy reverso, aceitando todas as solicitações HTTP entrantes e redirecionando-as para os servidores Ruby (por exemplo, Puma, Unicorn) através de um protocolo (por exemplo, HTTP ou socket Unix). Isto permite gerir múltiplos processos Ruby e equilibrar a carga entre eles.
  3. Terminação SSL/TLS: O Nginx pode lidar com ligações SSL/TLS encriptadas, descarregando essa tarefa para a aplicação Ruby.
  4. Caching: O Nginx pode armazenar em cache as respostas, acelerando a entrega de conteúdo frequentemente solicitado.
  5. Compressão: O Nginx pode comprimir as respostas (gzip, brotli), reduzindo o volume de dados transmitidos.
  6. Balanceamento de carga: O Nginx pode distribuir as solicitações entrantes entre várias instâncias da aplicação Ruby, aumentando a disponibilidade e escalabilidade.
  7. Registo: O Nginx oferece capacidades poderosas de registo de pedidos HTTP.
  8. Segurança: O Nginx pode realizar funções básicas de segurança, como limitar a velocidade de pedidos, bloquear endereços IP e proteger contra certos tipos de ataques (por exemplo, DDoS ao nível HTTP).
  9. Separação de responsabilidades: O Nginx trata de tarefas de infraestrutura (gestão de HTTP, SSL), permitindo que a aplicação Ruby se concentre na lógica de negócio.

Exemplo de configuração do Nginx para proxy para 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 ativos estáticos diretamente
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}