Projekt Webserver – Ubuntu 22.04 Teil 2 – per Hostname erreichbar machen und Apache Webserver installieren

Bezugnehmend auf den vorherigen Artikel soll der Ubuntu Server ja ein Webserver werden. Hierzu bringt Ubuntu auch die erforderlichen Pakete selbstverständlich mit und installieren diese nach. Aber vorher sorgen wir noch dafür, dass der Server nicht nur über die IP-Adresse sondern auch über den Hostnamen erreichbar wird. Für den Zugriff über den Tab im Browser wird das zwar nicht benötigt, jedoch um den Server zB per Putty zu verwalten ist das ganz praktisch. Außerdem merkt man sich einen Namen leichter als eine IP-Adresse.

Bevor wir jedoch überhaupt irgend etwas nachinstallieren sorgen wir dafür, dass der Server auf dem aktuellen Stand ist indem wir folgenden Befehl ausführen.

sudo apt-get update -y && sudo apt-get upgrade -y

Per Hostname erreichbar machen

Hierzu installieren wir Avahi nach.

sudo apt-get install avahi-daemon avahi-autoipd avahi-dnsconfd libnss-mdns

Man muss noch das Administrator-Passwort eingeben und die Installation der Pakete mit J oder Y (je nach Einstellung) bestätigen.

Linux-Systeme wären an dieser Stelle bereits zufrieden – Windows leider noch nicht.

Um auch unter Windows den Server per Hostnamen erreichbar zu machen installieren wir noch zusätzlich Samba nach.

sudo apt-get install samba

Nach Abschluß der Installation führen wir einen Neustart durch.

sudo reboot

Nun sollte der Ubuntu Server auch unter Windows per Hostnamen erreichbar sein und wir können nun die weitere Einrichtung mit dem Programm Putty durchführen.

Windowsbenutzer geben hier den Hostnamen, in meinem Fall webserver, ein und unter Linux bzw. Apple hängt man noch .local an.

Den Browser brauchen wir ab jetzt nicht mehr.

Dateimanager Nano nachinstallieren

Nachdem wir die ein oder andere Datei bearbeiten müssen und der Dateimanager nano nicht vorinstalliert ist, zumindest in der Minimal-Installation, installieren wir diesen nach.

sudo apt-get install nano

Installation vom Webserver Apache

Nachdem wir uns im Ubuntu Server eingeloggt haben installieren wir den Webserver Apache.

sudo apt-get install apache2

Das war es dann auch schon mal. Wenn wir im Webbrowser (Edge, Firefox, Chrome, Opera…) und den Webserver aufrufen bekommen wir auch schon die Standard-Webseite unseres Webservers zu sehen.

Hierzu unter Windows http://webserver und unter Linux/Mac http://webserver.local in der Adressenzeile des Browsers eingeben.

Der Webserver funktioniert schon mal.

Installation zusätzlicher Apache Module

Die bereits im jetzigen Zustand vorinstallierten Module können wir mit folgendem Befehl prüfen.

apache2ctl -M

Für die Unterstützung von SSL, das umschreiben von URL’s, Headeranpassungen, Aktivierung von HTTP/2 usw. installieren wir folgende Module.

sudo a2enmod rewrite
sudo a2enmod actions
sudo a2enmod ssl
sudo a2enmod http2
sudo a2enmod headers
sudo a2enmod expires
sudo systemctl restart apache2

Alternativ kann man auch die Kurzform benutzen.

sudo a2enmod rewrite actions ssl http2 headers expires

Eine vollständige Liste der Module samt Kurzbeschreibung ist direkt auf der Apache Webseite zu finden: https://httpd.apache.org/docs/2.4/mod/

Apache Webserver per HTTPS erreichbar machen

Alleine das aktivieren vom Apache Modul mod_ssl reicht noch nicht aus damit die Webseite dann auch per https erreichbar ist. Näheres dazu unter folgendem Link: https://wiki.ubuntuusers.de/Apache/mod_ssl/

Erreichen können wir dies indem wir entweder gleich die Standardkonfiguration von Ubuntu aktivieren, oder eben selbst eine Konfiguration mit einem eigenen Zertifikat anlegen. Für Zertifikate von Let’s Encrypt oder ähnlichen würde man zusätzlich auch noch eine echte Domain aufschalten müssen.

1. Standard SSL Konfiguration laden

Im Ordner /etc/apache2/sites-available finden wir dazu die Datei default-ssl.conf. Diese ist jedoch nicht standardmäßig aktiviert was wir aber mit folgendem Befehl nachholen können.

sudo a2ensite default-ssl.conf

Deaktivieren könnten wir eine Seitenkonfiguration wieder mit a2dissite.

sudo a2dissite default-ssl.conf

Danach muss der Apache Webserver noch neugeladen werden.

sudo systemctl reload apache2

2. Alternative: ein selbstgeneriertes Zertifikat nutzen

Sollten wir anstelle des Standard-Ubuntu-Zertifikates ein eigenes nutzen wollen oder werden mehrere virtuelle Hosts verwendet können wir dieses Zertifikat mit folgendem Befehl anlegen.

sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/webserver.key -out /etc/ssl/webserver.crt -nodes -days 365

Mehr dazu: https://wiki.ubuntuusers.de/CA/#SelbstsignierteZertifikate

Anschließend müssen wir noch ein paar Eingaben machen zB:

Country Name (2 letter code) [AU]:AT
State or Province Name (full name) [Some-State]:Österreich
Locality Name (eg, city) []:Musterstadt 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Musterfirma GmbH
Organizational Unit Name (eg, section) []:Musterabteilung
Common Name (e.g. server FQDN or YOUR name) []:webserver
Email Address []:webmaster@localhost

Danach ist das selbstgenerierte SSL Zertifikat angelegt. Dies muss jedoch auch noch im VirtualHost eingetragen werden.

VirtualHost bearbeiten

SSL

Die SSL-Einstellungen können wir direkt in der Standard-Datei ergänzen -> wenn wir die 2. Alternative werden.

sudo nano /etc/apache2/sites-available/000-default.conf

Damit HTTPS genutzt werden kann müssen wir folgendes in einem separaten VirtualHost mit dem Port 443 ergänzen.

SSLEngine on
SSLCertificateFile /etc/ssl/webserver.crt
SSLCertificateKeyFile /etc/ssl/webserver.key

Wenn wir danach Apache neuladen wäre die Webseite auch schon per https erreichbar.

sudo systemctl reload apache2

HTTP/2

Bei älteren Versionen musste man um HTTP/2 aktivieren noch diese Zeile im VirtualHost ergänzen.

Protocols h2 h2c http/1.1

Es sieht so aus als wäre das bei Ubuntu 22.04 nicht mehr notwendig. Zumindest bei meinem Test funktionierte dies nach dem Aufruf der Webseite per https:// ohnehin.

Ordnerzugriffe, Änderung von Werten per .htaccess

Um zB Ordnerzugriffe ohne index.html zu sperren oder eben auch später die ein oder anderen Werte über die Datei .htaccess verändern zu können benutze ich zusätzlich noch folgenden Code-Abschnitt.

<Directory /var/www>
    Options -Indexes +FollowSymlinks +Multiviews
    AllowOverride All
    Require all granted
</Directory>

Gerade für den Fall, dass später mehrere PHP-Versionen verwendet werden, können dadurch über die Datei ./htaccess PHP-Werte zentral verändert werden. Ansonsten müsste man für jede einzelne PHP-Version diese jeweils in der jeweiligen php.ini Datei ändern.

SSL bzw. HTTPS erzwingen

Wenn wir schon SSL zur Verfügung haben möchten wir es auch permanent nutzen und leiten somit sämtliche Anfragen entsprechend um. Die Vorgehensweise ist hier ganz gut beschrieben. https://wiki.ubuntuusers.de/Apache/mod_rewrite/#Alles-auf-HTTPS-umleiten

Hierzu ergänzen wir im Host mit dem Port 80 folgende Zeilen

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

Hier nochmal die gesamte Datei /etc/apache2/sites-available/000-default.conf (ohne den zusätzlichen Kommentaren) im Überblick wie ich sie verwende.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    <Directory /var/www>
        Options -Indexes +FollowSymlinks +Multiviews
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile /etc/ssl/webserver.crt
    SSLCertificateKeyFile /etc/ssl/webserver.key
</VirtualHost>

Danach wieder Apache neustarten.

sudo systemctl restart apache2

Von nun an werden alle Anfragen direkt auf https umgeleitet. Nachdem es sich um ein selbstgeneriertes Zertifikat handelt erhalten wir jedoch beim ersten Aufruf eine entsprechende Fehlermeldung bzw. Warnung.

Beim Browser Firefox muss hier zB auf „Erweitert“ und anschließend auf „Risiko akzeptieren und fortfahren“ gedrückt werden. Das ist jedoch bei jedem Browser unterschiedlich.

Überprüfen ob auch HTTP2 verwendet wird kann man zB im Webbrowser Google Chrome in den Dev-Tools. Hierzu mit der „rechten“ Maustaste auf „Untersuchen“ klicken. Unter Netzwerk -> die Spalte Protokoll musste ich in meinem Fall erst einblenden. Die Webseite muss hierzu außerdem erneut aufgerufen werden.

Eigenen Benutzer für den Webserver anlegen

Ich lege an dieser Stelle immer einen eigenen Benutzer für den Webserver an um den Dateienverkehr nicht über den Administratoraccount regeln. Hier heißt der neue Benutzer webserver.

// Benutzer hinzufügen
sudo useradd -o -u 33 -g 33 -d /var/www -M webserver
// Passwort anlegen für webserver
sudo passwd webserver

Somit ist der Benutzer fertig angelegt aber um die Dateien des Webservers im Ordner html auch anlegen und bearbeiten zu können müssen wir diesen dem Benutzer und der Gruppe www-data noch zuweisen.

sudo chown -R www-data:www-data /var/www

Dateizugriff auf den Webserver

Unter Linux verwende ich direkt den Dateimanager Nemo. Dieser ist standardmäßig in Linux-Mint enthalten, lässt sich aber auch auf jeder anderen Distribution nutzen. Auch wenn die Überprüfung der Identität fehlschlägt melden wir uns dennoch an. Dies sollte jedoch mit den meisten in den jeweiligen Distributionen enthaltenen Dateimanagern funktionieren. Ob hier die IP-Adresse oder der Hostname (hier webserver.local) eingestellt wird ist egal.

Mit dem Programm WinSCP oder Filezilla können wir auch unter Windows die Dateien verwalten. Zur Erinnerung: unter Windows wird der Hostname ohne .local verwendet.

WinSCP

Filezilla –  wäre ohnehin Plattformunabhängig und kann sowohl unter Linux, Windows als auch unter Mac verwendet werden.

Für statische Webseiten wäre dies mal ausreichend. Um jedoch auch CMS-Systeme wie zB WordPress nutzen zu können werden wir noch PHP und einen Datenbankserver benötigten.




Bitte beachten Sie, dass dieser Beitrag bereits vor über einem Jahr geschrieben wurde und unter umständen nicht mehr aktuell ist.