Apache2 og virtual hosts
Ingen kommentarer Guide, Server

Endnu et note-to-self-indlæg. Jeg har installeret Ubuntu Server 16.04.6 på min gamle Eee Box B202 for at køre en lille webserver på den. Jeg er på ingen måde ekspert, og har kun grundlæggende kendskab til Linux og Apache, så jeg har bakset mere end godt er med virtual hosts for at kunne have flere sider/domæner liggende på samme server.

Når Apache installeres, bliver der oprettet en /var/www/html/-mappe, som indeholder en standard “It Works!”-testside. I denne /html/-mappe har jeg oprettet to undermapper – lad os kalde dem “domain1” og “domain2” (som hver især repræsenterer et selvstændigt domæne). Tanken er så selvfølgelig, at www.domain1.com viser indholdet fra /var/www/html/domæne1, og domain2.freemyip.com (med dynamisk DNS-service) viser indholdet fra /var/www/html/domain2. Og hvis roden af serveren tilgås med localhost, 127.0.0.1 eller den offentlige ip, skal standardsiden fra /var/www/html/ vises som en “default” side.

Det er som sådan også nemt nok at opsætte, men jeg havde en masse bøvl med at domænerne ragede ind over hinanden på kryds og tværs, alt efter om jeg brugte min interne eller offentlige IP. F.eks. kunne jeg tilgå rodmappen via LAN (192.168.0.15), og Apache-testsiden blev vist. Gik jeg ind i et underdomæne (192.168.0.15/domain1), blev indholdet fra /domain1/ vist. Alt ok. Prøvede jeg at tilgå Apache-standardsiden med min offentlige IP xx.xx.xx.xx, fik jeg indholdet fra /domain1/ vist. Altså samme indhold som www.domain1.com.

Jeg har læst side op og side ned om dette problem, og næsten ligegyldigt hvad jeg prøvede, var der altid mindst ét domæne der blev vist forkert. Nogle mener det har betydning i hvilken rækkefølge man angiver de virtuelle hosts i konfigurationen. Men jeg kan som sådan ikke vælge rækkefølge, da hver side har sin separate konfiguration, som bliver indlæst og aktiveret, når Apache starter:

<VirtualHost _default_>
   DocumentRoot /var/www/html
   <Directory "/var/www/html">
      allow from all
      Options None
      Require all granted
   </Directory>
</VirtualHost>

Det viste sig senere hen, at jeg manglede et par småting for at få guidet sider og domæner hen hvor de hører til:

<VirtualHost _default_>
   DocumentRoot /var/www/html
   <Directory "/var/www/html">
      allow from all
      Options None
      Require all granted
   </Directory>
   ServerAlias xxx.xxx.xxx.xxx
</VirtualHost>

I “default”-konfigurationen har jeg tilføjet ServerAlias (hvor xxx.xxx.xxx.xxx er min offentlige IP-adresse). Det gør, at Apache ved, at denne IP skal pege over til standardplaceringen /var/www/html/.

Konfiguationen til www.domain1.com skal se således ud:

<VirtualHost _default_>
   DocumentRoot /var/www/domain1/public_html
   ServerName domain1.com
   <Directory /var/www/domain1/public_html>
      allow from all
      Options None
      Require all granted
   </Directory>
   ServerAlias domain1.com *.domain1.com
</VirtualHost>

Jeg har angivet domain1.com som ServerName, og domain1.com *.domain1.com som ServerAlias. Det er vigtigt at huske både det enkelstående domænenavn og *.domænenavn, så både domain1.com og www.domain1.com vil virke. Der skal ikke skrives nogen IP-adresse i denne, da det bliver klaret af en A Record hos en DNS-udbyder. Jeg kan anbefale GratisDNS, som jeg selv har brugt i årevis. Det foregår stort set på samme måde som ServerAlias, hvor man knytter sit domænenavn til serverens IP-adresse:

Alt-teks

Konfigurationen til domain2.freemyip.com er som følger:

<VirtualHost _default_>
   DocumentRoot "/var/www/html/domain2"
   ServerName domain2.freemyip.com
   <Directory "/var/www/html/domain2">
      allow from all
      Options None
      Require all granted
   </Directory>
   ServerAlias domain2.freemyip.com
</VirtualHost>

Ligesom med domain1.com har jeg skrevet domain2’s domæne i ServerName og ServerAlias. Der behøves ikke A Record til dette domæne, da det benytter sig af en dynamisk DNS-service – i dette tilfælde www.freemyip.com.

Husk altid at genstarte Apache efter at have foretaget ændringer 🙂