Virtual hosts på samme apacheserver

Hvad enten du har en dedikeret server eller kører en lamp/wamp installation, er det ofte ønskeligt at kunne arbejde med flere forskellige løsninger under samme installation.
Måske har du et par kunder der får udviklet wordpress løsninger, en kunde der får udarbejdet en løsning med Bootstrap og der kan komme flere til.
I det følgende vil jeg beskrive, hvordan du kan sætte det op.

Jeg kører selv min Apacheserver på debian. Jeg har desuden en MySql database server kørende og PhP installeret. Udgangspunktet er således, at du har det samme. Du kan naturligvis gøre det samme under Windows, på din Mac eller noget helt 3., hvis bare disse 2 servere er installeret. Vejledningen burde kunne anvendes på tværs af platform.

Nyt bibliotek og index.htm

Start med at oprette en ny mappe til dit site. På debian er det typisk under /var/www. På andre systemer kan det være en anden mappe. I princuippet er det ligegyldigt, hvor du placerer den, men det er nok en fordel, hvis du forsøger at samle dine sites samme sted.

Opret nu mappen /var/www/kunde1/html

Ideen er, at vores filer skal ligge i denne mappe.

Opret filen index.htm i mappen og giv den følgende indhold:

<html>
<body>
<h1>Dette er Kunde1's site</h1>
</body>
</html>

Apache skal vide, at den skal hoste et nyt site og hvor det er placeret
Nu skal vi fortælle apacheserveren, at "der er kommet et nyt site i byen". 

Kopier filen /etc/apache2/sites-available/000-default.conf til /etc/apache2/sites-available/kunde1.conf

Rediger filen, som bortset fra de udkommenterede linjer har følgende indhold:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Tilføj og ret filen, så den får følgende indhold.
<VirtualHost *:80>
ServerAdmin webmaster@kunde1
ServerName kunde1
ServerAlias www.kunde1
DocumentRoot /var/www/kunde1/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Gem filen.
DocumentRoot peger på det bibliotek du oprettede. ServerName er det navn, som serveren vil reagere på
 
Aktiver sitet
Åbne en konsol og kør kommandoen:
sudo a2ensite kunde1
Herefter vil programmet svare, at du skal genstarte Apache. Det gøres med Service Apache2 restart. Det gøres således: 
Service apache2 restart

Hosts
Du kan endnu ikke referere til sitet fra din browser. I princippet skal du tilgå din servers ip. Men denne adresse referere til flere websites, så du vil kun se standardsitet. For at kunne referere til de virtuelle sites, skal du tilfje sitet i filen hosts.

Min hosts fil ser således ud:

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
192.168.0.75    kunde1

Jeg har tilføjet linjen i bunden der peger på min servers ipadresse og giver navnet "kunde1". Har du flere sites på din server, vil de alle referere til samme ip, men de skal have forskellige navne. Hvis din server kører på samme PC, som du arbejder fra, angiver du bare 127.0.0.1.

Test
Nu skulle du gerne kunne åbne en browser og angive adressen :http://kunde1, hvorefter du skal kunne se, teksten, "Dette er Kunde1's site" skrevet med stor skrift.

Filrettigheder
Hvis du gerne vil installere wordpress på dit nye site, kan du kopiere alle filerne ind i mappen /var/www/kunde1/html, eller hvor du nu har placeret den.

Før det vil fungere, skal du rette rettighederne på biblioteket, alle underbiblioteker og filerne i disse.
På Debian gøres det med følgende 3 kommandoer:

chown www-data:www-data  -R * # Apacheserveren bliver ejer
find . -type d -exec chmod 755 {} \;  # Ændre bibliotekernes rettigheder til rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Ændre filrettighederne til rw-r--r--

Når du har installeret WordPress kan du begrænse rettighederne:

chown <username>:<username>  -R * # Sørg for at din bruger bliver generel ejer
chown www-data:www-data wp-content # Lad apache blive ejer af wp-content

 

Tags: