Apache ist ein kostenloser, quelloffener Webserver, der sowohl statische als auch dynamische Anwendungen bereitstellen kann. Er bietet eine äußerst flexible Architektur mit zahlreichen modularen Erweiterungen und kann zudem als Reverse Proxy oder Load Balancer agieren, um Webanwendungen oder Backend-Dienste auszuliefern.
Diese Anleitung zeigt, wie Sie Apache auf Ubuntu 20.04 installieren und so konfigurieren, dass Webanwendungen über virtuelle Hosts sicher bereitgestellt werden.
Voraussetzungen
- Ein Server mit Ubuntu 20.04
- Ein A-Record für Ihre Domain, der auf die IP-Adresse des Servers verweist
- SSH-Zugang zum Server als Nicht-Root-Benutzer mit sudo-Rechten
- Sicherstellen, dass der Server aktuell ist
Passende Infrastruktur bei centron
Absicherung endet nicht beim Server: Cloud Firewalls filtern den Datenverkehr vor der VM – zentral verwaltet, ohne Aufpreis je Regel. Cloud Firewalls ansehen →
Apache installieren
Das Apache-Paket ist in den Standard-Repositories von Ubuntu 20.04 enthalten. Folgen Sie diesen Schritten, um die neueste Version mit dem APT-Paketmanager zu installieren und Apache so einzurichten, dass es beim Systemstart automatisch ausgeführt wird.
Paketindex des Servers aktualisieren
$ sudo apt updateApache-Webserver-Paket installieren
$ sudo apt install apache2 -yInstallierte Apache-Version prüfen
$ apachectl -vBeispielausgabe:
Server version: Apache/2.4.41 (Ubuntu)
Server built: 2024-07-17T18:58:09
HTTP-Verkehr durch die Firewall erlauben
$ sudo ufw allow 80/tcpÖffnen Sie anschließend die öffentliche IP-Adresse Ihres Servers in einem Browser (z. B. Chrome), um zu überprüfen, ob die standardmäßige Apache-Willkommensseite angezeigt wird.
Apache-Systemdienst verwalten
Das Apache-Serviceprofil steuert die Laufzeitprozesse des Webservers. Verwenden Sie die folgenden Befehle, um Apache so zu konfigurieren, dass es beim Booten startet, und um den Dienststatus zu prüfen oder zu steuern.
Apache beim Systemstart aktivieren
$ sudo systemctl enable apache2Beispielausgabe:
Synchronizing state of apache2.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable apache2
Apache-Dienst starten
$ sudo systemctl start apache2Status des Apache-Dienstes prüfen
$ sudo systemctl status apache2Beispielausgabe:
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2025-04-06 08:30:18 UTC; 3min 26s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 3588 (apache2)
Tasks: 55 (limit: 9415)
Memory: 7.0M
CGroup: /system.slice/apache2.service
├─3588 /usr/sbin/apache2 -k start
├─3589 /usr/sbin/apache2 -k start
└─3590 /usr/sbin/apache2 -k start
Apache-Dienst stoppen
$ sudo systemctl stop apache2Apache neu starten
$ sudo systemctl restart apache2Neuen Apache Virtual Host erstellen
Apache verwendet virtuelle Hosts, um Anwendungen bereitzustellen. Standardmäßig lauscht ein virtueller Host auf allen IP-Adressen über den HTTP-Port 80. Im Folgenden wird beschrieben, wie Sie den Standard-Host deaktivieren und einen eigenen virtuellen Host für Ihre Domain einrichten.
Konfigurationsdatei erstellen
$ sudo nano /etc/apache2/sites-available/website.confFügen Sie folgenden Inhalt ein und ersetzen Sie app.example.com durch Ihre Domain und webmaster@example.com durch die E-Mail-Adresse des Administrators:
ServerAdmin webmaster@example.com
ServerName app.example.com
DocumentRoot /var/www/html/website
DirectoryIndex index.html index.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Options Indexes FollowSymLinks
AllowOverride All
Require all grantedDiese Konfiguration liefert Dateien aus /var/www/html/website über die Domain app.example.com. Wichtige Direktiven:
<VirtualHost *:80>: Lauscht auf Port 80ServerAdmin: Administrator-E-Mail für FehlermeldungenServerName: Domainname für den virtuellen HostDocumentRoot: Verzeichnis, aus dem die Anwendungsdateien bereitgestellt werdenDirectoryIndex: Standarddatei, die ausgeliefert wird (z. B. index.html)ErrorLogundCustomLog: Speicherorte der Logdateien<Directory /var/www/html/website>: Einstellungen für das Webroot-VerzeichnisOptions Indexes FollowSymLinks: Aktiviert Verzeichnisauflistung und symbolische LinksAllowOverride All: Erlaubt .htaccess-OverridesRequire all granted: Gewährt allen Benutzern Zugriff
Standard-Virtual-Host deaktivieren
$ sudo a2dissite 000-defaultNeuen Virtual Host aktivieren
$ sudo a2ensite websiteWebroot-Verzeichnis erstellen
$ sudo mkdir -p /var/www/html/websiteApache-Konfiguration testen
$ sudo apachectl configtestErwartete Ausgabe: Syntax OK
Beispielseite index.html anlegen
$ sudo nano /var/www/html/website/index.htmlFügen Sie folgenden HTML-Code ein:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Apache Web Server</title>
</head>
<body>
<h1>Greetings from centron</h1>
</body>
</html>Diese Seite zeigt beim Aufruf Ihrer Domain die Meldung „Greetings from centron“ an.
Besitzrechte für das Webroot-Verzeichnis setzen
$ sudo chown -R www-data:www-data /var/www/html/websiteApache neu starten, um Änderungen zu übernehmen
$ sudo systemctl restart apache2Apache-Webserver absichern
Standardmäßig lauscht Apache auf Port 80, wodurch Daten zwischen Server und Browser unverschlüsselt übertragen werden. HTTPS ermöglicht eine verschlüsselte Kommunikation mithilfe gültiger SSL-Zertifikate, die den Webserver gegenüber dem Browser authentifizieren. Gehen Sie wie folgt vor, um Apache mit vertrauenswürdigen Let's Encrypt SSL-Zertifikaten abzusichern und sämtlichen HTTP-Verkehr automatisch auf HTTPS umzuleiten.
Certbot-Client installieren
Installieren Sie den Certbot-Client für Let's Encrypt über den Snap-Paketmanager.
$ sudo snap install certbot --classicNeues SSL-Zertifikat anfordern
Fordern Sie ein Let's Encrypt SSL-Zertifikat für Ihre Virtual-Host-Domain an. Ersetzen Sie app.example.com durch Ihre Domain und hello@example.com durch Ihre E-Mail-Adresse.
$ sudo certbot --apache --agree-tos --redirect -d app.example.com -m hello@example.comBei erfolgreicher Ausführung sehen Sie eine Ausgabe ähnlich der folgenden:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/app.example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/app.example.com/privkey.pem
This certificate expires on 2025-07-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for app.example.com to /etc/apache2/sites-available/website-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://app.example.com
SSL-Erneuerung testen
Überprüfen Sie den automatischen Erneuerungsprozess mit einem Testlauf.
$ sudo certbot renew --dry-runBeispielausgabe:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/app.example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for app.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/app.example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Apache neu starten, um SSL-Änderungen zu übernehmen
$ sudo systemctl restart apache2Firewall-Regeln einrichten
Auf Ubuntu 20.04-Servern kann die Uncomplicated Firewall (UFW) aktiviert werden. Konfigurieren Sie UFW so, dass Netzwerkverbindungen über das Apache-Firewall-Profil zugelassen werden.
Verfügbare UFW-Profile anzeigen
$ sudo ufw app listSie sollten Profile ähnlich der folgenden sehen:
Apache
Apache Full
Apache Secure
OpenSSH
Apache Full-Profil erlauben
Dadurch werden sowohl HTTP (Port 80) als auch HTTPS (Port 443) Verbindungen durch die Firewall ermöglicht.
$ sudo ufw allow 'Apache Full'Firewall neu laden
$ sudo ufw reloadFirewall-Status prüfen
$ sudo ufw statusBeispielausgabe:
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
Apache Full ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Öffnen Sie abschließend Ihre Virtual-Host-Domain https://app.example.com in einem Browser und prüfen Sie, ob Apache Ihre HTML-Anwendung mit der Meldung „Greetings from centron“ ausliefert.
Fazit
Sie haben erfolgreich den Apache-Webserver auf Ihrem Ubuntu 20.04-Server installiert. Apache ermöglicht das Hosting statischer Webseiten und die Integration mit dynamischen Inhaltsprozessoren wie PHP, um moderne Anwendungen wie WordPress bereitzustellen. Darüber hinaus können Sie Apache mithilfe des Moduls mod_proxy als Reverse Proxy konfigurieren, um Backend-Dienste sicher auszuliefern.
Testen Sie Ihr Setup auf ccloud³
Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.