Statische Inhalte mit NGINX bereitstellen

Max Schneider
Max Schneider ·
Statische Inhalte mit NGINX bereitstellen

Als ich meinen ADHS-Kurs online gestellt habe, brauchte ich eine effiziente Möglichkeit, um Videos zu hosten, ohne dabei ein Vermögen für einen CDN (Content Delivery Network) auszugeben. Ein CDN wie Bunny.net hätte mich allein für die 8TB Bandbreite, die ich pro Monat brauche, ca. 80€ gekostet. Und das, obwohl mein aktueller VPS-Plan bereits 8TB für nur 10€ enthält! Klar, ein CDN ist schneller, weil es die Inhalte weltweit verteilt und an den nächsten Server schickt, aber mein Kurs ist auf Deutsch, daher brauche ich keine globale Auslieferung. Warum also mehr zahlen?

Ich habe mich also entschieden, meine Videos direkt über meinen VPS mit Nginx zu serven. Das spart mir nicht nur Geld, sondern nutzt auch meine bereits vorhandenen Ressourcen optimal aus.

Warum kein CDN?

Ein CDN hat seine Vorteile: Es liefert Inhalte schneller aus, weil es die Videos von einem geografisch näher gelegenen Server zu den Nutzern streamt. Wenn man weltweit Kunden hat oder große Traffic-Spitzen bewältigen muss, ist ein CDN oft die beste Wahl. In meinem Fall allerdings nicht. Da mein ADHS-Kurs auf Deutsch ist, liegt der Großteil meiner Zielgruppe in Deutschland und vielleicht ein paar deutschsprachigen Ländern in Europa. Da mein Server ebenfalls in Europa steht, gibt es keinen signifikanten Geschwindigkeitsvorteil, den ich durch ein CDN hätte.

Außerdem habe ich mir die Mühe gemacht, meine Videos zu komprimieren, was die Dateigröße deutlich reduziert und somit die Ladezeit sowie den Bandbreitenverbrauch minimiert. Natürlich sind die Videos nicht ganz so schnell wie mit einem CDN, aber schnell genug für meine Bedürfnisse. Und der größte Vorteil: Ich spare viel Geld!

Wie habe ich das Ganze technisch umgesetzt?

Der Plan war einfach: Videos direkt von meinem Server ausliefern und dabei sicherstellen, dass alles effizient läuft, ohne den Server zu überlasten. Dazu habe ich Nginx als Webserver verwendet, der die Videos direkt aus einem Verzeichnis meiner VPS serviert.

Hier ist der Code, den ich in meiner Nginx-Konfigurationsdatei verwendet habe:

 
server {
listen 80;
server_name api.healthy-devs.de;
 
    # Redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
 
}
 
server {
listen 443 ssl http2; # IPv4
listen [::]:443 ssl http2; # IPv6
server_name api.healthy-devs.de;
 
    # SSL-Zertifikate (hier Let’s Encrypt)
    ssl_certificate /etc/letsencrypt/live/api.healthy-devs.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.healthy-devs.de/privkey.pem;
 
    # SSL-Konfigurationen für Sicherheit
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
 
    # Sicherheits-Header hinzufügen
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 
    # Deaktivieren der Zugriffsprotokolle, um Protokollgröße zu verringern
    access_log off;
 
    # Der eigentliche Pfad für die Videos
    location /videos/ {
        alias /var/www/videos/;
 
        # Gzip für Videos deaktivieren (unnötig)
        gzip off;
 
        # Cache-Einstellungen für Videos, um die Ladezeiten zu verbessern
        expires 30d;
        add_header X-Cache-Status $upstream_cache_status;
        add_header Cache-Control "public, max-age=2592000, immutable";
        add_header Accept-Ranges bytes;
 
        # Optional: Zugriffssteuerung durch Passwortschutz
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
 
    # Alle anderen Anfragen geben 404 zurück
    location / {
        return 404;
    }
 
}
 

HTTPS erzwingen:

Der erste Serverblock sorgt dafür, dass jede HTTP-Anfrage automatisch zu HTTPS umgeleitet wird. Sicherheit ist immer wichtig, besonders wenn man vertrauliche Inhalte wie einen Online-Kurs hostet.

SSL/TLS Konfiguration:

Ich habe Let’s Encrypt verwendet, um kostenlose SSL-Zertifikate zu bekommen, und TLSv1.2 und TLSv1.3 als Protokolle aktiviert, um die neuesten Sicherheitsstandards zu erfüllen.

Video-Verzeichnis konfigurieren:

Die Videos liegen in einem bestimmten Ordner auf dem Server (/var/www/videos/), und Nginx greift über den Alias darauf zu. So werden sie direkt ausgeliefert, wenn jemand auf eine Video-URL zugreift.

Caching:

Durch die Cache-Control-Header werden die Videos im Browser des Nutzers für 30 Tage zwischengespeichert. Das spart Bandbreite, weil das Video nicht jedes Mal neu vom Server geladen werden muss, wenn ein Nutzer es mehrfach ansieht.

Passwortschutz:

Falls jemand unautorisiert auf die Videos zugreifen will, habe ich die Möglichkeit, einen einfachen Passwortschutz hinzuzufügen. So sind die Inhalte nur für registrierte Nutzer zugänglich.

Fazit

Mit dieser Lösung kann ich meine Videos schnell und effizient ausliefern, ohne zusätzliche Kosten für einen CDN-Dienst wie Bunny.net aufbringen zu müssen. Da meine Zielgruppe geografisch recht nah an meinem Server liegt und ich die Videos komprimiert habe, reicht die Geschwindigkeit völlig aus. Ich spare mir nicht nur den Aufwand, sondern vor allem auch eine Menge Geld!

Max

Hallo 👋 Ich bin Max dein freiberuflicher Softwareentwickler und Author des Blogs. Du kannst meine Arbeit auf Social Media verfolgen.

Mehr Blogbeiträge

Statische Inhalte mit NGINX bereitstellen
Max Schneider
Max Schneider
18.10.2024

Statische Inhalte mit NGINX bereitstellen

In diesem Blogbeitrag erkläre ich, wie ich meine Videos für meinen ADHS-Kurs kostengünstig und effizient über Nginx auf meinem eigenen VPS hoste, ohne auf ein teures CDN zurückzugreifen.

Die Wahrheit hinter Website-Angeboten für 499 Euro
Max Schneider
Max Schneider
11.10.2024

Die Wahrheit hinter Website-Angeboten für 499 Euro

In diesem Blogpost erkläre ich, warum eine Website für 499 Euro zwar verlockend klingt, aber langfristig teuer werden kann. Als professioneller Webdesigner zeige ich, welche Schritte in die Entwicklung einer hochwertigen Website einfließen und warum Qualität ihren Preis hat.

Tutorial-Hell? So lernst du neue Frameworks wirklich effektiv
Max Schneider
Max Schneider
04.10.2024

Tutorial-Hell? So lernst du neue Frameworks wirklich effektiv

In diesem Blogpost teile ich meine Erfahrungen, wie du dich nicht in endlosen Tech-Stacks verlieren solltest, sondern durch praktisches Lernen und einfache Projekte echte Fortschritte machen kannst.

Die Kunst des smarten Arbeitens
Max Schneider
Max Schneider
03.10.2024

Die Kunst des smarten Arbeitens

In diesem Blogpost teile ich meine persönliche Erfahrung darüber, wie ich gelernt habe, smart statt hart zu arbeiten. Wir werden die Vorteile des smarten Arbeitens, die Kernelemente dieser Herangehensweise und wie sie zu einer besseren Work-Life-Balance führen kann, erkunden.