Zuletzt aktualisiert am 20. September 2024 von Lars
Inhaltsverzeichnis
Apache Webserver installieren
sudo apt update
sudo apt install apache2
UFW Firewall konfigurieren
Um Apache auf Ubuntu richtig zu konfigurieren, solltest du die Uncomplicated Firewall (UFW) aktivieren. Nachdem du Apache installiert hast, erstellt Apache automatisch Anwendungsprofile in UFW, die den Datenverkehr zu den Webports steuern.
Zeige dir als Nächstes die Anwendungsprofile an:
sudo ufw app list
Ausgabe
$ sudo ufw app list
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Apache: TCP-Port 80 HTTP unverschlüsselt
Apache Full: TCP-Port 80 HTTP unverschlüsselt und TCP-Port 443 HTTPS verschlüsselt
Apache Secure: TCP-Port 443 HTTPS verschlüsselt
Wir setzen zunächst nur Apache.
sudo ufw allow 'Apache'
Ausserdem benötigen wir OpenSSH, damit wir uns nicht aussperren.
sudo ufw allow OpenSSH
Dann enablen wir die Firewall.
sudo ufw enable
Anschliessend kontrollieren wir, ob die Firewall läuft.
sudo ufw status
Als Nächstes kontrollieren wir, ob Apache läuft.
sudo systemctl status apache2
Wenn der Apache Server läuft, dann sollte unter der IP bereits eine Default-Website erscheinen

Virtuelle Hosts
Apache hostet Dokumente standardmässig in /var/www/html
. Um mehrere Domains auf einem Server zu nutzen, kannst du virtuelle Hosts einrichten. Ein virtueller Host reagiert nicht nach Prüfung der aufgerufenen URL mit der passenden Website. Lege innerhalb von /var/www/
eine Verzeichnisstruktur für deine eigene Domain an.
Beispiel
sudo mkdir /var/www/cloud.test.ch
Ersetze cloud.test.ch mit deiner tatsächlichen Domain.
Weise die Eigentümerschaft des Verzeichnisses mit der Umgebungsvariablen $USER
zu:
sudo chown -R $USER:$USER /var/www/cloud.test.ch
Setzte die Lese- und Schreibrechte:
sudo chmod -R 755 /var/www/cloud.test.ch
Erstelle eine einzelne Test-Website im Ordner /var/www/cloud.test.ch. Speichere diese unter index-html im erstellten Ordner ab. Beispiel:
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome to this Website</h1>
</body>
</html>
Jetzt muss eine Konfigurationsdatei für diesen Host angelegt werden. Diese könnte zum Beispiel so aussehen:
/etc/apache2/sites-available/cloud.test.ch.conf
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName cloud.test.ch
ServerAlias www.cloud.test.ch
DocumentRoot /var/www/cloud.test.ch
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Aktiviere die Konfiguration.
sudo a2ensite cloud.test.ch.conf
Das Ergebnis sollte so aussehen.
sudo a2ensite cloud.test.ch.conf
Enabling site cloud.test.ch.
To activate the new configuration, you need to run:
systemctl reload apache2
ubuntu@cloud-lars-01:/var/www/cloud.test.ch$ sudo systemctl reload apache2
ubuntu@cloud-lars-01:/var/www/cloud.test.ch$
Deaktiviere die Standardseite.
sudo a2dissite 000-default.conf
Teste die Konfiguration auf Fehler.
sudo apache2ctl configtest
Das Ergebnis sollte so aussehen,
$ sudo apache2ctl configtest
Syntax OK
Wenn alles fehlerfrei ist, starte Apache neu.
sudo systemctl restart apache2
Log-Dateien des Apache Webserver
Die Logs des Apache-Webservers befinden sich normalerweise im Verzeichnis /var/log/apache2/
auf einem Ubuntu-System.
Zugriffsprotokoll (access log)
Diese Datei enthält Informationen über alle Anfragen, die an den Webserver gestellt wurden. Die Standarddatei ist /var/log/apache2/access.log
Einträge in dieser Datei enthalten Details wie die IP-Adresse des Clients, das Datum und die Uhrzeit der Anfrage, die angeforderte Ressource, den HTTP-Statuscode und mehr.
Fehlerprotokoll (error log)
Diese Datei enthält Informationen über Fehler und diagnostische Informationen, die beim Betrieb des Webservers auftreten. Die Standarddatei ist: /var/log/apache2/error.log
Einträge in dieser Datei können Hinweise auf Konfigurationsprobleme, Berechtigungsfehler und andere Probleme enthalten.
Zugriff auf die Log-Dateien
Du kannst die Log-Dateien mit einem Texteditor öffnen oder mit Befehlen wie cat
, less
, more
oder tail
ansehen. Zum Beispiel:
sudo cat /var/log/apache2/access.log
sudo cat /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
Log-Dateien für spezifische Virtual Hosts
Wenn du spezifische Log-Dateien für verschiedene Virtual Hosts konfiguriert hast, findest du diese möglicherweise an anderen Orten. Hier ist ein Beispiel für eine Virtual Host-Konfiguration, die eigene Log-Dateien definiert:
<VirtualHost *:80>
ServerAdmin webmaster@deine_domain
ServerName deine_domain
ServerAlias www.deine_domain
DocumentRoot /var/www/deine_domain
ErrorLog /var/log/apache2/deine_domain_error.log
CustomLog /var/log/apache2/deine_domain_access.log combined
</VirtualHost>
Apache Webserver mit systemctl verwalten
Starten des Apache Webserver
sudo systemctl start apache2
Stoppen des Apache-Webservers
sudo systemctl stop apache2
Stoppen und Neustarten des Apache-Webservers
sudo systemctl restart apache2
Neustart von Apache und erneutes Laden der Konfiguration
sudo systemctl reload apache2
Automatischen Neustart von Apache aktivieren und deaktivieren
Wenn du Apache unter Ubuntu installierst, startet der Webserver nach der Einrichtung beim Booten automatisch. So kannst du das deaktivieren.
sudo systemctl disable apache2
Und so wieder aktivieren.
$ sudo systemctl enable apache2
UFW
Aktiviere UFW
sudo ufw enable
Erlaube SSH-Verbindungen
sudo ufw allow OpenSSH
Erlaube HTTP und HTTPS
sudo ufw allow 'Apache Full'
Überprüfe den Status von UFW
sudo ufw status
Die Ausgabe sollte etwas Ähnliches zeigen:
Falls erforderlich, spezifische Ports erlauben
Falls du spezifische Ports oder Dienste erlauben möchtest, kannst du das ebenfalls tun. Zum Beispiel, um nur HTTP-Verkehr zu erlauben:
sudo ufw allow http
sudo ufw allow https
Regeln verwalten und überprüfen
Um eine Liste aller aktiven Regeln anzuzeigen, verwende:
sudo ufw status verbose
Troubleshooting
Config deaktivieren und wieder aktivieren
sudo a2dissite file.conf
sudo a2ensite file.conf
systemctl reload apache2
Teste die Konfiguration auf Fehler
sudo apache2ctl configtest
Allgemeines Troubleshooting
Apache Konfiguration
Stelle sicher, dass deine Apache-Konfiguration korrekt ist. Überprüfe die Konfigurationsdateien für die virtuelle Hosts in /etc/apache2/sites-available
und /etc/apache2/sites-enabled
.
Weiter oben im Artikel siehst du, wie eine typische Datei aussieht.
Stelle sicher, dass die Datei in sites-enabled
verlinkt ist. Linke, falls nötig, erneut.
sudo ln -s /etc/apache2/sites-available/yourdomain.conf /etc/apache2/sites-enabled/yourdomain.conf
Nach Änderungen die Apache-Konfiguration diese neu laden.
sudo systemctl reload apache2
Firewall
Überprüfe, ob deine Firewall den HTTP- (Port 80) und HTTPS-Verkehr (Port 443) zulässt. Du kannst dies mit ufw
überprüfen und ggf. freischalten.
sudo ufw status
sudo ufw allow 'Apache Full'
Debug-Level erhöhen
sudo vim /etc/apache2/apache2.conf
Hier kannst du Loglevel zum Beispiel auf debug setzen.
DNS-Konfiguration
Stelle sicher, dass der globale DNS-Eintrag korrekt ist und auf die öffentliche IP-Adresse deines Servers verweist. Überprüfe das mit Tools wie nslookup
oder dig
.
nslookup yourdomain.com
dig yourdomain.com
Server IP-Adresse
Stelle sicher, dass dein Server eine öffentliche IP-Adresse hat und diese korrekt konfiguriert ist. Prüfe dies mit:
ip a
Router/Modem
Wenn dein Server hinter einem Router/Modem steht, stelle sicher, dass die Portweiterleitung (Port Forwarding) korrekt eingerichtet ist, um Anfragen von aussen an deinen Server weiterzuleiten.
Apache Logs
Überprüfe die Apache-Logs auf Fehler oder Hinweise, die dir bei der Fehlersuche helfen können.
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/access.log
Sonstiges
Updates
Mache regelmässig Updates. Gerade bei einem Server, der direkt im Internet hängt, ist das ganz besonders wichtig.
sudo apt update
sudo apt upgrade
Updates automatisieren
Erstelle ein Skript.
sudo nano /usr/local/bin/auto-update.sh
Füge die folgenden Zeilen ein.
!/bin/bash
apt-get update -y
apt-get upgrade -y
apt-get dist-upgrade -y
apt-get autoremove -y
apt-get autoclean -y
Mache das Skript ausführbar.
sudo chmod +x /usr/local/bin/auto-update.sh
Richte einen Cron-Job ein.
sudo crontab -e
Füge die folgende Zeile ein, um das Skript täglich um 2:00 Uhr morgens laufen zu lassen.
0 2 * * * /usr/local/bin/auto-update.sh >> /var/log/auto-update.log 2>&1
Häufig ist nach einem Update ein Neustart erforderlich. Man könnte nach dem letzten Befehl zum Beispiel mit "sleep 60" 60 Sekunden warten und danach einen Neustart mit "shutdown -r now" machen. Das führt aber natürlich zu einem Unterbruch der Services und der Websites.
Mit Geo IP Apache Zugriff aus bestimmten Ländern konfigurieren
Um den Zugriff auf den Apache-Server für bestimmte Länder zu beschränken, kann das Modul mod_geoip
verwendet werden.
Installation
sudo apt-get update
sudo apt-get install libapache2-mod-geoip geoip-database
Aktivierung
sudo a2enmod geoip
sudo service apache2 restart
Konfiguration
sudo vim /etc/apache2/mods-available/geoip.conf
Fügen die folgenden Zeilen hinzu, um die GeoIP-Datenbank zu verwenden:
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
Aktivieren des Verwendens der .htaccess Datei in der Apache-Konfigurationsdatei
sudo vim /etc/apache2/sites-available/domain.conf
Ergänzen von...
<Directory /var/www/domain-root>
AllowOverride All
</Directory>
...innerhalb der <Virtual Host> Sektion.
Erstellen einer .htaccess
sudo vim /var/www/domain-root/.htaccess
Ergänzen der Direktive. Diese erlaubt zum Beispiel nur den Zugriff aus DE und CH.
<IfModule mod_geoip.c>
SetEnvIf GEOIP_COUNTRY_CODE DE AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry
Deny from all
Allow from env=AllowCountry
</IfModule>
Zeit gespart? Dann unterstütze doch it-zeugs.de
Wenn dieser Tipp dir geholfen hat, Zeit zu sparen, überlege bitte, eine kleine Spende zu hinterlassen. Dein Beitrag hilft mir, weiterhin wertvolle Inhalte zu erstellen. Du kannst unter diesem Linke spenden: Spende it-zeugs.de
Falld du nicht spenden willst oder kannst, dann wäre es toll, wenn du deinen nächsten Amazon Einkauf mit diesem Link beginnen würdest: Amazon Link. Für dich wird es nicht teurer, ich bekomme aber einen kleinen Beitrag.
Vielen herzlichen Dank ❤️

Hallo, hier schreibt Lars. Dipl-Ing. Ingenieurinformatik (FH). Seit Jahrzehnten in der IT tätig. Geprüfter (und begeisterter) Webmaster. Ebenso begeisterter Windows-, Apple-, und Office-User. Ich schreibe über alle möglichen Themen rund um IT. Mehr über mich erfährst du hier: Über mich. Danke für deinen Besuch!