An IP’s biography, read at the edge
The card above is Fastly’s client.geo.* and client.as.* geolocation data for the address that fetched this page, straight from the geolocation variable family. It goes well beyond a dot on a map: connection speed and type, the autonomous system behind the address, and proxy intelligence that can tell a home broadband line from a VPN exit or a cloud datacentre.
A ? means the database has no data for that field, and coordinates of 999.0 flag an invalid region — the dataset’s honest ways of saying “don’t know”. City-level accuracy is an estimate, not a subpoena.
Any address, not just yours
The lookup runs on client.geo.ip_override: hand the edge a different address and every variable above is recomputed for it, in the same fraction of a millisecond.
Works for IPv4 and IPv6. Or from the command line: curl -s "https://geoip.alpagot.net/raw?ip=8.8.8.8"
The plain-text endpoint lives on
Scripts get the same data without the furniture at /raw, in the original variable: value format — and the old paths (/geoip, /tls, /device) still answer exactly as they always did, so nothing you have automated against this hostname breaks.
The same variables drive edge logic
Everything on this page is a live VCL expression, evaluated on every request before your origin is ever involved. That means each value can conditionalise the request flow — route, block, redirect, rewrite, rate limit, or vary the cache on it. A taste, in this site’s dialect:
The other half is insight: every variable here can be emitted through Fastly’s real-time log streaming from vcl_log — per-request, from every POP, with no JavaScript beacons or client-side analytics. Stream them into your warehouse and you know your audience’s countries, networks and connection types at whatever depth you like.
One service, three hostnames, zero origins
geoip, tls and device are a single origin-less Fastly VCL service, routed by req.http.host. Every response is a synthetic response: the variables above are captured into request headers in vcl_recv (most are not available in vcl_error, where the page is assembled) and interpolated into the HTML at the POP nearest you. Values echoed from client-controlled input are HTML-escaped in VCL first.
The whole family works this way — see http.alpagot.net and h3.alpagot.net for the other experiments, and Fastly’s VCL variables reference for everything the edge can see.
Richard Alpagot
Senior Cloud Engineer at Fastly, collector of small sites that explain themselves.
- websitewww.alpagot.net
- blogblog.alpagot.net
- linkedin/in/alpagot