Apache als webserver op Linux
Op deze pagina:
- Apache installeren
- Apache configuratiebestanden
- Meerdere websites via dezelfde host
- Apache status opvragen
- Apache webserver herstarten
- Logbestanden van Apache
- Overige bestanden voor Apache
- Eigen 404 foutpagina maken
- Hotlinken van afbeeldingen voorkomen
- Redirect instellen
- Redirect naar https
- Wat te doen als .htaccess niet werkt
- Foutmelding 'Could not reliably determine the server’s fully qualified domain name'
- Meer informatie over Apache
De tegenwoordig gebruikte versie van de Apache webserver heet apache2 op Debian en Ubuntu. In andere Linux distributies wijkt de installatie af. Ook de gebruikte mappen voor onder andere de configuratie van Apache kunnen afwijken.
Apache installeren
Het installeren via de commandline van Apache2 kan met aptitude, dan kunnen meteen ook de aanbevolen pakketten geïnstalleerd worden.
sudo aptitude -r install apache2
Als je liever niet via de commandline installeert, dan kan je Apache2 ook via Synaptic installeren.
Op Fedora heet Apache httpd:
sudo dnf install httpd
Voor het kunnen opvragen van de status van apache2 is het handig om ook lynx te installeren:
sudo apt install lynx
Apache configuratiebestanden
De map /etc/apache2 bevat de configuratiebestanden voor de Apache2 webserver. Het bestand apache2.conf is 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.
Het bestand ports.conf kun je aanpassen om bijvoorbeeld een andere poort te kiezen voor je webserver in plaats van de standaard poort 80. Zoals je in dat bestand kunt lezen, moet je deze poort dan ook aanpassen in het bestand /etc/apache2/sites-enabled/000-default.conf. Na de aanpassing moet je apache2 herstarten om de nieuwe poort actief te laten worden.
Het bestand ports.conf:
# 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>
De 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 (tijdelijk) 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.
Het bestand /var/log/apache2/access.log is het toegangslog voor een Apache2 webserver. Dit bevat informatie over de pogingen om de website op te vragen.
Het bestand /var/log/apache2/error.log is 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 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.
Redirect naar https
Je bezoekers meteen doorsturen naar je https pagina's kan met:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L]
Dit is een permanente redirect (301), als je R=301 vervangt door R, dan wordt het een tijdelijke redirect (302).
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>
Foutmelding 'Could not reliably determine the server’s fully qualified domain name'
De foutmelding "Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName" kun je verhelpen door het bestand /etc/apache2/httpd.conf aan te passen. Standaard is dit bestand leeg, of zelfs nog niet aanwezig. Als het nog niet bestaat, maak je het aan (gebruik sudo) en voeg daar deze regel toe:
ServerName localhost
Sla het bestand daarna op en herstart Apache2.
sudo /etc/init.d/apache2 restart
Meer informatie over Apache