Sobes.tech
Middle

Perché installare Nginx prima di Ruby?

sobes.tech AI

Risposta dell'AI

Nginx viene installato davanti all'app Ruby (ad esempio, Rails o Sinatra) per i seguenti motivi:

  1. Servizio di file statici: Nginx consegna in modo efficiente (più veloce e con meno risorse) i file statici (CSS, JS, immagini), liberando i processi Ruby per gestire richieste dinamiche.
  2. Proxy inverso: Nginx agisce come proxy inverso, accettando tutte le richieste HTTP in ingresso e reindirizzandole ai server Ruby (ad esempio, Puma, Unicorn) tramite un protocollo (ad esempio, HTTP o socket Unix). Questo permette di gestire più processi Ruby e bilanciare il carico tra di essi.
  3. Terminazione SSL/TLS: Nginx può gestire connessioni SSL/TLS criptate, scaricando questa attività dall'app Ruby.
  4. Caching: Nginx può memorizzare in cache le risposte, accelerando la consegna di contenuti richiesti frequentemente.
  5. Compressione: Nginx può comprimere le risposte (gzip, brotli), riducendo il volume dei dati trasmessi.
  6. Bilanciamento del carico: Nginx può distribuire le richieste in ingresso tra più istanze dell'app Ruby, aumentando disponibilità e scalabilità.
  7. Registrazione: Nginx offre potenti capacità di registrazione delle richieste HTTP.
  8. Sicurezza: Nginx può eseguire funzioni di sicurezza di base, come limitare la velocità delle richieste, bloccare indirizzi IP e proteggere da alcuni tipi di attacchi (ad esempio, DDoS a livello HTTP).
  9. Separazione delle responsabilità: Nginx si occupa di compiti infrastrutturali (gestione HTTP, SSL), permettendo all'app Ruby di concentrarsi sulla logica di business.

Esempio di configurazione Nginx per 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;
    }

    # Opzionale: servire asset statici direttamente
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}