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:
- 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.
- 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.
- Terminowanie SSL/TLS: Nginx może obsługiwać zaszyfrowane połączenia SSL/TLS, odciążając aplikację Ruby od tego zadania.
- Buforowanie: Nginx może buforować odpowiedzi, przyspieszając dostarczanie często żądanych treści.
- Kompresja: Nginx może kompresować odpowiedzi (gzip, brotli), zmniejszając rozmiar przesyłanych danych.
- 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ść.
- Rejestrowanie: Nginx oferuje potężne możliwości rejestrowania żądań HTTP.
- 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).
- 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;
}
}