LX-SVS-INFO-apache2-virtualhosts
Updated sep/20/10 16:20
APACHE 2 - VIRTUAL HOSTS - Debian
Name Virtual hosts zijn verschillende websites die op één fysieke server staan. Ze verwijzen alle naar hetzelfde ip-adres. Dit gebeurt op DNS niveau. Een flinke webserver kan makkelijk 1000 websites aan. Dat komt omdat de meeste websites geen 50 hits per dag halen.
Een virtual host moet geupdate kunnen worden via ftp door zijn gebruiker.
-
testomgeving
Op het Internet wordt er altijd eerst een domeinnaam geregistreerd,
de DNS "root"-servers verwijzen dan naar een Name Server voor dit domein.
Op die Name Server staan dan de verwijzingen naar de computers uit dit domein, o.a. de webserver.
Wij gaan geen domeinnamen registreren, maar we zetten zelf wel een interne DNS server op om eigen domeinnamen lokaal te "registreren" en naar je lokale servers te verwijzen.
Dit is een controlled reality situatie. De webserver kan nu op exact dezelfde manier worden geconfigureerd als in een real world geval.
Je kan ook de /etc/hosts file aanpassen. Dan heb je een testomgeving zonder eigen DNS, en alleen lokaal op je webserver. Het aanpassen van de /etc/hosts file hoef je op een 'echte' webserver nooit te doen.
-
krijtlijnen
We gaan ervan uit dat apache2 reeds geïnstalleerd is op je systeem en dat de default website "it works!" inderdaad werkt.
In wat volgt gaan we een webserver opzetten met verschillende virtual hosts ...
Je kan dat op allerlei manieren doen, en de in dit document beschreven wijze is waarschijnlijk niet de allerbeste. Wel hanteren we een makkelijk principe.
- Elke virtual host heeft een unieke domeinnaam.
- Ik geef elke config file in /etc/apache2/sites-available deze domeinnaam.
- Voor elke virtual host maak ik een user aan met diezelfde domeinnaam.
- In de home-directory van deze user(s) plaats ik een directory httpdocs. Dat wordt de root van de website.
- Als ik daarna vsftpd configureer met local_user_enable, heb ik dan weinig of geen werk meer, om de klanten toegang te geven tot hun website.
-
useraccounts
We gebruiken telkens de home-directory van een useraccount om elke website apart in onder te brengen. Vervang telkens de fqdn van het voorbeeld of de omschrijving <fqdn> door de aan jou toegewezen fully qualified domainname(s). Wij gebruiken www.testdomein.com in onze voorbeelden.
# useradd -m www.testdomein.com
# passwd www.testdomein.com
Enter new UNIX password: sdf12345
Retype new UNIX password: sdf12345
passwd: password updated successfully
Doe dit voor al je domeinen.
-
directory structuur
Als gebruiker <fqdn> maak je een directory ~/httpdocs, met een index.html file erin voor elke website.
Een voorbeeld:
# su www.testdomein.com
$ cd $HOME
$ mkdir httpdocs
$ cd httpdocs
$ vim index.html
Dit is website <h1>testdomein.com</h1>
:wq
|
$ exit
Let erop dat zowel de home directory als de httpdocs directory de volgende permissions hebben: drwxr-xr-x, en dat user <fqdn> er eigenaar van is.
# ls -lR /home/www.testdomein.com/
/home/www.testdomein.com/:
total 4
drwxr-xr-x 2 www.testdomein.com www.testdomein.com 4096 Sep 20 19:01 httpdocs
/home/www.testdomein.com/httpdocs:
total 4
-rw-r--r-- 1 www.testdomein.com www.testdomein.com 46 Sep 20 19:01 index.html
Doe dit voor al je domeinen.
-
virtualhost configuratiefile
In /etc/apache2/sites-available voegen we nu een nieuwe virtualhost-configuratiefile toe.
Geef dezelfde naam aan je configuratiefile als aan je useraccount, dat maakt het later overzichtelijker.
In de file staan minstens de volgende elementen:
<VirtualHost *:80>
ServerName <fqdn>
DocumentRoot /home/<fqdn>/httpdocs
</VirtualHost>
In ons voorbeeld wordt dat dan:
# cd /etc/apache2/sites-available
# vim www.testdomein.com
<VirtualHost *:80>
ServerName www.testdomein.com
DocumentRoot /home/www.testdomein.com/httpdocs
</VirtualHost>
|
Sla de file op en maak een link naar de directory /etc/apache2/sites-enabled:
# ln -s /etc/apache2/sites-available/www.testdomein.com /etc/apache2/sites-enabled/
-
testen
Herstart apache2:
# /etc/init.d/apache2 restart
En test onder firefox:
http://www.testdomein.com
Test eveneens je default website:
http://localhost
De twee websites moeten bestaan en zijn verschillend!
-
upscalen
Een tweede en een derde virtualhost maakt u als volgt:
# cd /etc/apache2/sites-available
Kopiëer je eerste werkende configfile naar <website2> en daarna naar <website3>
# cp <website1> <website2>
# cp <website1> <website3>
Editeer de nieuwe files en pas ServerName en DocumentRoot aan.
# vim <website2>
# vim <website3>
Maak een symbolic link van je websites naar /etc/apache2/sites-enabled.
Herstart apache2.
Test.
-
vsftpd configureren en testen
Indien dit nog niet gebeurd is moet je vsftpd installeren zoals in
http://www.linux800.be/lx-svs-info-vsftpd.php in de punten 1 en 3
Daarna moeten we vsftpd configureren voor lokale gebruikers:
http://www.linux800.be/lx-svs-info-vsftpd.php in de punten 5 en 6
Test eerst of anonymous geen toegang heeft, en vervolgens met een user logon of je kan aanloggen, of je pwd inderdaad "/" is (chrooted), en of je kan schrijven in je httpdocs:
$ ftp www.testdomein.com
Connected to www.testdomein.com
220 "ftp-virtual server, please login ..."
Name (www.testdomein.com:jan): www.testdomein.com
331 Please specify the password.
Password: *****
230 User www.testdomein.com logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" is the current directory
ftp> cd httpdocs
250 CWD command successful
ftp> get index.html
local: index.html remote: index.html
200 PORT command successful
150 Opening BINARY mode data connection for index.html (495 bytes)
226 Transfer complete
495 bytes received in 0.01 secs (76.3 kB/s)
ftp> !vim index.html
Dit was website <h1>testdomein.com</h1>
Nu is het <h1>allemaal weg</h1>
:wq
|
ftp> put index.html
local: index.html remote: index.html
200 PORT command successful
150 Opening BINARY mode data connection for index.html
226 Transfer complete
495 bytes sent in 0.00 secs (24169.9 kB/s)
ftp> quit
221 Goodbye.
Test tenslotte met een webbrowser of je wijzigingen actief zijn.