Kapitel 10

Der Webserver Apache

IN DIESEM KAPITEL

  • Apache als Webserver installieren und konfigurieren
  • Virtuelles Hosting
  • Zertifizierte und verschlüsselte Übertragung
  • Aktive Webseiten entwickeln mit CGI und PHP

Linux is like a wigwam. No Gates no Windows but always an Apache inside.

Ein Server für Surfer

Mit einem Browser, also Firefox, Safari und Konsorten, dürften Sie vertraut sein. Sie surfen damit im Internet und rufen Seiten wie de.wikipedia.org oder bahn.de auf. Hinter diesen Seiten steckt immer ein Webserver, der mit Ihrem Browser das Protokoll HTTP (Hypertext Transport Protocol) oder dessen sichere Variante HTTPS spricht. Der wohl meistverbreitete Server im Internet dürfte der Apache sein.

Näheres zum Protokoll HTTP finden Sie unter:

 http://willemer.de/informatik/net/http.htm

Die Adresse: URL

Wenn Sie eine Webadresse aufrufen, genügt dazu normalerweise allein der Name der Domäne. So genügt beispielsweise bahn.de. Der Browser verlängert diese Adresse automatisch zu https://www.bahn.de. Eine solche Adresse bezeichnet man als URL: Uniform Resource Locator. Eine URL besteht aus mehreren Bestandteilen. Nehmen wir als Beispiel die folgende URL:

 http://www.willemer.de:80/informatik/index.htm

  • http:// beschreibt das Protokoll. Daraus leitet der Browser die Portnummer ab, wenn sie nicht explizit hinten angeführt wird. Bei Webseiten ist heute die verschlüsselte Variante https:// weiter verbreitet.
  • www ist eigentlich der Host, der in der Domäne den Webserver stellt. Manchmal finden Sie auch Subdomänen an dieser Stelle.
  • willemer.de ist die Domäne.
  • :80 ist die Portnummer, die an die Domäne angehängt werden kann. Wird sie weggelassen, verwendet der Browser für HTTP den Port 80, für HTTPS den Port 443.
  • /informatik ist der Verzeichnispfad, in dem die Zieldatei steht.
  • index.htm ist die eigentliche Datei, die übertragen werden soll.

Manchmal endet die URL nicht auf einen Dateinamen. Dann wählt der Webserver eine Standarddatei aus. Meist wird index.htm oder index.html verwendet.

Installation und Start des Webservers

Damit Sie aus Ihrem Computer einen Webserver machen, müssen Sie die Software Apache installieren. Das zentrale Paket heißt apache2. Zur Installation benötigen Sie Administrationsrechte, die Sie über den Befehl su - oder sudo -s erlangen. Unter Debian oder Ubuntu aktualisieren Sie zunächst die Paketlisten und installieren dann das Paket mit den folgenden Befehlen:

# apt update
# apt install apache2

Ein erster Testlauf

Sie können den Webserver bereits testen. Starten Sie einen Browser auf dem Server und geben Sie als Adresse localhost ein. Sollte Ihr Server keine grafische Oberfläche besitzen, können Sie einen Browser auf Ihrem Arbeitsplatz starten und als Adresse die IP-Adresse Ihres Servers verwenden. Sie werden eine Seite wie in Abbildung 10.1 sehen, die als zentrale Nachricht »It works« meldet.

Start und Stopp des Servers

Mit dem Kommando systemctl kann der Apache wie die meisten anderen Server neu gestartet werden.

# systemctl restart apache2

Abbildung 10.1: Der Apache macht Männchen gegenüber dem Browser

Ein Neustart wird beispielsweise bei der Änderung der Konfiguration erforderlich. Statt des Kommandos restart kann das Kommando stop für das Stoppen des Servers oder start angegeben werden, um den Webserver in Betrieb zu nehmen. Das Kommando status liefert die Information, ob der Webserver gerade läuft und welche Prozess-ID (PID) er hat. Das Kommando reload sorgt dafür, dass der Apache seine Konfigurationsdateien neu lädt.

Der Benutzer www-data

Für den Webserver Apache wird bei der Installation der Benutzer www-data eingerichtet. Über diesen Benutzer können Sie sich allerdings nicht anmelden. Das ist weder erforderlich noch erwünscht. Es handelt sich um den Benutzer, unter dem der Webserver läuft. Darum sollten Dateien und Verzeichnisse, die der Webserver bearbeiten soll, für den Benutzer www-data les- oder schreibbar sein.

Die Konfigurationsdateien

Beim Starten haben Sie eine Webseite gesehen. Die muss ja irgendwo eingerichtet sein, also spüren wir ihr nach.

Die Einstellungen für den Apachen liegen unterhalb des Verzeichnisses /etc/apache2 und sind auf mehrere Dateien verteilt. In diesem Verzeichnis sind zwei Verzeichnisse für die Konfiguration der dargestellten Webseiten zuständig.

  • sites-available: Hier stehen Konfigurationen, die aktivierbar sind, es derzeit aber nicht unbedingt sind.
  • sites-enabled: Dieses Verzeichnis enthält nur symbolische Links auf Konfigurationen in sites-available.

Sie können sich diese Links mit den folgenden Befehlen ansehen:

# cd /etc/apache2/sites-enabled
# ls -l
insgesamt 0
... 000-default.conf -> ../sites-available/000-default.conf

Im Verzeichnis sites-available finden Sie beliebig viele Dateien. Aber nur diejenigen, auf die ein symbolischer Link in sites-enabled zeigt, sind aktiv.

Die Ausgangskonfiguration

Die in Abbildung 10.1 gezeigte Seite ist in der der Datei 000-default.conf konfiguriert. Wenn Sie mit einem Editor hineinsehen, stehen dort sehr viele Kommentare und die folgenden Zeilen:

<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Gehen wir die Zeilen einmal durch.

  • VirtualHost Die Direktive VirtualHost besagt, wie welche Anfragen behandelt werden. Dahinter steht der Name des Hosts. In diesem Fall ist es ein Stern, der besagt, dass jede Anfrage hier behandelt wird. Hinter dem Doppelpunkt bezeichnet 80 den Port, welches der Standard-Port für HTTP ist.
  • ServerName ist zwar auskommentiert, aber interessant, weil Sie mit einem Webserver mehrere Domänen betreuen können. Darauf werden wir noch zurückkommen.
  • ServerAdmin verweist auf die E-Mail-Adresse des Administrators.
  • DocumentRoot bezeichnet das Verzeichnis, in dem die HTML-Dateien liegen, die an den aufrufenden Web-Browser gesendet werden. Hier ist standardmäßig das Verzeichnis /var/www/html genannt. Dort können wir nach der angezeigten Webseite suchen.
  • ErrorLog zeigt auf die Fehlerprotokolldatei. Damit wird verhindert, dass die Fehlermeldungen des Apachen in die allgemeinen Fehlermeldungen in syslog untergemischt werden.
  • CustomLog bezeichnet den Ort, an dem Besuchsprotokolle gespeichert werden. So können Sie feststellen, wie erfolgreich Ihre Seite ist, und erfahren einige Details über die Besucher wie IP-Adresse oder Browser.

Der Pfad /var/www und die Indexdateien

Unter dem Verzeichnis /var werden typischerweise Serverdaten abgelegt. Darunter liegen unter www die Dateien des Webservers. In der Ausgangskonfiguration wurde die Datei index.html im Pfad /var/www/html abgelegt. Das ist genau das Verzeichnis, das in DocumentRoot bezeichnet wurde. Wenn Sie dort nachschauen, finden Sie eine Datei voller HTML-Code mit dem Namen index.html.

Der Apache hat die Datei index.html automatisch geliefert, ohne dass Sie diese explizit genannt haben. Wird bei einer URL kein Dateiname angegeben, sucht der Apache automatisch nach index.html oder index.htm.

Sie können dieses Verhalten ändern, in dem Sie in der Konfigurationsdatei mit dem Schlüsselwort DirectoryIndex die Dateinamen auflisten, die der Apache liefern soll, wenn kein Dateiname angegeben wird. Die folgende Zeile würde dazu führen, dass zunächst nach index.html gesucht wird. Gibt es keine Datei diesen Namens, würde index.htm gesucht. Fehlt diese auch, verwendet der Apache die Datei 0.htm.

DirectoryIndex index.html index.htm 0.htm

Wenn der Apache nur eine Domäne bedient, können Sie in dem von DocumentRoot angegebenen Verzeichnis Ihre HTML-Dateien ablegen, und die Installation würde damit bereits laufen.

Ein Directory als Download-Bereich

Alle Dateien unterhalb des von DocumentRoot bezeichneten Pfades können von einem Browser geladen werden, indem der relative Pfadname inklusive des Dateinamens verwendet wird. So wird die URL

 http://willemer.de/informatik/web/apache.htm

auf dem Server von willemer.de in dem relativen Verzeichnis informatik/web unter dem Namen apache.htm zu finden sein. Manchmal sollen die Dateien aber aus einem anderen Pfad geholt werden.

Im folgenden Beispiel soll beim Aufruf der URL http://server/mp3 auf das Verzeichnis mit den mp3-Dateien verwiesen werden. Die mp3-Dateien befinden sich auf dem Computer unter dem Verzeichnis /media/mp3.

<VirtualHost *:80>
...
Alias /mp3/ "/var/www/mp3/"
<Directory "/mp3/">
Options +Indexes +FollowSymLinks
Order deny,allow
Deny from all
Allow from 192.168.109
</Directory>
</VirtualHost>

Die Alias-Zuweisung bewirkt, dass der Pfad url in der URL auf das Verzeichnis /media/mp3 umgeleitet wird.

Da aber /media/mp3 nicht unter DocumentRoot liegt, muss ein Directory dafür angelegt werden, damit sich der Apache dieses Verzeichnisses annimmt. Der Bereich von Directory endet mit dem Ende-Tag, das durch die Kombination aus dem Schrägstrich und der Bereichskennung Directory gekennzeichnet ist.

Innerhalb des Directory-Bereichs können eigene Optionen für dieses Verzeichnis gesetzt werden. Die Anweisung Options definiert, wie bei dem Namen zu erwarten, ein paar Optionen.

  • Wird Indexes definiert und gibt es keine Indexdatei, zeigt der Apache beim Aufruf des Verzeichnisses automatisch eine Auflistung der Dateien. Damit lässt sich auf die Schnelle ein kleiner Fileserver erstellen, von dem die dort liegenden Dateien heruntergeladen werden können.
  • Wenn Sie FollowSymLinks einschalten, folgt der Apache auch symbolischen Links auf beliebige Verzeichnisse. Normalerweise ist dies abgeschaltet, damit Ihr Server nicht durch einen stehengelassenen symbolischen Link plötzlich aufschlussreiche Teile Ihres Servers zum Download anbietet.

Hinter den Optionen werden die Zugriffsrechte eingeschränkt. Sie wollen Ihre mp3-Sammlung nicht der ganzen Welt, sondern nur den Computern in Ihrem lokalen Netzwerk anbieten.

Zugriffsberechtigung Allow

Mit den Befehlen Allow und Deny kann bestimmt werden, wer auf das Verzeichnis zugreifen darf.

  • Im Beispiel wird zunächst geregelt, dass die Verbotsregeln vor den Erlaubnisregeln ausgeführt werden.
  • Für die Verbote ist die Direktive Deny from zuständig. Im Beispiel verbietet sie grundsätzlich jeden Zugriff.
  • Die Direktive Allow from legt nun die Ausnahmen fest und erlaubt einen Zugriff aus dem lokalen Netzwerk 192.168.109.

    Sie können mehrere Netzwerkadressen angeben, indem Sie sie durch ein Leerzeichen trennen. Dabei dürfen Sie auch IPv6-Adressen verwenden.

Aufruf

Wenn Sie über den Browser die URL http://server/mp3 aus dem lokalen Netzwerk 192.168.109 aufrufen, erhalten Sie eine Liste der mp3-Dateien und können eine davon anklicken. Aufgrund seiner MIME-Regeln erkennt der Browser, welches Programm für das Abspielen von mp3-Dateien zuständig ist, und startet es.

Alias und Redirect

Während die Direktive Alias einen URL-Pfad auf einen lokalen Dateipfad umlenkt, bewirkt die Direktive Redirect eine Umleitung auf einen anderen Webserver.

Der Aufrufer eines URL-Pfads wird auf eine andere URL verwiesen. Das bedeutet, dass der Client angewiesen wird zu wechseln. Es werden keine Daten durchgereicht.

Benutzeradministration mit .htaccess

Als Administrator des Apache können Sie einige Konfigurationsmöglichkeiten an einen Benutzer weitergeben, der die Inhalte der Webseiten pflegt. Dazu lädt der Benutzer eine Konfigurationsdatei hoch, die .htaccess heißt. Diese Möglichkeit ist auch bei den meisten Webseiten-Hostern gegeben. Damit sie berücksichtig wird, muss der Administrator in der Konfiguration des Verzeichnisses die Direktive AllowOverride entsprechend gesetzt haben. Mögliche Werte sind:

  • AuthConfig: Die Datei .htaccess darf die Zugriffe auf das Verzeichnis kontrollieren, also etwa Benutzernamen und Passwort erfragen.
  • FileInfo: Sie sind berechtigt, eine eigene Datei .htaccess zu verwenden.
  • None: Dies ist der Standardwert, wenn die Direktive nicht gesetzt ist. Damit werden die .htaccess-Dateien ignoriert.
  • All: Das Gegenteil von None. Es gibt keine Einschränkungen für die Datei .htaccess.

Der Name der lokalen Konfigurationsdatei lautet standardmäßig .htaccess, kann aber in der zentralen Datei apache2.conf durch die Direktive AccessFileName anders festgelegt werden.

Die Datei ermöglicht dem Benutzer den Bau einer Zugangsbeschränkung und das Abfangen von Fehlern.

ErrorDocument fängt Fehler

In der .htaccess-Datei können mit der Direktive ErrorDocument Fehler gefangen werden. Besonders beliebt ist der Fehler 404, der auftritt, wenn eine Datei und damit eine spezielle URL nicht gefunden wurde.

# .htaccess
ErrorDocument 404 /internetkaputt.html

In diesem Fall wird die Datei internetkaputt.htm an den Client geliefert, wenn die gewünschte Datei nicht verfügbar war.

Zugriffskontrolle

Sie können mit der Datei .htaccess einen Zugriffsschutz per Passworteingabe erzwingen, sofern in der Hauptkonfiguration die Direktive AllowOverride mindestens den Eintrag AuthConfig aufweist.

# .htaccess
AuthType Basic
AuthName “Ausweiskontrolle!”
AuthUserFile /var/www/sicher/.htpasswd
require valid-user

Diese Konfiguration wird dazu führen, dass bei dem Versuch, Dateien im lokalen Verzeichnis zu öffnen, eine Dialogbox erscheint, die nach Benutzernamen und Passwort fragt. Die Direktiven haben folgende Bedeutungen:

  • AuthType: Als Autorisierungstyp wird für .htaccess-Dateien meist Basic verwendet. Die Daten werden im Klartext übertragen, was bei einer HTTPS-Verbindung kein Drama ist. Es gibt auch Digest mit einer verschlüsselten Übertragung, die aber wohl nicht alle Browser beherrschen.
  • AuthName: In Anführungszeichen wird die Meldung angegeben, die die Dialogbox für die Passworteingabe zieren soll.
  • AuthUserFile: Hier wird angegeben, wo die lokale Passwortdatei liegt.
  • require valid-users: Mit dieser Direktive wird der Zugriff auf diejenigen beschränkt, die sich per Passwort ausweisen konnten.

Nun benötigen Sie noch eine Passwortdatei, in der Sie die Benutzer pflegen, die das Verzeichnis nutzen dürfen. Dazu verwenden Sie das Programm htpasswd. Die Option -c sorgt dafür, dass die Datei angelegt wird. Sie benötigen sie also nur für den ersten Aufruf. Als weiteres Argument wird die Datei angegeben und zuletzt der Benutzer, der eingetragen werden soll. Anschließend wird die Passworteingabe doppelt angefordert.

$ htpasswd -c /var/www/sicher/.htpasswd paul
New password:
Re-type new password:
Adding password for user paul
$

Der Pfad der Datei .htpasswd bezieht sich auf das lokale Dateisystem des Servers. Wenn also Ihre Domäne bei einem Provider liegt, müssten Sie den Pfad kennen, unter dem Ihre Domäne auf dessen Server abgelegt ist. In der Regel finden Sie in den Konfigurationsseiten für Ihre Domäne irgendwo den Eintrag, wie dieser Pfad lautet. Manche Provider bieten sogar ausführliche Beschreibungen. Suchen Sie nach dem Stichwort htaccess.

In seiner Standardkonfiguration wird Apache alle Dateien, die mit .ht beginnen, niemals weitergeben. Das gewährleistet, dass weder ein Browser noch der Befehl wget diese Datei herunterladen können.

Logbücher

Der Apache gibt Ihnen ein paar Hilfsmittel an die Hand, um Fehler aufzuspüren. Daneben interessiert den Betreiber einer Web-Präsenz aber auch, wie oft die Seite aufgerufen wurde, und auch hier protokolliert der Apache fleißig.

Fehlermeldungen

Das Verzeichnis, in dem der Webserver seine Fehlerdaten ablegt, wird durch die Umgebungsvariable APACHE_LOG_DIR bestimmt. Die Definition befindet sich in der Datei envvars im Verzeichnis datei/etc/apache2.

export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

Der Inhalt der Variablen SUFFIX ist leer, solange nur eine Instanz des Webservers auf der Maschine läuft.

Die Datei für die Fehlerprotokolle wird in der Option ErrorLog festgelegt. Mit der Option LogLevel wird festgelegt, ab welchem Level Fehler protokolliert werden. Die möglichen Level sind debug, info, notice, warn, error, crit, alert und emerg.

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn

Die Fehler werden in einem eigenen Verzeichnis /var/log/apache2 gesammelt. In der Datei error.log werden die Fehler des Servers protokolliert.

Besucherstatistiken

Neben den Fehlern protokolliert der Apache auch jeden Zugriff. Die Dateien finden Sie in dem Verzeichnis, das in den VirtualHost-Blöcken mit der Direktive CustomLog spezifiziert wird.

In der Datei apache2.conf wird in den Direktiven LogFormat festgelegt, welches Ausgabeformat das Protokoll haben kann. Es gibt mehrere Vorschläge, die jeweils am Ende einen Namen bekommen. Der vorgegebene Name lautet combined. Dieser wird in der Direktive CustomLog aufgegriffen.

# sites-enabled/000-default
...
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
# apache2.conf
...
LogFormat "%h %l %u %t ... \"%{User-Agent}i\" " combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Die Benutzerprotokolle finden Sie normalerweise im Verzeichnis datei/var/log/apache2 in der Datei access.log. Damit die Datei nicht zu groß wird, wird sie in regelmäßigen Abständen wegrotiert und als gepackte Datei einige Zeit aufbewahrt, bevor sie entsorgt wird.

Statistik durch den WebAlizer

Das Programm WebAlizer analysiert die Besucherstatistiken, die der Apache erzeugt hat, und zeigt das Ergebnis im Browser an. Sie können das Paket webalizer aus dem Repository installieren.

# apt install webalizer

Anschließend führen Sie das Programm webalizer im Verzeichnis /var/log/apache2 aus. Das Ergebnis wird als HTML-Seiten nach /var/www/webalizer geschafft. Dort können Sie die Statistiken über die URL http://localhost/webalizer ansehen.

Virtuelles Hosting

Machen wir uns nichts vor: Viele Websites sind so langweilig, dass sie niemand sehen will. Die Website des Amtes für Untergangsfragen der Deutschen Marine ist vermutlich seit ihrer Entstehung nur dreimal besucht worden. Es wäre recht unsinnig, für solche Domänen jeweils einen eigenen PC aufzustellen. Damit mehrere solcher Domänen verwaltet werden können, bietet Apache das Konzept des virtuellen Hosts.

Zwar erreicht das Paket den Server über seine IP-Adresse, da der Domain-Name ja zuvor bereits aufgelöst wurde, aber HTTP führt in den Paketen des Clients immer noch die ursprüngliche URL mit. Und diese wird von Apache als ServerName ausgelesen.

Konfiguration für www.willi.edu

So etwas wollen wir ausprobieren und so erstellen wir eine Datei namens willi.edu im Verzeichnis sites-available. Sie soll sich um die neue Domain willi.edu kümmern. Dazu kopieren wir die Datei 000-default.conf und passen sie an:

<VirtualHost www.willi.edu:80>
ServerAdmin webmaster@localhost
ServerName www.willi.edu
DocumentRoot /var/www/willi
...

Um die Seite zu aktivieren, kennt Apache den Befehl a2ensite. Er erzeugt einen symbolischen Link im Verzeichnis sites-enabled.

# a2ensite willi.edu.conf

Sie können den Effekt überprüfen, indem Sie in das Verzeichnis hineinschauen.

# ls -l /etc/apache2/sites-enabled/
insgesamt 0
lrwxrwxrwx ... 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx ... willi.edu.conf -> ../sites-available/willi.edu.conf

Sie können den benötigten symbolischen Link auch ohne a2ensite selbst von Hand setzen.

# cd /etc/apache2/sites-enabled/
# ln -s ../sites-available/willi.edu.conf 001-willi.edu
# ls -l
insgesamt 0
lrwxrwxrwx ... 000-default -> ../sites-available/default
lrwxrwxrwx ... 001-willi.edu -> ../sites-available/willi.edu.conf

Nach der Ausführung des Befehls a2ensite wurden Sie schon darauf hingewiesen, dass der Apache seine Konfiguration neu einlesen sollte. Sie sollten, wie nach jeder Änderung der Konfiguration, also Apache zum Neueinlesen auffordern:

# systemctl reload apache2

Als Verzeichnis haben wir in DocumentRoot den Pfad /var/www/willi angegeben. Dann sollten wir das Verzeichnis auch erzeugen und eine HTML-Datei hineinlegen.

# cd /var/www
# mkdir willi
# vi willi/index.html

In die Datei kommt irgendetwas, was im Browser deutlich macht, dass Sie wwww.willi.edu aufgerufen haben.

<h2>willi.edu</h2>

Domänenadresse umbiegen

Damit die neue und die bisherige Seite von demselben Apache betreut werden, muss die Namensauflösung beider auf dieselbe IP-Adresse zeigen. Das wird in der Praxis mit dem Domain Name Service (DNS) realisiert. Für die Testphase reicht es aber völlig, die Datei /etc/hosts des Clients zu manipulieren.

# /etc/hosts
...
192.168.109.199 linuxsrv www.willemer.edu www.willi.edu

Nun können Sie im Browser einmal www.willemer.edu und einmal www.willi.edu eingeben und sehen daraufhin unterschiedliche Seiten.

Gesicherte Übertragung per HTTPS

HTTP war gedacht, um wissenschaftliche Publikationen zu veröffentlichen und durch Links untereinander weltweit zu verbinden. Da wissenschaftliche Arbeiten in der Regel öffentlich sind, gab es keinen Grund, die Übertragung irgendwie zu schützen. Aber irgendjemand ist seither auf den Gedanken gekommen, Online-Banking über den Browser zu betreiben. Und da die meisten Leute nicht möchten, dass jeder im Netzwerk mitlesen kann, welche Schmiergelder wem gezahlt werden, musste das Protokoll abgedichtet werden.

Für diese Zwecke gibt es HTTPS, die verschlüsselte Schwester von HTTP, die mit Zertifikaten umgehen kann. Wie Sie Zertifikate erzeugen können und wie sie funktionieren, wird in Kapitel 17 ausführlicher dargestellt.

Für den Umgang mit HTTPS gibt es im Verzeichnis /etc/apache2/sites-available eine Beispielkonfigurationsdatei namens default-ssl.conf. Diese können Sie als Basis für eine eigene HTTPS-Seite verwenden.

Zertifikate

Die Bank wird sich gegenüber Ihrem Browser ausweisen. Das tut sie mit einem Zertifikat. Ein Zertifikat bietet zwei Möglichkeiten:

  • Es weist den Webserver als echt aus. Der Besucher kann feststellen, ob er mit seiner Bank und nicht mit der Firma Raub & Klau GmbH verbunden sind.
  • Über das Zertifikat ist es möglich, die Kommunikation zu verschlüsseln.

Apache wird für HTTPS konfiguriert

An dieser Stelle gehe ich davon aus, dass Sie ein Zertifikat besitzen. Ob Sie das Zertifikat von einer CA-Stelle bekommen haben oder sich nach den Bastelanleitungen in Kapitel 17 erstellt haben, spielt für die Konfiguration des Webservers keine Rolle. Die Zertifikatsdateien legen Sie an einer sicheren Stelle ab. Dafür schlägt der Apache /etc/ssl vor.

Wo die Dateien abgelegt werden, wird in den Variablen SSLCertificateFile und SSLCertificateKeyFile in der Konfigurationsdatei bestimmt. Die Konfigurationsdatei sollten Sie mit dem Editor öffnen.

# nano /etc/apache2/sites-available/default-ssl.conf

In der Datei werden weiter hinten die folgenden beiden Direktiven auf den Ort und den Namen der beiden SSL-Dateien angepasst:

SSLCertificateFile /etc/ssl/certs/mein.cert.crt
SSLCertificateKeyFile /etc/ssl/private/mein.cert.key

Nun muss noch ein Link von default-ssl auf enabled gesetzt werden. Dazu erzeugen Sie einen symbolischen Link im Verzeichnis sites-enabled:

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/default-ssl.conf 001-ssl.conf

In der Datei /etc/apache2/ports.conf dürfte der Port 443 freigegeben sein.

<IfModule mod_ssl.c>
Listen 443
</IfModule>

Normalerweise dürfte auch das SSL-Modul installiert und aktiviert sein. Falls das nicht der Fall ist, können Sie es aktivieren. Dann müssen Sie allerdings den Apachen neu starten.

# a2enmod ssl
# systemctl restart apache2

Aufruf der HTTPS-Site

Nun wenden Sie sich dem Client zu und starten dort den Browser, also beispielsweise Firefox, und geben in die Adresszeile https://linuxsrv ein, wenn linuxsrv der Name des Rechners ist, auf dem sich der Webserver befindet.

Wenn Sie ein offizielles Zertifikat von einer Zertifizierungsstelle bekommen haben, sollte alles im grünen Bereich sein. Aufmerksame Benutzer erkennen dies an dem Schloss links neben der Adresszeile.

Falls Sie Ihr Zertifikat selbst gebaut haben, wie in Kapitel 17, dann dürfte sich der Browser beklagen, dass er dieser Seite nicht traut. Je nach Browsertyp und -version können Sie das Zertifikat als vertrauenswürdig akzeptieren und die Verantwortung selbst übernehmen.

Wenn Sie aber beispielsweise im Intranet ein Zertifikat verwenden wollen und keine Lust haben, die Sicherheitslage mit den Kollegen zu diskutieren, können Sie den Browsern der Arbeitsplätze die eigene Zertifizierungsstelle bekannt machen.

  • Bei Firefox gehen Sie dazu in dessen Einstellungen.
  • Dort suchen Sie nach DATENSCHUTZ UND SICHERHEIT.
  • Unter der Überschrift ZERTIFIKATE können Sie den Button ZERTIFIKATE ANZEIGEN drücken.
  • Unter der Lasche ZERTIFIZIERUNGSSTELLEN sehen Sie alle bekannten CAs.
  • Dort finden Sie unten einen Button IMPORTIEREN, über den Sie Ihr eigenes Zertifikat für diesen Browser auf diesem Rechner einrichten können.

Dynamische Websites mit PHP

Inzwischen ist der Browser mehr als die statische Anzeigeplattform wissenschaftlicher Dokumente. Der Server versorgt den Aufrufer mit dynamisch erzeugten Daten, die er aus Datenbanken holt. Dazu sind auf der Seite des Servers Programme erforderlich, die den HTML-Code, den der Server dem Client sendet, um die gewünschten Informationen erweitert.

Die Geschichte der aktiven Webserver ist lang und keineswegs beendet. Zu Anfang wurden per CGI Anfragen über Programme gesteuert. Hier wurde erst C, später aber vor allem die Skriptsprache Perl eingesetzt. Die Architektur wurde als LAMP (Linux, Apache, MySQL, Perl) bezeichnet. Inzwischen wurde die Sprache Perl durch PHP abgelöst. Glücklicherweise ist der Anfangsbuchstabe gleich. Gegenüber Perl hat PHP mehrere Vorteile, insbesondere ist PHP einfacher in HTML einzubinden. Die Effizienz wurde gesteigert, indem man PHP als Modul in den Apachen einbaute.

Dies führt dazu, dass PHP immer noch weit verbreitet ist und auch von den Hostern von Webpräsenzen oft als einzige Programmierumgebung angeboten wird. Diverse Server wurden auf der Basis von HTTP in PHP erstellt, wie beispielsweise Nextcloud (siehe Kapitel 14).

Installation des PHP-Moduls

Damit der Interpreter von PHP nicht bei jedem Aufruf neu gestartet werden muss, ist er als Apache-Modul implementiert und kann so ohne Zeitversatz vom Webserver aufgerufen werden. Das PHP-Modul von Apache heißt libapache2-mod-php und muss explizit installiert werden:

# apt install libapache2-mod-php

Bevor das PHP-Modul aktiv wird, müssen Sie den Apache-Server neu starten:

# systemctl restart apache2

Alle Seiten, deren Dateinamen auf .php enden, werden nun vom Apachen vor dem Senden an den Client dem PHP-Interpreter zugeführt. Dieser führt die im HTML-Code enthaltenen Programmschnipsel aus und generiert auf diese Weise reine HTML-Seiten, die dann an den Browser gesendet werden. Der Client kann also das PHP-Listing niemals sehen, sondern nur dessen Ergebnisse.

Die grundlegenden Sprachelemente

Es würde zu weit führen, an dieser Stelle eine Sprachbeschreibung von PHP auszubreiten. Wenn Sie weitere Informationen zu PHP benötigen, finden Sie reichlich Literatur zum Thema und auch das eine oder andere Angebot im Internet.

Für einen Test wird im Verzeichnis /var/www/html die Datei index.html gelöscht und dafür eine Datei index.php angelegt. Darin wird folgendes kurze PHP-Skript eingetragen:

<?php
echo "Hallo World-Wide-Web!";
?>

Nun geben Sie die Adresse des Webservers in die Adresszeile ein, und auf dem Bildschirm sollte der Schriftzug »Hallo World-Wide-Web!« erscheinen.

Kommunikation mit Datenbanken

Shops und ähnliche Webanwendungen werden ihre Daten in der Regel in Datenbanken ablegen. Dazu muss PHP auf die Datenbank zugreifen können. Als Verbindungsglied wird eine Bibliothek benötigt, die zwischen PHP und der jeweiligen Datenbank vermittelt. Damit nicht heimlich einer der Programmierer zur Konkurrenz wechselt, verwenden die Datenbankhersteller leicht unterschiedliche Schnittstellen.

Als Administrator müssen Sie die Bibliotheken installieren, die das Bindeglied zwischen PHP und Datenbank realisieren.

Die Bibliothek für die Zugriffe von PHP auf die MySQL-Datenbank (siehe Abschnitt 9) ist weder im Paket von MySQL noch in dem von PHP enthalten. Dazu muss explizit das Paket php-mysql hinzuinstalliert werden:

# apt install php-mysql

Auch für die PostgreSQL-Datenbank wird ein Paket benötigt. Dieses heißt php-pgsql.

# apt install php-pgsql