Sobes.tech
Middle

Zašto instalirati Nginx pre Ruby?

sobes.tech АИ

Одговор од АИ

Nginx se instalira pre Ruby aplikacije (npr. Rails ili Sinatra) iz sledećih razloga:

  1. Servis statičkih fajlova: Nginx efikasno (brže i sa manje resursa) isporučuje statičke fajlove (CSS, JS, slike), oslobađajući Ruby procese za obradu dinamičkih zahteva.
  2. Obrnuti proxy: Nginx funkcioniše kao obrnuti proxy, prihvata sve dolazne HTTP zahteve i prosleđuje ih Ruby serverima (npr. Puma, Unicorn) putem protokola (npr. HTTP ili Unix Domain Socket). Ovo omogućava upravljanje više Ruby procesa i balansiranje opterećenja.
  3. SSL/TLS terminacija: Nginx može da rukuje šifrovanim SSL/TLS vezama, rasterećujući Ruby aplikaciju od tog zadatka.
  4. Keširanje: Nginx može keširati odgovore, ubrzavajući isporuku često traženog sadržaja.
  5. Kompresija: Nginx može kompresovati odgovore (gzip, brotli), smanjujući obim prenesenih podataka.
  6. Balansiranje opterećenja: Nginx može rasporediti dolazne zahteve između više instanci Ruby aplikacije, povećavajući dostupnost i skalabilnost.
  7. Logovanje: Nginx pruža moćne mogućnosti za logovanje HTTP zahteva.
  8. Bezbednost: Nginx može obavljati osnovne funkcije bezbednosti, kao što su ograničenje brzine zahteva, blokiranje IP adresa i zaštita od određenih vrsta napada (npr. DDoS na nivou HTTP).
  9. Razdvajanje odgovornosti: Nginx se bavi infrastrukturnim zadacima (upravljanje HTTP, SSL), omogućavajući Ruby aplikaciji da se fokusira na poslovnu logiku.

Primer konfiguracije Nginx za proxy na 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;
    }

    # Opcionalno: direktno posluživanje statičkih resursa
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}