web2 logo

Apache als webserver op Linux

De tegenwoordig gebruikte versie van de Apache webserver heet apache2.

Apache installeren

Het installeren via de commandline van apache2 kan met aptitude, dan kunnen meteen ook de aanbevolen pakketten geinstalleerd worden.
$ sudo aptitude -r install apache2
Als je liever niet via de commandline installeert, dan kan je apache2 ook via Synaptic installeren.
Voor het kunnen opvragen van de status van apache2 is het handig om ook lynx te installeren:
sudo apt install lynx

Apache configuratiebestanden

/etc/apache2 bevat de configuratiebestanden voor de Apache2 webserver.
Tekstbestanden:
apache2.conf het hoofdconfiguratiebstand
Dit bestand bevat onder andere een gedeelte dat de toegang tot het bestandssysteem regelt:
Directory / # vanaf root: geen toegang Options FollowSymLinks AllowOverride None Require all denied /Directory Directory /usr/share AllowOverride None Require all granted /Directory Directory /var/www/ Options Indexes FollowSymLinks AllowOverride None Require all granted /Directory Directory /srv/ Options Indexes FollowSymLinks AllowOverride None Require all granted /Directory AccessFileName .htaccess FilesMatch "^\.ht" Require all denied /FilesMatch
envvars de default environment variabelen voor apache2ctl
magic instructies om het MIME type te bepalen gebaseerd op de eerste bytes van een bestand.
ports.conf bepaald welke poorten er gebruikt worden door apache2.
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf Listen 80 IfModule ssl_module Listen 443 /IfModule IfModule mod_gnutls.c Listen 443 /IfModule

mappen:
conf-available Een map met beschikbare apache2 configureerbare onderdelen en de bijbehorende configuratie bestanden.
conf-enabled Een map met symbolische links die de onderdelen en configuratiebestanden in de map /etc/apache2/mods-available waar naar gelinkt wordt actief maken.

mods-available Een map met beschikbare apache2 modulen en de bijbehorende configuratie bestanden.
mods-enabled Een map met symbolische links die de modules en configuratiebestanden in de map /etc/apache2/mods-available waar naar gelinkt wordt actief maken.

sites-available De configuratiebestanden voor websites die beschikbaar zijn in een apache2 webserver zijn te vinden in deze map.
sites-enabled Een map met symbolische links die de websites in de map /etc/apache2/sites-available waar naar gelinkt wordt actief maken. Om een website beschikbaar te maken via de apache2 webserver, moet je een configuratiebestand maken voor de webserver in /etc/apache2/site-available en dan een symbolische link maken naar dat configuratie bestand in de map /etc/apache2/sites-enabled.
Als je een website maakt die de defaultsite van de webserver moet zijn, dan kan je de bestanden gewoon plaatsen in de map /var/www/html.

Meerdere websites via dezelfde host

De Apache webserver heeft de mogelijkheid om meerdere websites via dezelfde host met hetzelfde IP-adres te hosten. Welke bestanden moeten worden doorgegeven wordt dan bepaald op basis van de domeinnaam die met de aanvraag mee komt.
Maak een map voor iedere website die je wilt hosten in de /var/www map.
Deze map heet de document root en moet worden opgegeven in het configuratiebestand voor de website.
Voorbeeld voor de domeinen domein1.nl en domein2.nl :
sudo mkdir -p /var/www/domein1.nl/html sudo mkdir -p /var/www/domein2.nl/html
Als de rechten niet op 755 staan, dan deze aanpassen:
sudo chmod -R 755 /var/www
Om het testen te vereenvoudigen maak je alvast een index.html aan voor de sites in de mappen van de sites, zodat je bij het opvragen van deze sites ook daadwerkelijk iets te lezen krijgt waaraan je kunt zien dat het inderdaad werkt.
Kopieer de default configuratie voor elke site die je wilt hosten, laat het oorspronkelijke bestand intact zodat dit in de toekomst weer gebruikt kan worden als template voor nog meer sites.
Voorbeeld met de sites domein1.nl en domein2.nl :
cd /etc/apache2/sites-available sudo cp 000-default.conf domein1.nl.conf sudo cp 000-default.conf domein2.nl.conf
De nieuwe configuratiebestanden moet je aanpassen, op zijn minst pas je voor elk domein de volgende regels aan tussen de <VirtualHost *:80> en </VirtualHost> tags:
ServerAdmin, ServerName, ServerAlias en DocumentRoot.
ServerAlias is de alternatieve naam voor je domein, meestal is dit de zelfde naam, maar dan met www ervoor zodat het niet uitmaakt of bezoekers dit www wel of niet ingeven.
Voorbeeld voor domein1.nl:
VirtualHost *:80 ServerAdmin webmaster@domein1.nl ServerName domein1.nl ServerAlias www.domein1.nl DocumentRoot /var/www/domein1.nl/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined /VirtualHost
Na een nieuwe apache2 installatie gebruikt de webserver het standaard 000-default.conf bestand. Dat moet nu uitgeschakeld worden, dat kan met:
a2dissite 000-default.conf
De nieuwe sites inschakelen, bijvoorbeeld domein1.nl en domein2.nl, kan met:
a2ensite domein1.nl.conf a2ensite domein2.nl.conf
De opdracht a2dissite verwijdert de symlink in /etc/apache2/sites-enabled/ en de opdracht a2ensite maakt een symlink aan in /etc/apache2/sites-enabled/.
Hierna kan je apache2 herstarten om de zojuist aangebrachte aanpassingen actief te laten worden.
sudo systemctl restart apache2
Om de websites via hun domeinnaam op te kunnen vragen kan je het /etc/host bestand aanpassen als de DNS gegevens voor deze websites nog niet zijn aangepast.

Apache status opvragen

De status van de webserver opvragen kan met:
apache2ctl status

Apache webserver herstarten

De apache2 webserver herstarten kan met:
sudo /etc/init.d/apache2 restart
of:
sudo service apache2 restart

Logbestanden van Apache

Logbestanden zijn nuttig bij het oplossen van problemen met de webserver.
/var/log/apache2/access.log: Het toegangslog voor een apache2 webserver. Dit bevat informatie over de pogingen om de website op te vragen.
/var/log/apache2/error.log: Het foutenlog voor een apache2 webserver. Interne webserver problemen komen hier in te staan.

Overige bestanden voor Apache

/etc/init.d/apache2 : Een shell script dat de apache2ctl utility gebruikt voor het starten en stoppen van een Apache2 webserver.
/usr/lib/cgi-bin: De locatie waar alle CGI-BIN (Common Gateway Interface scripts) voor een default apache2 webserver geinstalleerd worden.
/usr/sbin/apache2: De executable voor de apache2 webserver.
/usr/sbin/apache2ctl: Een shell script voor het starten, stoppen, herstarten en monitoren van de status van een draaiende apache2 webserver.
/var/run/apache2/apache2.pid: Een tekst bestand dat gebruikt wordt door apache2 om de eigen Process ID in op te slaan als apache2 gestart wordt. Dit bestand wordt gebruikt bij het stoppen of herstarten van de apache2 webserver via het /etc/init.d/apache2 script.
/var/www/html: Een map met de default website voor deze webserver.

Eigen 404 foutpagina maken

Als een opgevraagde pagina niet gevonden kan worden, dan geeft de webserver een 404-fout. De standaard foutpagina wil je misschien vervangen door iets anders. dat kan als volgt:
Maak een webpagina voor je eigen 404-foutpagina en plaats deze in de map error. Deze pagina noem je bijvoorbeeld 404.html
Maak een .htaccess-bestand met de volgende code:
ErrorDocument 404 /error/404.html
Dit .htaccess-bestand zet je in de map error.

Hotlinken van afbeeldingen voorkomen

Voeg deze code toe aan je .htaccess bestand, wijzig 'jouwdomein.nl' in je echte domeinnaam, en sla het .htaccess bestand op. Let er op dat er een '\' (backslash) staat tussen 'jouwdomein' en '.nl'. Dit is om de punt te 'escapen', de punt heeft speciale betekenis in een reguliere expressie.
IfModule mod_rewrite.c RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(.+\.)?jouwdomein\.nl [NC] RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [NC,F] /IfModule
Met reguliere expressies wordt gecontroleerd of de referer niet leeg is en gelijk is aan jouw domein of aan één van jouw subdomeinen. De [NC] zorgt ervoor dat er geen verschil bestaat tussen hoofdletters en kleine letters. De [F] zorgt ervoor dat de hotlinker een '403 Forbidden' krijgt.

Redirect instellen

Stel dat je je website hebt vernieuwd en je hebt daarbij alle pagina's hernoemd. Dit zou kunnen betekenen dat de bezoekers van je oude pagina's op een '404 File not found error'-pagina's terecht komen. Dit probleem kun je dus oplossen door deze bezoekers te redirecten naar de nieuwe pagina middels een .htaccess-bestand.
De code zou er dan als volgt uitzien (het geheel staat op 1 regel):
Redirect permanent /oudepagina.html http://www.jouwdomeinnaam.com/nieuwepagina.html
Uiteraard vervang je 'jouwdomeinnaam.com' door je eigen domeinnaam en 'oudepagina.html' en 'nieuwepagina.html' door de namen van de betreffende pagina's.

Wat te doen als .htaccess niet werkt

Het .htaccess-bestand geeft je de mogelijkheid om per subdirectory toegang en redirects in te stellen. Als je een aanpassing doet in dit bestand, dan hoeft Apache niet opnieuw gestart te worden, het werkt meteen. De naam van .htaccess moet juist gespeld zijn. Het moet beginnen met een punt en de naam bevat tweemaal een c en tweemaal een s. De naam moet geheel in kleine letters staan.
Testen of .htaccess werkt is eenvoudig. Zet wat onzin in het bestand en vraag in een browser een pagina in die subdirectory op. Als je een error 500 (Internal Server Error) krijgt, dan werkt het .htaccess-bestand.
Als je gewoon een webpagina te zien krijgt, dan betekent dit dat het .htaccess-bestand wordt genegeert. De oorzaak ligt dan meestal in het configuratie-bestand apache2.config van Apache (onder Ubuntu staat dit in /etc/apache2/apache2.conf ). Daar is dan AllowOverride niet goed ingesteld. Als je het config-bestand aanpast, dan moet Apache herstart worden om de nieuwe waarden in te lezen:
sudo service apache2 restart
Voorbeeld van config-gedeelte met AllowOverride:
Directory /var/www/ Options Indexes FollowSymLinks AllowOverride All Require all granted /Directory

Meer informatie over Apache

De officiele documentatie

Toegevoegd door: Kees de Keijzer
Twitter: @kdkq

~ linux ~

~ Onderwerpen ~

Dit is een website zonder pop-ups

~ Links ~

Design & Development by Cyberwebdesign.nl for web2.nl © 2020.