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:
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!