Der Open Source Apache HTTP-Server ist der am weitesten verbreitete Webserver. Dieser Webserver ist nicht im Basissystem von FreeBSD enthalten, kann aber als Paket oder Port www/apache24 installiert werden.
Dieser Abschnitt beschreibt die Konfiguration der
Version 2.x
des
Apache HTTP-Server. Weiterführende
Informationen und Konfigurationsanweisungen für
Apache 2.X finden Sie unter
httpd.apache.org.
Der Apache HTTP-Server wird
unter FreeBSD primär in
/usr/local/etc/apache2
konfiguriert, wobei das x
/httpd.confx
die
Versionsnummer darstellt. In dieser Textdatei leitet ein
#
einen Kommentar ein. Die am häufigsten
verwendeten Optionen sind:
ServerRoot "/usr/local"
Legt das Standardwurzelverzeichnis für die
Apache-Installation fest.
Binärdateien werden in die Verzeichnisse
bin
und
sbin
unterhalb des
Serverwurzelverzeichnisses installiert, während sich
Konfigurationsdateien im Unterverzeichnis
etc/apache2
befinden.x
ServerAdmin you@example.com
Die E-Mail-Adresse, an die Mitteilungen über Serverprobleme geschickt werden. Diese Adresse erscheint auf vom Server erzeugten Seiten, beispielsweise auf Fehlerseiten.
ServerName www.example.com:80
Erlaubt dem Administrator, einen Rechnernamen
festzulegen, den der Server an die Clients sendet.
Beispielsweise könnte www
statt
des richtigen Rechnernamens verwendet werden. Wenn das
System keinen eingetragenen DNS-Namen
hat, kann stattdessen die IP-Adresse
eingetragen werden. Lauscht der Server auf einem
anderen Port, tauschen Sie die 80
gegen eine entsprechende Portnummer.
DocumentRoot "/usr/local/www/apache2x
/data"
Das Verzeichnis, in dem die Dokumente abgelegt sind. In der Voreinstellung befinden sich alle Seiten in diesem Verzeichnis, durch symbolische Links oder Aliase lassen sich aber auch andere Orte festlegen.
Es ist empfehlenswert, eine Sicherungskopie der
Apache-Konfigurationsdatei
anzulegen, bevor Änderungen durchgeführt werden. Wenn die
Konfiguration von Apache
abgeschlossen ist, speichern Sie die Datei und überprüfen Sie
die Konfiguration mit apachectl
. Der
Befehl apachectl configtest
sollte
Syntax OK
zurückgeben.
Um den Apache beim Systemstart
zu starten, fügen Sie folgende Zeile in
/etc/rc.conf
ein:
apache24
_enable="YES"
Wenn Sie während des Systemstarts weitere Parameter an den
Apache übergeben wollen, können Sie
diese durch eine zusätzliche Zeile in
rc.conf
angeben:
apache24
_flags=""
Wenn apachectl keine
Konfigurationsfehler meldet, starten Sie
httpd
:
#
service apache
24
start
Sie können den httpd
-Dienst testen,
indem Sie
http://
in einen Browser eingeben, wobei Sie
localhost
localhost
durch den
vollqualifizierten Domainnamen der Maschine ersetzen, auf dem
der httpd
läuft. Die Standard Webseite,
die angezeigt wird, ist
/usr/local/www/apache
.24
/data/index.html
Die Konfiguration von Apache
kann bei nachfolgenden Änderungen an der Konfigurationsdatei
bei laufendem httpd
, auf Fehler überprüft
werden. Geben Sie dazu folgendes Kommando ein:
#
service apache
24
configtest
Virtual Hosting ermöglicht es, mehrere Webseiten auf einem Apache-Server laufen zu lassen. Die virtuellen Hosts können IP-basiert oder namensbasiert sein. IP-basiertes virtual Hosting verwendet eine IP-Adresse für jede Webseite. Beim namensbasierten virtual Hosting wird der HTTP/1.1-Header der Clients dazu verwendet, den Rechnernamen zu bestimmen. Dadurch wird es möglich, mehrere Domains unter der gleichen IP-Adresse zu betreiben.
Damit der Apache namenbasierte
virtuelle Domains verwalten kann, fügen Sie für jede Webseite
einen separaten VirtualHost
-Block ein.
Wenn der Webserver beispielsweise www.domain.tld
heißt und
die virtuelle Domain www.someotherdomain.tld
einrichtet werden soll, ergänzen Sie
httpd.conf
um folgende Einträge:
<VirtualHost *> ServerNamewww.domain.tld
DocumentRoot/www/domain.tld
</VirtualHost> <VirtualHost *> ServerNamewww.someotherdomain.tld
DocumentRoot/www/someotherdomain.tld
</VirtualHost>
Setzen Sie für jeden virtuellen Host die entsprechenden
Werte für ServerName
und
DocumentRoot
.
Ausführliche Informationen zum Einrichten von virtuellen
Hosts finden Sie in der offiziellen
Apache-Dokumentation unter
http://httpd.apache.org/docs/vhosts/
.
Apache verwendet Module, die
den Server um zusätzliche Funktionen erweitern. Eine
vollständige Auflistung der zur Verfügung stehenden Module
und Konfigurationsdetails finden Sie unter
http://httpd.apache.org/docs/current/mod/
.
In FreeBSD können einige Module mit dem Port
www/apache24 kompiliert werden. Geben Sie
in /usr/ports/www/apache24
make config
ein, um zu sehen, welche Module
zur Verfügung stehen und welche Module in der Voreinstellung
aktiviert sind. Wenn ein Modul nicht zusammen mit dem Port
kompiliert wird, bietet die Ports-Sammlung die Möglichkeit
viele Module zu installieren. Dieser Abschnitt beschreibt
drei der am häufigsten verwendeten Module.
Zu einem bestimmten Zeitpunkt erforderte die
Unterstützung von SSL innerhalb von
Apache ein separates Modul namens
mod_ssl
. Dies ist nicht mehr der Fall
und die Installation des Apache-Webservers wird im Standard
mit SSL-Unterstützung ausgeliefert. Ein
Beispiel, wie Sie SSL-Unterstützung für
einen Webserver aktivieren können, finden Sie in der Datei
httpd-ssl.conf
im Verzeichnis /usr/local/etc/apache24/extra
.
In diesem Verzeichnis befindet sich auch eine Beispieldatei
namens ssl.conf-sample
. Es wird
empfohlen, beide Dateien zu überprüfen, um sichere Webseiten
auf dem Apache-Webserver einzurichten.
Nachdem die Konfiguration von SSL
abgeschlossen ist, muss die folgende Zeile in
httpd.conf
auskommentiert werden, um
die Änderungen beim nächsten Neustart oder erneuten Laden
der Konfiguration zu aktivieren:
#Include etc/apache24/extra/httpd-ssl.conf
SSL in Version 2 und 3 haben
bekannte Schwachstellen. Es wird dringend empfohlen,
TLS Version 1.2 und 1.3 anstelle der
älteren SSL-Optionen zu aktivieren.
Dies kann durch die Einstellung der folgenden Optionen in
ssl.conf
erreicht werden:
SSLProtocol all -SSLv3 -SSLv2 +TLSv1.2 +TLSv1.3 SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
Um die Konfiguration von SSL im Webserver abzuschließen, entfernen Sie den Kommentar in der folgenden Zeile, um sicherzustellen, dass die Konfiguration bei einem Neustart oder beim erneuten laden der Konfiguration von Apache übernommen wird:
# Secure (SSL/TLS) connections Include etc/apache24/extra/httpd-ssl.conf
Diese Zeilen müssen in httpd.conf
ebenfalls auskommentiert bleiben, um
SSL in Apache vollständig zu
unterstützen:
LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so LoadModule ssl_module libexec/apache24/mod_ssl.so
Der nächste Schritt ist die Kooperation mit einer Zertifizierungsstelle, um die entsprechenden Zertifikate auf dem System installieren zu lassen. Dadurch wird eine Vertrauenskette für die Webseite etabliert und jegliche Warnungen vor selbstsignierten Zertifikaten verhindert.
Das Modul mod_perl
macht es
möglich, vollständig in Perl
geschriebene Apache-Module zu
erzeugen. Da der
Perl-Interpreter in den Server
eingebettet wird, muss weder ein externer Interpreter noch
Perl zusätzlich aufgerufen
werden.
mod_perl
wird über den Port
oder das Paket www/mod_perl2 installiert.
Dokumentation für dieses Modul finden Sie unter
http://perl.apache.org/docs/2.0/index.html
.
PHP: Hypertext Preprocessor (PHP) ist eine vielseitig verwendbare Skriptsprache, die besonders für die Web-Entwicklung geeignet ist. PHP kann in HTML eingebettet werden und ähnelt von der Syntax her Sprachen wie C, Java™ und Perl. Das Hauptanliegen von PHP ist es, Web-Entwicklern die rasche Erstellung von dynamisch erzeugten Internetseiten zu ermöglichen.
Damit der Apache-Webserver PHP und weitere in PHP geschriebene Funktionen unterstützt, muss das entsprechende Paket installiert werden.
Sie können mit pkg
die Paketdatenbank
nach allen unterstützten PHP-Versionen
durchsuchen:
#
pkg search php
Die Ausgabe ist eine Liste mit Versionen und Funktionen des jeweiligen Pakets. Die Komponenten sind vollständig modular, d.h. die Funktionen werden durch die Installation des entsprechenden Pakets aktiviert. Geben Sie folgenden Befehl ein, um PHP-Version 7.4 für Apache zu installieren:
#
pkg install mod_php74
Falls irgendwelche Pakete Abhängigkeiten besitzen, werden diese zusätzlichen Pakete ebenfalls installiert.
Standardmäßig ist PHP nicht
aktiviert. Die folgenden Zeilen müssen in der
Apache-Konfigurationsdatei unterhalb von
/usr/local/etc/apache24
hinzugefügt werden, um PHP zu
aktivieren:
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
Zusätzlich muss auch der
DirectoryIndex
in der Konfigurationsdatei
aktualisiert werden und Apache muss entweder neu gestartet,
oder die Konfiguration neu geladen werden, damit die
Änderungen wirksam werden.
Mit pkg
kann die Unterstützung für
viele weitere PHP-Funktionen installiert
werden. Um beispielsweise die Unterstützung für
XML oder SSL zu
erhalten, installieren Sie die entsprechenden Pakete:
#
pkg install php74-xml php74-openssl
Wie zuvor muss die Konfiguration von Apache neu geladen werden, damit die Änderungen wirksam werden. Dies gilt auch für Fälle, in denen lediglich ein Modul installiert wurde.
Geben Sie folgenden Befehl ein, um einen geordneten Neustart durchzuführen und die Konfiguration neu zu laden:
#
apachectl graceful
Sobald die Installation abgeschlossen ist, gibt es zwei Möglichkeiten, um eine Liste der installierten PHP-Module und Informationen über die Umgebung der Installation zu erhalten. Die erste Möglichkeit besteht darin, die vollständige PHP-Binärdatei zu installieren und den Befehl auszuführen, um die Informationen zu erhalten:
#
pkg install php74
#
php -i | less
Da die Ausgabe des Befehls sehr umfangreich ist, ist die
Weiterleitung an einen
Pager, wie beispielsweise
more
oder less
,
sinnvoll.
Um Änderungen an der globalen Konfiguration von
PHP vorzunehmen, gibt es schließlich eine
gut dokumentierte Datei, die in
/usr/local/etc/php.ini
installiert ist.
Zum Zeitpunkt der Installation wird diese Datei nicht
existieren, da zwei Versionen zur Auswahl stehen. Eine
php.ini-development
und eine
php.ini-production
. Diese Dateien
sind Ansatzpunkte, die Administratoren bei der
Implementierung unterstützen sollen.
Die Apache-Unterstützung für
das HTTP2-Protokoll ist bei der
Installation des Ports mit pkg
automatisch enthalten. Die neue Version von
HTTP enthält viele Verbesserungen
gegenüber der vorherigen Version, einschließlich der
Verwendung einer einzigen Verbindung zu einer Website,
wodurch die Anzahl der Roundtrips von TCP-Verbindungen
reduziert wird. Zudem werden die Header-Daten der Pakete
komprimiert und HTTP2 erfordert
standardmäßig Verschlüsselung.
Wenn Apache so konfiguriert ist, dass nur HTTP2 benutzt wird, müssen Browser sichere, verschlüsselte HTTPS-Verbindungen unterstützen. Ist Apache so konfiguriert, dass beide Versionen benutzt werden, steht HTTP1.1 als Fallback-Option bereit, falls während der Verbindung Probleme auftreten.
Obwohl der Administrator einige Änderungen an der Konfiguration vornehmen muss, wirkt sich dies positiv auf die Sicherheit aller im Internet aus. Die Änderungen sind auch nur für Server erforderlich, die derzeit SSL und TLS nicht implementieren.
Diese Konfiguration baut auf den vorherigen Abschnitten auf, einschließlich der Unterstützung für TLS. Es wird empfohlen, diese Anweisungen zu befolgen, bevor Sie mit dieser Konfiguration fortfahren.
Starten Sie damit, dass http2-Modul
zu aktivieren, indem Sie diese Zeilen in
/usr/local/etc/apache24/httpd.conf
auskommentieren und das Modul mpm_prefork durch mpm_event
ersetzen, da ersteres HTTP2 nicht
unterstützt.
LoadModule http2_module libexec/apache24/mod_http2.so LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
Es ist ebenfalls ein separater Port
mod_http2
verfügbar.
Dieser Port ist dazu gedacht, Sicherheit und
Fehlerbehebungen schneller zur Verfügung zu stellen als
das installierte Modul vom
apache24
-Port. Dann
muss mod_h2.so
anstelle von
mod_http2.so
in der Konfiguration von
Apache benutzt werden.
Es gibt zwei Möglichkeiten, HTTP2 in Apache zu implementieren. Eine Möglichkeit ist global für alle Sites und VirtualHosts des Systems. Um HTTP2 global zu aktivieren, muss folgende Zeile unter der ServerName-Direktive hinzugefügt werden:
Protocols h2 http/1.1
Um HTTP2 über Klartext zu
aktivieren, muss h2
h2c http/1.1 in
httpd.conf
hinzugefügt werden.
h2c ermöglicht die Weitergabe von Klartext-Daten über HTTP2 und wird daher nicht empfohlen. Darüber hinaus ermöglicht die Verwendung von http/1.1 einen Fallback auf die Version HTTP1.1 des Protokolls, falls diese vom System benötigt wird.
Um HTTP2 für einzelne VirtualHosts zu
aktivieren, fügen Sie dieselbe Zeile innerhalb der
VirtualHosts-Direktive entweder in
httpd.conf
oder
httpd-ssl.conf
ein.
Laden Sie die Konfiguration mit dem Befehl
apachectl
reload
und testen Sie die Konfiguration mit einer der folgenden
Methoden, nachdem Sie eine der Seiten besucht haben:
#
grep "HTTP/2.0" /var/log/httpd-access.log
Die Ausgabe sollte etwas Ähnliches wie dieses zurückgeben:
192.168.1.205 - - [18/Oct/2020:18:34:36 -0400] "GET / HTTP/2.0" 304 - 192.0.2.205 - - [18/Oct/2020:19:19:57 -0400] "GET / HTTP/2.0" 304 - 192.0.0.205 - - [18/Oct/2020:19:20:52 -0400] "GET / HTTP/2.0" 304 - 192.0.2.205 - - [18/Oct/2020:19:23:10 -0400] "GET / HTTP/2.0" 304 -
Eine andere Methode ist die Verwendung des im Browser
integrierten Debuggers, oder das Programm
tcpdump
. Die genaue Benutzung wird hier
jedoch nicht beschrieben.
Unterstützung für HTTP2
Reverse-Proxy-Verbindungen sind mit dem
mod_proxy_http2.so
-Modul verfügbar.
Wenn Sie die ProxyPass oder RewriteRules [P]-Anweisungen
konfigurieren, sollten Sie h2:// für die Verbindung
verwenden.
Neben mod_perl und mod_php stehen noch weitere Sprachen zur Erstellung von dynamischen Inhalten zur Verfügung. Dazu gehören auch Django und Ruby on Rails.
Bei Django handelt es sich um ein unter der BSD-Lizenz verfügbares Framework zur schnellen Erstellung von mächtigen Internet-Applikationen. Es beinhaltet einen objekt-relationalen Mapper (wodurch Datentypen als Phyton-Objekte entwickelt werden können) sowie eine API für den dynamischen Datenbankzugriff auf diese Objekte, ohne dass Entwickler jemals SQL-Code schreiben müssen. Zusätzlich existiert ein umfangreiches Template-System, wodurch die Programmlogik von der HTML-Präsentation getrennt werden kann.
Django setzt das Modul
mod_python und eine
SQL-Datenbank voraus. In FreeBSD wird
bei der Installation von www/py-django
automatisch mod_python
installiert.
Als Datenbanken werden
PostgreSQL,
MySQL und
SQLite unterstützt, wobei
SQLite die Voreinstellung ist.
Wenn Sie die Datenbank ändern möchten, geben Sie in
/usr/ports/www/py-django
make config
ein und installieren Sie den
Port neu.
Nachdem Django installiert ist, benötigt die Anwendung ein Projektverzeichnis und die Apache-Konfiguration, um den eingebetteten Python-Interpreter zu nutzen. Dieser Interpreter wird verwendet um die Anwendung für spezifische URLs der Seite aufrufen.
Damit Apache Anfragen für
bestimmte URLs an die Web-Applikation
übergeben kann, müssen Sie den vollständigen Pfad zum
Projektverzeichnis in httpd.conf
festlegen:
<Location "/">
SetHandler python-program
PythonPath "['/pfad/zu/den/django/paketen/
'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAutoReload On
PythonDebug On
</Location>
Weitere Informationen zur Verwendung von
Django finden Sie unter
https://docs.djangoproject.com/en/1.6/
.
Ruby on Rails ist ein weiteres, als Open Source verfügbares Webframework. Es bietet einen kompletten Entwicklungsstack und erlaubt es Webentwicklern, umfangreiche und mächtige Applikationen in kurzer Zeit zu programmieren. Unter FreeBSD kann das Framework über den Port oder das Paket www/rubygem-rails installiert werden.
Weitere Informationen zur Verwendung von
Ruby on Rails finden Sie unter
http://rubyonrails.org/documentation
.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.