Apache Webserver auf Ubuntu installieren

Zuletzt aktualisiert am 20. September 2024 von Lars

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

Apache Webserver

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 ❤️

Schreibe einen Kommentar