Sobes.tech
Middle

Kodėl reikia įdiegti Nginx prieš Ruby?

sobes.tech AI

Atsakymas iš AI

Nginx įdiegiama prieš Ruby programą (pavyzdžiui, Rails ar Sinatra) dėl šių priežasčių:

  1. Statinių failų aptarnavimas: Nginx efektyviai (greičiau ir su mažesniais ištekliais) teikia statinius failus (CSS, JS, paveikslėlius), atlaisvindamas Ruby procesus dinamiškiems užklausoms apdoroti.
  2. Atgalinis proxy: Nginx veikia kaip atgalinis proxy, priima visus įeinančius HTTP užklausimus ir nukreipia juos į Ruby serverius (pavyzdžiui, Puma, Unicorn) per protokolą (pavyzdžiui, HTTP arba Unix Domain Socket). Tai leidžia valdyti kelis Ruby procesus ir paskirstyti apkrovą.
  3. SSL/TLS terminavimas: Nginx gali apdoroti šifruotus SSL/TLS ryšius, sumažindamas Ruby programos naštą.
  4. Talpykla: Nginx gali talpinti atsakymus, pagreitindamas dažnai užklausiamą turinį.
  5. Suspaudimas: Nginx gali suspausti atsakymus (gzip, brotli), sumažindamas perduodamų duomenų kiekį.
  6. Našumo paskirstymas: Nginx gali paskirstyti įeinančias užklausas tarp kelių Ruby programos egzempliorių, didinant prieinamumą ir mastelį.
  7. Žurnalo įrašymas: Nginx siūlo galingas galimybes HTTP užklausų žurnalo įrašymui.
  8. Saugumas: Nginx gali atlikti pagrindines saugumo funkcijas, tokias kaip greičio ribojimas, IP adresų blokavimas ir apsauga nuo tam tikrų atakų (pavyzdžiui, DDoS HTTP lygyje).
  9. Atsakomybės pasidalijimas: Nginx rūpinasi infrastruktūros užduotimis (HTTP, SSL aptarnavimas), leidžiant Ruby programai susitelkti į verslo logiką.

Pavyzdinė Nginx konfigūracija Unicorn priekiniam serveriui:

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;
    }

    # Pasirinktinai: tiesiogiai aptarnauti statinius failus
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}