Sobes.tech
Middle

Dlaczego najpierw instalujemy Nginx przed Ruby?

sobes.tech AI

Odpowiedź od AI

Nginx jest instalowany przed aplikacją Ruby (np. Rails lub Sinatra) z następujących powodów:

  1. Obsługa plików statycznych: Nginx efektywnie (szybciej i z mniejszym zużyciem zasobów) serwuje pliki statyczne (CSS, JS, obrazy), odciążając procesy Ruby do obsługi żądań dynamicznych.
  2. Proxy odwrotne: Nginx działa jako proxy odwrotne, przyjmując wszystkie przychodzące żądania HTTP i przekierowując je do serwerów Ruby (np. Puma, Unicorn) przez protokół (np. HTTP lub Unix Domain Socket). Pozwala to na zarządzanie wieloma procesami Ruby i równoważenie obciążenia.
  3. Terminowanie SSL/TLS: Nginx może obsługiwać zaszyfrowane połączenia SSL/TLS, odciążając aplikację Ruby od tego zadania.
  4. Buforowanie: Nginx może buforować odpowiedzi, przyspieszając dostarczanie często żądanych treści.
  5. Kompresja: Nginx może kompresować odpowiedzi (gzip, brotli), zmniejszając rozmiar przesyłanych danych.
  6. Równoważenie obciążenia: Nginx może rozdzielać przychodzące żądania między wiele instancji aplikacji Ruby, zwiększając dostępność i skalowalność.
  7. Rejestrowanie: Nginx oferuje potężne możliwości rejestrowania żądań HTTP.
  8. Bezpieczeństwo: Nginx może wykonywać podstawowe funkcje bezpieczeństwa, takie jak ograniczanie prędkości żądań, blokowanie adresów IP i ochrona przed niektórymi rodzajami ataków (np. DDoS na poziomie HTTP).
  9. Podział obowiązków: Nginx zajmuje się zadaniami infrastrukturalnymi (obsługa HTTP, SSL), pozwalając aplikacji Ruby skupić się na logice biznesowej.

Przykład konfiguracji Nginx do 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;
    }

    # Opcjonalnie: serwowanie statycznych zasobów bezpośrednio
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}