Wildcard-DNS och vhosts

Att ha flera webbsajter, s.k. vhosts, på sin server har sina fördelar. Det kan t.ex. vara bra när man gör större uppgraderingar på sin ordinarie sida, för att se att allt stämmer och ser bra ut innan man publicerar den nya versionen.

Det kan också vara bra för att kunna labba och visa en testsida för en kund när man utvecklar något nytt.

För att göra det så enkelt som möjligt har vi numera s.k. wildcard-namn på alla våra servrar. Fördelen är att du själv slipper att sätta upp och ändra din DNS om du bara vill göra t.ex. en enkel labb-sida. Wildcard-DNS betyder att vad-som-helst.vps-nnnnn.cloudnet.se pekar till din server.

Med lite enkla knep kan man sätta upp flera olika sajter på samma server, t.ex:
site1.vps-nnnnn.cloudnet.se och site2.vps-nnnnn.cloudnet.se.

Självklart kan du ha kvar din ordinarie sida också.

Vi börjar med att skapa två nya sidor på din server. Vi lägger sidorna under katalogen docroot, men vi kan egentligen lägga de var som helst.
mkdir /mnt/persist/www/docroot/site1
mkdir /mnt/persist/www/docroot/site2
echo "site1" > /mnt/persist/www/docroot/site1/index.html
echo "site2" > /mnt/persist/www/docroot/site2/index.html
echo "default" > /mnt/persist/www/docroot/index.html

För att site1 och site2 ska fungera måste man även ändra i /mnt/persistr/www/apache2.conf så att den ser ut så här:
# apache2 custom config file
ServerName localhost

<VirtualHost *:80>
DocumentRoot /mnt/persist/www/docroot/site1
ServerName site1.vps-nnnnn.cloudnet.se
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /mnt/persist/www/docroot/site2
ServerName site2.vps-nnnnn.cloudnet.se
</VirtualHost>
Efter en omstart av Apache, kan man nu testa att surfa in på vps-nnnnn.cloudnet.se, site1.vps-nnnnn.cloudnet.se och site2.vps-nnnnn.cloudnet.se med webbläsaren. De olika test-sajterna kommer visas beroende på vilken URL man använder.

För att ta ytterligare ett steg kan man lägga in så att Apache automatisk pekar till rätt katalog. Ändra igen i /mnt/persistr/www/apache2.conf så att den ser ut så här:

# apache2 custom config file
ServerName localhost

<VirtualHost *:80>
DocumentRoot /mnt/persist/www/docroot/
ServerName vps-nnnnn.cloudnet.se
ServerAlias *.vps-nnnnn.cloudnet.se

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.]+).vps-nnnnn.cloudnet.se$ [NC]
RewriteRule ^/(.*)$ /%1/$1
</VirtualHost>

Efter omstart av Apache, surfa in på sajterna och testa, eller kör med Curl:
root@vps-nnnnn~# curl http://site1.vps-nnnnn.cloudnet.se
site1
root@vps-nnnnn~# curl http://site2.vps-nnnnn.cloudnet.se
site2
root@vps-nnnnn~# curl http://nnnnn.vps-nnnnn.cloudnet.se
default

Det finns även en enklare metod att göra ovanstående om man har möjlighet att köra med modulen vhost alias.

Vi börjar med att slå igång den.
a2enmod vhost_alias
Sedan kan vi sätta upp lite Apache config som ser ut som följer.
# get the server name from the Host: header
UseCanonicalName Off
# include the first part of the server name in the filenames used to satisfy requests
VirtualDocumentRoot /mnt/persist/www/docroot/%1

Efter omstart av Apache, surfa in på sajterna och testa, eller kör med Curl:
root@vps-nnnnn~# curl http://site1.vps-nnnnn.cloudnet.se
site1
root@vps-nnnnn~# curl http://site2.vps-nnnnn.cloudnet.se
site2
root@vps-nnnnn~# curl http://nnnnn.vps-nnnnn.cloudnet.se
default