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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.

  5. 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/

  6. 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!

  7. 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.

  8. 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.