This server runs nginx with lua support (nginx-extras in Debian).
location = /rtt.json { if ($http_origin) { add_header 'Access-Control-Allow-Origin' 'http://openspeedtest.com'; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; } if ($request_method = OPTIONS ) { add_header Access-Control-Allow-Credentials "true"; add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With'; add_header Access-Control-Allow-Origin "http://openspeedtest.com"; add_header Access-Control-Allow-Methods "GET, OPTIONS"; return 204; } content_by_lua_file /path/to/rtt.lua; }
The Lua code just exposes a few internal TCP_INFO
variables from nginx.
local rtt = ngx.var.tcpinfo_rtt local rttvar = ngx.var.tcpinfo_rttvar local reqs = ngx.var.connection_requests ngx.header.content_type = 'text/json' ngx.header['Cache-Control'] = 'no-cache, no-store, must-revalidate' ngx.header['Pragma'] = 'no-cache' ngx.header['Expires'] = '0' ngx.say(string.format('{"rtt":%d,"rttvar":%d,"reqs":%d}', rtt, rttvar, reqs))
$ for i in $(seq 1 10); do echo http://speed.fiberby.dk/rtt.json; done | xargs curl {"rtt":1000,"rttvar":500,"reqs":1} {"rtt":972,"rttvar":430,"reqs":2} {"rtt":973,"rttvar":325,"reqs":3} {"rtt":966,"rttvar":259,"reqs":4} {"rtt":968,"rttvar":198,"reqs":5} {"rtt":959,"rttvar":165,"reqs":6} {"rtt":962,"rttvar":130,"reqs":7} {"rtt":966,"rttvar":104,"reqs":8} {"rtt":963,"rttvar":83,"reqs":9} {"rtt":956,"rttvar":77,"reqs":10}