Je eigen Apache-webserver installeren, deel 2

Marco den Teuling
2

Inhoudsopgave

Apache webserver installerenHandig, zo’n kant-en-klaar hosting-pakket, maar om volledig controle te hebben over je webserver, kun je het beste zelf de handen uit de mouwen steken. Zo kun je bijvoorbeeld je eigen Apache-webserver installeren. De benodigde componenten zijn met behulp van de commandline te installeren. Ook handig als testserver.

Wil je meer controle over je webserver en alleen over de functionaliteiten beschikken die je daadwerkelijk nodig hebt, of heb je functionaliteiten nodig die gewone webspaces niet bieden, dan moet je zelf aan de slag om je webserver naar je hand te zetten. Gelukkig kun je bij veel hosters ook een ‘kale’ server huren, bijvoorbeeld in de vorm van een Virtual Private Server (VPS). Je bent zelf verantwoordelijk voor het installeren van de software op zo’n server, maar vaak wordt hij geleverd met een basisinstallatie op basis van Linux. Hierop kun je zelf Apache-webserver installeren, zoals hier beschreven.

Om meer dan eenvoudige HTML-pagina’s weer te geven, moet je nog wat extra software installeren en configureren, zoals een databaseserver en scripttaal PHP. Voor meer gemak en veiligheid kun je nog zaken zoals SSL en een beheerinterface regelen. Dat doe je als volgt.

Databaseserver installeren

De meeste sites bestaan niet uit passieve HTML-pagina’s, maar halen hun steeds veranderende content uit een database. Om de content en andere gegevens in een database op te kunnen slaan, installeer je als databaseserver MySQL (of MariaDB).

sudo apt-get install mysql-server

Tijdens het installeren wordt gevraagd naar een wachtwoord voor de databasegebruiker. Nadat je dat ter bevestiging nog een keer ingetypt hebt, is de databaseserver klaar voor gebruik. Met

sudo systemctl status mysql

kun je controleren of dat inderdaad het geval is. Onthoud het databasewachtwoord goed, want dat heb je later regelmatig nodig, bijvoorbeeld om back-ups of nieuwe tabellen aan te maken.

PHP installeren

Voor het installeren van de taal PHP moet je wat extra modules toevoegen. Vandaar dat dit commando wat langer is dan de commando’s die je tot nu toe ingetypt hebt:

sudo apt-get install php libapache2-mod-php

php-mcrypt php-mysql php-cgi php-curl php-json

Om te testen of PHP goed geïnstalleerd is, moet je eerst een PHP-pagina hebben die je uit kunt voeren. Om zo’n pagina te maken, heb je een editor voor het bewerken van tekstbestanden nodig. Voor beginners is nano het eenvoudigst, maar gevorderde gebruikers geven vaak de voorkeur aan ViM, Emacs o.i.d. Welke je ook wilt gaan gebruiken, je moet hem eerst installeren – het is immers een minimale Ubuntu-installatie. We gaan hier uit van de editor nano:

sudo apt-get install nano

Daarna kun je een testpagina maken. Bij Apache staan de bestanden op de webserver standaard in de directory /var/www/html. In die directory maak je een testpagina met de extensie php aan:

sudo nano /var/www/html/test.php

Vervolgens typ je daar de volgende drie regels in:

<?php

phpinfo();

?>

Bewaar het bestand (Ctrl+O) en sluit de editor af (Ctrl+X). Ga met de browser dan naar http://<mijnserver>/test.php. Als het goed is, krijg je nu de systeeminformatie van PHP te zien. Omdat je waarschijnlijk niet wilt dat iedereen alle informatie over jouw webserver kan bekijken, verwijder je die pagina na het testen met het commando rm:

sudo rm /var/www/html/test.php

Apache webserver installeren PHP testbestand

Meerdere websites

Meestal wil je meerdere websites op een enkele webserver hosten. Die komen dan allemaal in een eigen directory te staan en werken met een eigen database, zodat ze elkaar niet in de weg zitten. In dit geval maak je met het commando mkdir een directory aan voor de website test.com, waarna je met het commando cd naar die directory gaat en daar met nano het bestand index. html aanmaakt dat standaard geopend wordt als iemand een website bezoekt.

sudo mkdir -p /var/www/test.com

cd /var/www/test.com

sudo nano index.html

In dat index-bestand zet je met nano de volgende content:

<html>

<head>

<title>test.com index-page</title>

</head>

<body>

<h1>Hello and welcome to test.com!</h1>

<h2>If you see this, then it works ...</h2>

</body>

</html>

Website toevoegen

Je hebt een aparte directory aangemaakt voor de nieuwe website, maar Apache weet nog niet wat hij daar mee moet. In de directory /etc/apache2/sitesavailable/ staan de configuratiebestanden voor de websites die door je Apache-server gehost worden. In die directory moet het configuratiebestand voor het nieuwe domein test.com aangemaakt worden.

cd /etc/apache2/sites-available/ sudo nano test.com.conf

In het configuratiebestand zet je de volgende regels. Bij ServerAdmin vul je je mailadres in.

<VirtualHost *:80>

ServerAdmin <yourname>@test.com

DocumentRoot /var/www/test.com

ServerName test.com

ServerAlias www.test.com

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log

combined

</VirtualHost>

Daarna moet die configuratie nog toegevoegd en geladen worden. Met a2ensite (Apache 2 enable site) voeg je de site aan de webserver toe en met het reload-commando laadt Apache de configuratie opnieuw in. Hierna zou de site beschikbaar moeten zijn.

sudo a2ensite test.com.conf

sudo service apache2 reload

Als je met de browser vervolgens naar http://<mijnserver>/test.com gaat, moet je de indexpagina zien. Als je de domeinnaam test.com geregistreerd hebt en die naar het ip-adres van jouw webserver verwijst, moet je hetzelfde resultaat krijgen als je naar http://test.com gaat.

Apache webserver installeren conf website

SSL installeren

Het internetverkeer tussen je webserver en de browser van je bezoekers is nog niet versleuteld. Iedereen die toegang heeft tot dat netwerkverkeer kan daarom alles meelezen en zien wat er verstuurd wordt. Bij pagina’s met inloggegevens of betaalinformatie wil je dat natuurlijk niet. Vandaar dat we dit verkeer moeten versleutelen. Dat kan tegenwoordig op meerdere manieren: een moeilijke, een redelijk makkelijke en een erg makkelijke. In c’t 4/2018 staat een aantal artikelen over de makkelijkste – en gratis – methode om dat te doen met Let’s Encrypt. Je kunt Let’s Encrypt de certificaten laten regelen die nodig zijn voor het versleutelen en ook alle instellingen laten doorvoeren die nodig zijn om het internetverkeer te beveiligen:

sudo add-apt-repository ppa:certbot/certbot

sudo apt-get update

sudo apt-get install python-certbot-apache

sudo certbot --apache -d test.com -d www.test.com

Daarbij wordt het bestand test.com-lessl.conf in de directory /etc/apache2/sites-available/ aangemaakt waarin poort 443 voor het veilige SSL-verkeer wordt geconfigureerd. Het normale dataverkeer via HTTP gebruikt poort 80, maar het protocol HTTPS werkt met poort 443. Gelukkig zijn zowel HTTP als HTTPS al vrijgegeven door de firewall, zodat het veilige dataverkeer niet wordt tegengehouden.

Voor een optimale beveiliging wil je natuurlijk dat al het verkeer dat via HTTP bij je webserver binnenkomt omgeleid wordt naar HTTPS. Ook dat stelt Let’s Encrypt voor je in bij het configuratiebestand test.com.conf van je website. Als je vervolgens met je browser naar https://www. ssllabs.com/ssltest/analyze. html?d=test.com& latest gaat, kun je testen of je site inderdaad goed beveiligd is. Als je met je browser naar http://test.com gaat, zul je zien dat je automatisch wordt doorgestuurd naar https://test.com. En belangrijker: je krijgt naast de url een groen slotje te zien ter bevestiging van de beveiligde status van het webverkeer.

Apache webserver installeren SSL test

Automatisch verlengen

Een Let’s Encrypt-certificaat heeft een maximale geldigheid van 90 dagen, waarna je het certificaat normaal gesproken handmatig moet verlengen. Dat is voor één website nog wel te doen, maar beheer je meerdere sites dan wil je niet het risico lopen dat je er toevallig een vergeet te verlengen, waardoor je site ineens niet meer veilig te bereiken is. Gelukkig is er een mogelijkheid het certificaat automatisch te laten verlengen.

Hiervoor maken we een systeemtaak aan, in Linux cronjob of crontab geheten. Met Cron (afkomstig van het Engelse woord chronograph, een soort stopwatch) kun je taken op een vooraf ingesteld tijdstip uitvoeren. Onderaan de lijst bestaande taken voeg je een nieuwe taak toe voor het verlengen van de certificaten. In dit geval gebeurt dat elke ochtend om 07:00. Als een certificaat nog niet verlengd hoeft te worden, gebeurt er verder niets.

sudo crontab -e

0 7 * * * /usr/bin/certbot renew

--quiet

Databasebeheer installeren

Nu al het verkeer van en naar je webserver versleuteld is, kun je verder aan de slag met de databaseserver. Die heb je al wel geïnstalleerd, maar er is nog geen beheerinterface voor. Daarvoor wordt meestal phpMyAdmin gebruikt. Installeer deze software met de volgende commando’s:

sudo apt-get update

sudo apt-get install phpmyadmin php-mbstringphp-gettext

Bij het eerste scherm selecteer je apache2 door op de spatiebalk te drukken en bij de vraag naar dbconfig- common zeg je ‘yes’. Daarna moet je een wachtwoord invullen om bij phpMyAdmin in te kunnen loggen. De modules mcrypt en mbstring moet je nog even expliciet toestaan omdat phpMyAdmin die nodig heeft en ze niet automatisch geïnstalleerd worden. Daarna moet je Apache herstarten:

sudo phpenmod mcrypt

sudo phpenmod mbstring

sudo systemctl restart apache2

Vervolgens kun je in de browser naar https://test. com/phpmyadmin en wordt je gevraagd in te loggen. Gebruik daarbij het wachtwoord dat je net hebt opgegeven. Als gebruikersnaam gebruik je root.

Door als root bij phpMyAdmin in te loggen, ga je als een soort super-user de database beheren. Dat is net als bij het beheer van de webserver in de praktijk absoluut niet wenselijk, zeker niet omdat die interface nog wel eens doelwit van aanvallers is. Als het kwaadwillenden lukt om de interface te hacken, hebben ze totale toegang tot al je databases. Dat voorkom je door phpMyAdmin beter af te schermen. Open het configuratiebestand van php-MyAdmin met

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

En voeg de regel met AllowOverride daaraan toe om de standaardinstellingen later te overrulen:

<Directory /usr/share/phpmyadmin>

Options FollowSymLinks

DirectoryIndex index.php

AllowOverride All

...

Herstart de Apache-server voor de nieuwe instellingen:

sudo systemctl restart apache2

Daarna ga je ervoor zorgen dat alleen expliciet opgegeven gebruikers bij php-MyAdmin mogen aanmelden. Daar maak je een .htaccess-bestand in de phpMyAdmin-directory voor aan

sudo nano /usr/share/phpmyadmin/.htaccess

met daarin de volgende content:

AuthType Basic

AuthName "Restricted files"

AuthUserFile /etc/phpmyadmin/.htpasswd

Require valid-user

Sla het bestand op en maak het genoemde bestand .htpasswd aan met daarin de toegestane gebruikers:

sudo apt-get install apache2-utils

sudo htpasswd -c /etc/phpmyadmin/.htpasswd <newusername>

voor de eerste gebruiker en voor iedere volgende gebruiker het tweede commando nog een keer, maar dan zonder -c. Als je dan naar https://test.com/ phpmyadmin gaat, zul je eerst als een van die gebruikers moeten inloggen om bij de interface te mogen.

Apache webserver installeren startpagina

Webserver klaar

Dan is de basisconfiguratie van je webserver klaar en je website klaar voor gebruik. Als je met een contentmanagementsysteem (CMS) aan de slag wilt, kun je met phpMyAdmin een database voor het betreffende CMS-pakket (bijvoorbeeld WordPress, Jooma of Drupal) aanmaken en de gegevens daarvan bij het installeren van dat pakket opgeven. In principe heb je nu een veilige webserver met alle basisfuncties – maar ook de mogelijkheid die functionaliteit uit te breiden waar, hoe en wanneer je dat zelf wilt.

(Noud van Kruysbergen, c’t magazine 5/2018)

Lezersaanbieding

Om zelf aan de slag te kunnen, heeft Strato een exclusieve aanbieding voor c’t-lezers: Virtual Linux Server V30. Het gaat om een later altijd nog op te schalen virtual private server met 8 GB RAM, 400 GB HDD en een 4-vCores-cpu. De server heeft ongelimiteerd dataverkeer. Zo’n VPS kost normaal 16 euro per maand, maar voor onze lezers slechts 12 euro per maand – niet tijdelijk, maar voor altijd, en dat bovendien zonder set-upkosten.

De ISO-27001-gecertificeerde degelijke servers staan veilig in Duitsland. Je hoeft je VPS niet per se helemaal zelf via de commandline te configureren, ze hebben standaard zonder meerkosten een licentie voor de panelsoftware Plesk Onyx om databases en websites makkelijk in de browser aan te maken.

De contractduur is één maand en wordt maandelijks verlengd, je zit er dus niet meteen een hele tijd aan vast. Een ideaal systeem dus om eens met dit artikel aan de slag te gaan. Bovendien heeft Strato een 30-dagen-geld-terug-garantie, dus als je binnen de eerste maand besluit om op te zeggen, kost het je helemaal niets. Ga dan ook snel naar https://www.strato.nl/ct voor deze exclusieve lezersaanbieding.

Apache webserver installeren hosting

 

Deel dit artikel

Marco den Teuling
Marco den TeulingHad als eerste eigen computer ooit een 16-bit systeem, waar van de 48 kilobyte toch echt niet ‘genoeg voor iedereen’ was. Sleutelt graag aan pc’s, van de hardware tot het uitpluizen van de BIOS-instellingen. Vindt ‘Software as a Service’ een onbedoeld ironische naamgeving.

Lees ook

Spotify streamen naar versterker? Zo doe je het met een Raspberry Pi!

Om Spotify te kunnen streamen naar een niet-smart AV-receiver of analoge versterker die geen muziek-streaming­mogelijkheden heeft, heb je met een Rasp...

Google Gemini gebruiken: dit kun je allemaal met de chatbot van Google

Eerst kon je alleen ChatGPT gebruiken, maar nu is het ook mogelijk om Gemini van Google te gebruiken. Beide chatbots die gebaseerd zijn op AI kunnen w...

2 Praat mee
avatar
  Abonneer  
nieuwsteoudste
Laat het mij weten wanneer er
Bert
Lezer
Bert

Beste Marco,

Ik heb een Raspberry Pi met Apache2 waarop WordPress staat. Nu worstel ik erg met het SSL certificaat. Ik heb al veel geprobeerd maar loop telkens vast.

Je spreekt in deze handleiding over een test.com index pagina, maar WordPress werkt met een andere index…mijn site heeft de domeinnaam bertkrus.nl toegewezen gekregen, via Strato.

kan ik dan toch bertkrus.nl invullen waar jij test.com hebt staan?