Serverless Computing ist ein spannendes Konzept. Man kann ein Skript oder Programm ausführen, ohne die komplette Infrastruktur dahinter aufzubauen (Server, Storage, Netzwerke usw.). Man schreibt einfach den Code und er wird ausgeführt. Aber Serverless heißt nicht „ohne Server“ – man muss sich nur nicht darum kümmern. Das ist gar nicht so weit weg von klassischem Webspace beim Hoster, auf den man PHP-Skripte legt.
Heute meint Serverless meistens eine moderne Architektur, mit der man Anwendungscode ausführen kann. Der große Unterschied ist das Skalieren. Der Cloud-Anbieter übernimmt die Logik, wann und wie Serverless-Funktionen laufen. Wenn die Anwendung nicht genutzt wird, wird nichts ausgeführt und es werden keine Rechenressourcen verbraucht.
Mein Serverless-Anwendungsfall
Ich habe ab und zu einfach nur meine öffentliche IP-Adresse gebraucht, ohne mich mit irgendeinem systemabhängigen Kram herumzuschlagen. Der einfachste Weg dafür ist eine der gefühlt 1,5 Milliarden Websites, die die IP-Adresse des Besuchers anzeigen.
Das Problem: Viele dieser Seiten sind nervig, voller Werbung, Tracking und unnötiger Informationen. Ich konnte nie sicher sein, ob die jeweilige Seite wirklich vertrauenswürdig ist. Selbst wenn sie heute okay ist, muss das morgen nicht mehr so sein. Also habe ich meine eigene Seite gebaut, die nur die IP-Adresse anzeigt.
Serverless mit Vercel
Mein erster Versuch lief mit Vercel. Dieses Blog hoste ich dort bereits als statische Seite mit Jekyll und GitHub-Integration. Ich wusste, dass Vercel auch Serverless Functions unterstützt. Also habe ich eine statische Jamstack-Seite gebaut und dann per JavaScript-AJAX-Request die IP-Adresse über eine selbst geschriebene JSON-API abgefragt, die als Serverless Function läuft.
Das ist tatsächlich ziemlich einfach gewesen.
- Ein neues GitHub-Repository erstellen und mit Vercel verbinden
- Eine “.js”-Datei im Unterordner “api” erstellen.
Diesen Code habe ich verwendet, um die IP-Adresse des Besuchers als einfache JSON-Antwort zurückzugeben:
| |
Sauber! Vercel liefert bei jedem Request die Client-IP-Adresse in req.headers['x-forwarded-for'].

Danach habe ich ein kleines clientseitiges JavaScript geschrieben, das die API-URL aufruft und die IP-Adresse abholt. Wow – Microservice-Denken auf den Punkt 😅.
Ich hatte schnell eine funktionierende Frontend-Seite, bis ich gemerkt habe: Vercel unterstützt kein IPv6. Ups. Egal, das Frontend konnte ich weiter nutzen – ich musste nur den Backend-Anbieter wechseln.
Wechsel zu Serverless mit Cloudflare Workers
Also bin ich auf Cloudflare Workers gewechselt. Hauptsächlich, weil dort IPv4 und IPv6 unterstützt werden. Da Cloudflare Workers die IP-Adresse des Besuchers anders bereitstellt, musste ich mein komplettes Backend neu schreiben 🤭. Daraus ist dieser Code entstanden:
| |
Obwohl ich es simpel halten wollte, war die Standortinfo einfach zu cool, um sie wegzulassen 😅. Deshalb gebe ich jetzt zusätzlich einen geschätzten Standort mit Stadt und Land zurück. Die Stadt ist oft nicht ganz korrekt, das Land passt aber meistens.
Cool.

Die statische Seite auf Cloudflare Pages
Danach habe ich meine statische Seite auf Cloudflare Pages gelegt. Weil ich kein aufgeblasenes Framework nutzen wollte, habe ich die Seite mit W3.CSS gestylt und den AJAX-Request selbst gebaut. Das war nicht gerade Best-Practice-JavaScript, hat aber für mich funktioniert. Ich habe sogar eine Methode eingebaut, die auch mit Internet Explorer 5 und 6 laufen soll – auch wenn ich das nicht getestet habe.
| |
Anschließend habe ich eine Funktion gebaut, um die IP-Adresse in die Zwischenablage zu kopieren. Es gibt einen legacy Weg mit document.execCommand("copy"); und den modernen Weg über die Clipboard API navigator.clipboard.writeText();. Ich habe beide umgesetzt: erst modern, dann als Fallback die Legacy-Methode.
| |
Damit war ich eigentlich fertig – also habe ich die Architektur natürlich nochmal umgebaut 🙄.
NoScript first – Cloudflare Workers Sites
Dann habe ich gemerkt, dass mir mein Ansatz aus zwei Gründen nicht gefallen hat:
- Die Website braucht clientseitiges JavaScript. Ich nutze selbst NoScript (oder ScriptSafe) und mag Seiten nicht, die ohne JS nicht sauber funktionieren.
- Um die IP-Adresse anzuzeigen, hätte der Nutzer einen zusätzlichen, unnötigen GET-Request ausgelöst. Ich konnte schneller liefern, wenn alle Informationen direkt mit einer Anfrage kommen.
Also habe ich weiter gesucht und Cloudflare Workers Sites gefunden. Das kombiniert im Grunde die Möglichkeiten von Cloudflare Pages (statische Seiten über ein globales CDN ausliefern) mit Cloudflare Workers. Die statischen Teile wie .html und .css landen in Cloudflare KV und werden global verteilt. Mit HTMLRewriter injiziere ich dann nur IP-Adresse und Standort in meine statische HTML-Seite, bevor sie an den Nutzer ausgeliefert wird.
Das Umschreiben passiert nur für index.html und setzt die Werte der HTML-Elemente mit den IDs ipaddress und location.
| |
Fazit
Die Seite läuft, und der Quellcode ist auf GitHub verfügbar. Schaut es euch gern an. Ich bin mir zu 100 % sicher: Mit klassischem Shared Webspace und etwas PHP wäre das deutlich einfacher gewesen. Aber der Weg ist hier wichtiger gewesen als nur das Ergebnis. Es war wirklich spannend, Serverless-Anwendungen und unterschiedliche Anbieter praktisch auszuprobieren. Ich bevorzuge den Cloudflare-Ansatz, weil die Serverless Worker global ausgeführt werden und nicht nur in den USA wie bei Vercel.
