Sobes.tech
Middle

Prečo inštalovať Nginx pred Ruby?

sobes.tech AI

Odpoveď od AI

Nginx sa inštaluje pred Ruby aplikáciou (napríklad Rails alebo Sinatra) z nasledujúcich dôvodov:

  1. Obsluha statických súborov: Nginx efektívne (rýchlejšie a s menším využitím zdrojov) poskytuje statické súbory (CSS, JS, obrázky), čím uvoľňuje Ruby procesy na spracovanie dynamických požiadaviek.
  2. Reverse proxy: Nginx funguje ako reverzný proxy, prijíma všetky prichádzajúce HTTP požiadavky a ich presmeruje na Ruby servery (napríklad Puma, Unicorn) cez protokol (napríklad HTTP alebo Unix Domain Socket). To umožňuje spravovať viac Ruby procesov a vyvažovať záťaž.
  3. SSL/TLS terminácia: Nginx môže spracovávať šifrované SSL/TLS spojenia, odľahčujúc Ruby aplikáciu od tejto úlohy.
  4. Caching: Nginx môže ukladať odpovede do cache, čo zrýchľuje doručovanie často požadovaného obsahu.
  5. Komprimácia: Nginx môže komprimovať odpovede (gzip, brotli), znižujúc objem prenášaných dát.
  6. Vyvažovanie záťaže: Nginx môže rozdeľovať prichádzajúce požiadavky medzi viac inštancií Ruby aplikácie, zvyšujúc dostupnosť a škálovateľnosť.
  7. Logovanie: Nginx ponúka výkonné možnosti logovania HTTP požiadaviek.
  8. Bezpečnosť: Nginx môže vykonávať základné bezpečnostné funkcie, ako je obmedzenie rýchlosti požiadaviek, blokovanie IP adries a ochrana pred niektorými typmi útokov (napríklad DDoS na úrovni HTTP).
  9. Oddelenie zodpovedností: Nginx sa zaoberá infraštruktúrnymi úlohami (obsluha HTTP, SSL), čo umožňuje Ruby aplikácii sústrediť sa na biznis logiku.

Príklad konfigurácie Nginx pre 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;
    }

    # Voliteľné: priamy servis statických aktív
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}