Sobes.tech
Middle

Warum Nginx vor Ruby installieren?

sobes.tech KI

Antwort von AI

Nginx wird vor der Ruby-Anwendung (z. B. Rails oder Sinatra) aus folgenden Gründen installiert:

  1. Servieren statischer Dateien: Nginx liefert statische Dateien (CSS, JS, Bilder) effizienter (schneller und mit weniger Ressourcenverbrauch), wodurch Ruby-Prozesse für die Verarbeitung dynamischer Anfragen frei werden.
  2. Reverse Proxy: Nginx fungiert als Reverse Proxy, akzeptiert alle eingehenden HTTP-Anfragen und leitet sie an Ruby-Server (z. B. Puma, Unicorn) über ein Protokoll (z. B. HTTP oder Unix-Domain-Socket) weiter. Dies ermöglicht die Verwaltung mehrerer Ruby-Prozesse und das Lastenausgleich.
  3. SSL/TLS-Terminierung: Nginx kann verschlüsselte SSL/TLS-Verbindungen handhaben und die Ruby-Anwendung von dieser Aufgabe entlasten.
  4. Caching: Nginx kann Antworten zwischenspeichern, um die Auslieferung häufig angeforderter Inhalte zu beschleunigen.
  5. Komprimierung: Nginx kann Antworten komprimieren (gzip, brotli), um die Datenmenge zu verringern.
  6. Lastverteilung: Nginx kann eingehende Anfragen auf mehrere Instanzen der Ruby-Anwendung verteilen, um Verfügbarkeit und Skalierbarkeit zu erhöhen.
  7. Protokollierung: Nginx bietet leistungsstarke Möglichkeiten zur Protokollierung von HTTP-Anfragen.
  8. Sicherheit: Nginx kann grundlegende Sicherheitsfunktionen ausführen, wie z. B. Ratenbegrenzung, IP-Blockierung und Schutz vor bestimmten Angriffen (z. B. DDoS auf HTTP-Ebene).
  9. Aufgabentrennung: Nginx kümmert sich um Infrastrukturaufgaben (HTTP, SSL), sodass sich die Ruby-Anwendung auf die Geschäftslogik konzentrieren kann.

Beispielkonfiguration für Nginx zum Proxy auf 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;
    }

    # Optional: Statische Assets direkt bereitstellen
    location ~* \.(css|js|jpg|jpeg|gif|png|html)$ {
        root /path/to/your/app/public;
        expires 1d;
    }
}