Bättre domänhantering

Marcus Olsson,

Under många år har jag (liksom många andra utvecklare antar jag) samlat på mig alldeles för många domäner.

När jag kommer på en idé för ett projekt så börjar jag ofta med namnet och domänen – vilket såklart är ruskigt ineffektivt och dyrt, särskilt med tanke på att kanske endast 10-20% av ens projekt och experiment faktiskt resulterar i någonting...

I vintras började jag kika på något vis att hantera alla domänerna jag har utspridda hos diverse registrarer. Om någon vill köpa en domän från mig som jag i nuläget inte använder så ska de givetvis kunna göra det. Samtidigt som jag inte bara vill slänga upp någon parkerad-sida eller använda mig av en extern tjänst som plottrar ner sidan med irrelevant reklam som bara får allting att se "B" ut.

Egen DNS-server

Under större delen av våren har jag gjort all möjlig typ av research för att se hur jag enklast skulle kunna styra om alla domäner till en central hub och använda samma applikation för hantera samtliga parkerade/icke-använda domäner.

Min första tanke var att drifta en egen DNS-server. Idén var helt enkelt att ha en standard-zon som alla domänerna som använde min egna namnserver fick per automatik när man slog om till ens egna NS-records (tänk ungefär hur Cloudflares DNS-tjänster fungerar).

De första testerna var ganska positiva, men kändes ändå som ett på tok för avancerad metod för att hantera allt – både för att faktiskt hantera DNS-servern, uppdatera domänerna och slutligen drifta applikationen som ska visa någon typ av innehåll för besökaren.

Catch all

Ganska så snart insåg jag att jag attackerade problemet på helt fel sätt.

Oavsett så skulle jag behöva göra ändringar på domänernas DNS-inställningar och att hantera en egen namnservrer bara var ett onödigt steg. Om jag ändå ska in på varje domän och ändra, varför då inte bara sätta en A-record till en server jag själv hantera och sedan fånga upp vilket domän det handlar om och visa korrekt sida? En "catch all"-funktion på servern helt enkelt.

Efter att ha kikat runt en del så upptäckte jag dessutom att de flesta registrarerna jag använder dessutom har ett API för att hantera DNS-inställningar för domäner. T.ex. Loopia, Gandi och GoDaddy. Ännu mer jobb att spara in.

Säg "hello" till helloweb.se

Efter ett par timmars kodande kunde jag äntligen få upp helloweb.se (ännu en domän för ett tidigare icke-realiserat projekt). Ett minst sagt enkelt verktyg där jag kan lägga upp mina domäner (de jag önskar vara publika i alla fall), bocka i vilken registrar domänen är registrerad på och resten sköts per automatik.

restart.se

T.ex. för domänen restart.se så ser förfarande ut ungefär:

NGINX fångar automatiskt upp alla anrop mot servern, kollar av domännamnet för begärd adress och styr vidare till applikationen.

Applikationen i sig är byggt i Laravel och hanterar den:

1Route::get('{any?}', [
2 'uses' => 'RedirectController@handle', 'as' => 'redirect.handle'
3])->where('any', '.*');
1Route::get('{any?}', [
2 'uses' => 'RedirectController@handle', 'as' => 'redirect.handle'
3])->where('any', '.*');
1// RedirectController@handle
2$domain = transform_domain_to_ascii(get_requested_domain());
3return redirect()->url('https://helloweb.se/' . $site);
1// RedirectController@handle
2$domain = transform_domain_to_ascii(get_requested_domain());
3return redirect()->url('https://helloweb.se/' . $site);

Om applikationen hittar eftersökt domän i registret skickas man vidare till korrekt sida, i det här fallet helloweb.se/restart.se.

På Github har jag open source:at paketet som möjliggör integrationen emot Loopias API; olssonm/loopia-api.