Andreas Bergman

Icon

Catch all-host och redirect

Ibland har man domäner på sin maskin som man inte använder, som man kanske vill parkera så länge eller så har man ibland flyttat den till en annan adress, till exempel i samband med att siten bytte namn. För att hantera detta på ett snyggt sätt och slippa duplicate content i sökmotorerna så kan man lägga en ‘redirect’ på domänen i fråga. En redirect är en HTTP-status kod som talar om för webbläsaren, sökmotorn etc hur de ska hantera sidan, om de ska gå vidare eller om de ska slå upp den. De två vanligaste HTTP-statuskoderna är 200 och 404.

404 betyder att innehållet man letar efter inte finns, man kanske försöker öppna en fil som inte finns eller liknande.
200 betyder helt enkelt att filen hittas och det är OK att slå upp/visa sidan.
300-serien indikerar att filen/siten har flyttats, tex så betyder 301 att den flyttat permanent och 302 att den flyttat temporärt och kommer att komma tillbaka.
500-serien indikerar att det är något som är fel på servern.

I mitt fall har vi en server där jag hanterar många olika domäner, dock så har servern själv ingen egen domän som är dess ‘primära’ utan en domän utan hemsida som bara är för managementsyfte. Dessutom så vill vi inte att min maskin ska visa blanka sidor eller säga att en site inte finns, så för att hantera det så har jag lagt en redirect med status 301 på en virtuell host som fångar alla domäner som inte är specificerade någon annanstans, exemplet hittade jag på Nginx Wiki: NginxVirtualHostExample.

server {
  server_name _;
  server_name_in_redirect  off;
  rewrite ^/(.*) http://www.ngweb.se/$1 permanent;
}

Den här Vhost konfigurationen tar alla anrop till servern till en domän som inte finns på maskinen och skickar dem till www.ngweb.se.

För att göra det tydligare så överväger jag att be David skriva en undersida som talar om att det är en domän som ägs av ngweb.se, så det blir riktigt tydligt.

Kontrollera Vhostar och Redirects med Icinga

Vi har en webbserver med ett antal vhostar som vi vill övervaka, dock så kommer standardkonfigurationen till Icinga med en servicecheck som kontrollerar HTTP med hjälp av IP:t, så för att få den att kontrollera det jag vill så skriver jag om service checken till:

check_http -H $HOSTADRESS$

Det gör att check_http tar emot www.test.se istället för bara en ip, nu vill jag också kolla så att jag får den HTTP-status jag förväntar mig, detta då check_http tycker att både 200 och 301 är OK, men efter som min site inte ska redirecta(301) så vill jag att den bara ska tycka att 200 är ok, det åstadkommer jag med:

check_http -H $HOSTADDRESS$ -e 200

Där -e betyder “expect”, alltså förväntar sig checken HTTP-status 200. För att hålla koll på mina redirects så använder jag samma kontroll fast med 301 istället för 200.

För att underlätta för mig själv har jag definierat upp ett nytt kommando som heter just HTTP-redir och som bara accepterar 301 som http-status, sedan styr jag med hostgroups vilken sida som kontrolleras på vilket sätt.

Såhär ser det ut på en maskin som både har en HTTP-adress och en HTTP-redir:

Den här bloggen

skriver jag, Andreas Bergman, vilket i sig inte bör vara så förvånande. Jag driver en SMS tjänst och jobbar som tekniker/allt i allo på SEA där jag bland annat driftar en stor bloggportal och ett webbhotell. Vi håller även på att bygga ett datacenter.


Jag har några microsoft titlar, ett gäng DELL certifikat och jobbar dagligen med hårt belastade webbservrar. Utöver det jobbar jag också med virtualisering och server/storage. Någon gång ibland säljer jag även server och storagelösningar.

Maila mig gärna om något av ovan, eller annat, jag är ganska trevlig sägs det. andreas@abergman.se.