30.7. Apache HTTP server

Geschreven door Murray Stokely.

30.7.1. Overzicht

FreeBSD wordt gebruikt om een paar van de drukste websites ter wereld te draaien. De meeste webservers op Internet maken gebruik van de Apache HTTP Server. Apache softwarepakketten staan op de FreeBSD installatiemedia. Als Apache niet bij de oorspronkelijke installatie van FreeBSD is meegeïnstalleerd, dan kan dat vanuit de port www/apache22.

Als Apache succesvol is geïnstalleerd, moeten er instellingen gemaakt worden.

Opmerking: In dit onderdeel wordt versie 2.2.X van de Apache HTTP Server behandeld omdat die het meest gebruikt wordt op FreeBSD. Meer gedetailleerde informatie over Apache 2.X dat buiten het bereik van dit document valt is te vinden op http://httpd.apache.org/.

30.7.2. Instellen

Het belangrijkste bestand met instellingen voor de Apache HTTP Server op FreeBSD is /usr/local/etc/apache22/httpd.conf. Dit bestand is een typisch UNIX® tekstgebaseerd instellingenbestand waarin regels met commentaar beginnen met het karakter #. Het uitputtend beschrijven van alle mogelijke instellingen valt buiten het bereik van dit boek, dus worden alleen de meest gebruikte directieven beschreven.

ServerRoot "/usr/local"

Hierin wordt de standaard mappenhiërarchie voor de Apache installatie aangegeven. Binaire bestanden staan in de submappen bin en sbin van de serverroot en bestanden met instellingen staan in etc/apache.

ServerAdmin beheerder@beheer.adres

Het adres waaraan problemen met de server gemaild kunnen worden. Dit adres verschijnt op een aantal door de server gegenereerde pagina's, zoals documenten met foutmeldingen.

ServerName www.example.com

Met ServerName kan een hostnaam ingesteld worden die wordt teruggezonden aan de cliënten als de naam van de server anders is dan diegene is ingesteld (gebruik bijvoorbeeld www in plaats van de echte hostnaam).

DocumentRoot "/usr/local/www/apache22/data"

DocumentRoot: de map waaruit de documenten worden geserveerd. Standaard worden alle verzoeken uit deze map gehaald, maar er kunnen symbolische links en aliassen gebruikt worden om naar andere locaties te wijzen.

Het is altijd een goed idee om reservekopieën te maken van het instellingenbestand voor Apache vóór het maken van wijzigingen. Als de juiste instellingen gemaakt zijn, kan Apache gestart worden.

30.7.3. Apache draaien

De port www/apache2 installeert een rc(8)-script dat helpt met het starten, stoppen en herstarten van Apache en is te vinden in /usr/local/etc/rc.d/.

Om Apache met het systeem mee te starten kan de volgende regel aan /etc/rc.conf worden toegevoegd:

apache22_enable="YES"

Als het nodig is Apache met afwijkende opties op te starten, kan de volgende regel aan /etc/rc.conf worden toegevoegd:

apache22_flags=""

De configuratie van Apache kan worden getest op fouten voordat het daemon httpd voor de eerste keer wordt gestart, of na het maken van wijzigingen aan de instellingen terwijl httpd draait. Dit kan direct door het rc(8)-script worden gedaan, of door het gereedschap service(8) door één van de volgende commando's op te geven:

# service apache22 configtest

Opmerking: Het is belangrijk om op te merken dat configtest geen rc(8)-standaard is, verwacht niet dat het met alle rc(8)-opstartscripts werkt.

Als Apache geen instellingsfouten meldt, kan Apache httpd gestart worden met service(8):

# service apache22 start

De dienst httpd kan getest worden door http://localhost in een webbrowser te typen, waarbij localhost door de volledig gekwalificeerde domeinnaam wordt vervangen van de machine die httpd draait, als het niet de lokale machine is. De standaard webpagina die afgebeeld wordt is /usr/local/www/apache22/data/index.html.

30.7.4. Virtuele hosting

Apache ondersteunt twee verschillende manieren van Virtuele Hosting. De eerste methode is Naamgebaseerde Virtuele Hosting. Naamgebaseerde Virtuele Hosting gebruikt de HTTP/1.1 headers van de cliënten om de hostnaam uit te zoeken. Hierdoor kunnen meerdere domeinen hetzelfde IP-adres delen.

Om Apache gebruik te laten maken van Naamgebaseerde Virtuele Hosting kan een regel als de volgende in httpd.conf worden opgenomen:

NameVirtualHost *

Als een webserver www.domein.tld heet en er moet een virtueel domein voor www.anderdomein.tld gaan draaien, dan kunnen de volgende regels aan httpd.conf worden toegevoegd:

<VirtualHost *>
    ServerName www.domein.tld
    DocumentRoot /www/domein.tld
</VirtualHost>

<VirtualHost *>
    ServerName www.anderdomein.tld
    DocumentRoot /www/anderdomein.tld
</VirtualHost>

De adressen en de paden uit dit voorbeeld kunnen in echte implementaties uiteraard gewijzigd worden.

Meer informatie over het opzetten van virtuele hosts staat in de officiële documentatie voor Apache op http://httpd.apache.org/docs/vhosts/

30.7.5. Apache modules

Er zijn veel verschillende Apache modules die functionaliteit toevoegen aan de basisdienst. De FreeBSD Portscollectie biedt op een eenvoudige manier de mogelijkheid om Apache samen met de meeste populaire add-on modules te installeren.

30.7.5.1. mod_ssl

De module mod_ssl gebruikt de bibliotheek OpenSSL om sterke cryptografie te leveren via de protocollen Secure Sockets Layer (SSL v2/v3) en Transport Layer Security (TLS v1). Deze module levert alles wat nodig is om een getekend certificaat aan te vragen bij een vertrouwde certificaatautoriteit om een veilige webserver onder FreeBSD te kunnen draaien.

De module mod_ssl wordt standaard gebouwd, maar kan worden aangezet door tijdens het compileren -DWITH_SSL op te geven.

30.7.5.2. Taalbindingen

Er zijn Apache-modules beschikbare voor de meeste grote scriptingtalen. Deze modules maken het typisch mogelijk om Apache-modules geheel in een scriptingtaal te schrijven. Ze worden ook vaak gebruikt als een persistente interpreter die in de server zit en die de rompslomp van het starten van een externe interpreter en de opstartvertraging voor dynamische websites vermijdt, zoals beschreven in de volgende sectie.

30.7.6. Dynamische websites

In het afgelopen decennium hebben steeds meer bedrijven zich op Internet gericht om hun omzet te verhogen en hun zichtbaarheid te vergroten. Hiermee is ook de behoefte aan interactieve webinhoud toegenomen. Hoewel sommige bedrijven zoals Microsoft® oplossingen hebben geïntroduceerd voor hun eigen (propriëtaire) producten, heeft ook de open source gemeenschap een antwoord op de vraag gegeven. Moderne opties voor dynamische webinhoud zijn onder andere Django, Ruby on Rails, mod_perl2, en mod_php.

30.7.6.1. Django

Django is een BSD-gelicenseerd raamwerk ontworpen om ontwikkelaars in staat te stellen om snel hoog presterende, elegante webapplicaties te schrijven. Het biedt een vertaling van objecten naar relaties zodat datatypes ontwikkeld kunnen worden als Python-objecten, en er een rijke dynamische databasetoegang voor die objecten kan worden geboden zonder dat de ontwikkelaar ooit SQL hoeft te schrijven. Het biedt ook een uitbreidbaar sjabloonsysteem zodat de applicatielogica is gescheiden van de HTML-presentatie.

Django is afhankelijk van mod_python, Apache, en een SQL-database-engine naar keuze. De FreeBSD-port zal al deze vereisten met de juiste vlaggen voor u installeren.

Voorbeeld 30-3. Django installeren met Apache2, mod_python3 en PostgreSQL

# cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL

Als Django en deze vereisten eenmaal zijn geïnstalleerd, dient u een Django-projectmap te maken en vervolgens Apache te configureren om de ingebakken Python-interpreter te gebruiken om uw applicatie voor specifieke URL's op uw site aan te roepen.

Voorbeeld 30-4. Apache-configuratie voor Django/mod_python

U moet een regel aan het Apache-bestand httpd.conf toevoegen om Apache in te stellen om verzoeken voor bepaalde URL's aan uw webapplicatie door te geven:

<Location "/">
    SetHandler python-program
    PythonPath "['/map/naar/uw/django-pakketten/'] + sys.path"
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mijnsite.settings
    PythonAutoReload On
    PythonDebug On
</Location>

30.7.6.2. Ruby on Rails

Ruby on Rails is een ader opensource webraamwerk dat een volledige ontwikkelstack biedt en geoptimaliseerd is om webontwikkelaars productiever te maken en snel krachtige applicaties te laten ontwikkelen. Het kan eenvoudig vanuit het portssysteem geïnstalleerd worden.

# cd /usr/ports/www/rubygem-rails; make all install clean

30.7.6.3. mod_perl2

Het Apache/Perl integratieproject brengt de volledige kracht van de programmeertaal Perl en de Apache HTTP Server samen. Met de module mod_perl2 is het mogelijk om Apache-modules volledig in Perl te schrijven. Daarnaast voorkomt een ingebouwde persistente interpreter in de server de rompslomp van het starten van een externe interpreter en de nadelen van de opstarttijd van Perl.

mod_perl2 is beschikbaar in de port www/mod_perl2.

30.7.6.4. mod_php

Geschreven door Tom Rhodes.

PHP, ook bekend als “PHP: Hypertext Preprocessor”, is een algemene scripttaal die bijzonder geschikt is voor webontwikkeling. Het is mogelijk de taal in te bedden in HTML en de syntaxis is afgeleid van C, Java™ en Perl met de bedoeling webontwikkelaars in staat te stellen om snel dynamisch samengestelde pagina's te schrijven.

Om ondersteuning voor PHP5 toe te voegen aan de Apache webserver kan eerst de port lang/php5 geïnstalleerd worden.

Als de port lang/php5 voor het eerst geïnstalleerd wordt, worden automatisch de beschikbare OPTIONS weergegeven. Als er geen menu wordt weergegeven, omdat de port lang/php5 reeds in het verleden is geïnstalleerd, is het altijd mogelijk om het optiedialoog weer te laten verschijnen door

# make config

uit te voeren in de map van de port.

Controleer in het optiedialoog dat de optie APACHE mod_php5 als een laadbare module voor de webserver Apache bouwt.

Opmerking: Een heleboel sites draaien nog steeds PHP4 om verschillende redenen (compatibiliteitszaken of reeds in gebruik genomen webapplicaties). Als mod_php4 nodig is in plaats van mod_php5, gebruik dan de port lang/php4. De port lang/php4 ondersteunt een groot deel van de configuratie- en bouwopties van de port lang/php5.

Hiermee worden de modules die nodig zijn voor de ondersteuning van dynamische PHP-applicaties geïnstalleerd en ingesteld. Controleer dat de volgende secties aan /usr/local/etc/apache22/httpd.conf zijn toegevoegd:

LoadModule php5_module        libexec/apache/libphp5.so
AddModule mod_php5.c
    <IfModule mod_php5.c>
        DirectoryIndex index.php index.html
    </IfModule>
    <IfModule mod_php5.c>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    </IfModule>

Na voltooiing is een eenvoudige aanroep van het commando apachectl voor een nette herstart nodig om de module PHP te laden:

# apachectl graceful

Voor toekomstig bijwerken van PHP zal het commando make config niet nodig zijn; de geselecteerde OPTIONS worden automatisch bewaard door het FreeBSD Ports raamwerk.

De ondersteuning voor PHP in FreeBSD is extreem modulair waardoor de basisinstallatie zeer beperkt is. Het is heel gemakkelijk om ondersteuning toe te voegen door de port lang/php5-extensions te gebruiken. Deze port biedt een menugestuurde interface voor de installatie van PHP-uitbreidingen. Als alternatief kunnen individuele uitbreidingen worden geïnstalleerd door de juiste port te gebruiken.

Om bijvoorbeeld ondersteuning voor de MySQL databaseserver aan PHP5 toe te voegen kan gewoonweg de port databases/php5-mysql geïnstalleerd worden:

Na de installatie van een uitbreiding moet de Apache-server herladen worden om de nieuwe veranderingen in de configuratie op te pikken:

# apachectl graceful