Apache2 Configuration: Virtual Hosts & SSL (Artikel 034)
Professionelle Konfiguration des Apache2 Webservers. Einrichtung von Virtual Hosts, Modul-Management und die Absicherung mittels SSL/TLS und Let's Encrypt.
# Apache2 Masterclass: Virtual Hosts, Module & TLS
TL;DR / Management Summary Trotz der Konkurrenz durch Nginx bleibt Apache2 der vielseitigste Webserver für komplexe Enterprise-Umgebungen. Seine Stärken liegen im modularen Aufbau, der Unterstützung für
.htaccess(dezentrale Konfiguration) und der tiefen Integration in Legacy-Applikationen. Ein professionelles Setup nutzt Namensbasierte Virtual Hosts, strikte TLS-Ciphers und minimiert die geladenen Module auf das absolute Minimum.
# 1. Einführung & Architektur
Der Prozess-orientierte Webserver.
Apache2 (im event MPM Modus) kann heute fast so effizient wie Nginx skalieren. Er trennt den Core von den Features (Modulen).
# Architektur-Übersicht (Mermaid)
graph TD
A[Incoming Request Port 80/443] --> B[Apache Core]
B --> C{Check VirtualHost}
C -->|Match domain.com| D[vHost Config]
D --> E{Check Modules}
E --> F[mod_ssl]
E --> G[mod_rewrite]
E --> H[mod_proxy_fcgi]
F/G/H --> I[Content / Application]
# 2. Virtual Hosts: Mehrere Seiten pro Server
Namensbasierte Trennung.
Die Konfiguration liegt in /etc/apache2/sites-available/.
# Beispiel: Ein sicherer vHost (001-myapp.conf)
ServerName myapp.company.com
# Redirect permanent auf HTTPS
Redirect permanent / https://myapp.company.com/
ServerName myapp.company.com
DocumentRoot /var/www/myapp/public
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/myapp.company.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/myapp.company.com/privkey.pem
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
# 3. Modul-Management
Nur laden, was man braucht.
Apache bietet hunderte Module. Jedes Modul verbraucht RAM und erhöht die Angriffsfläche.
# Wichtige Befehle
# Modul aktivieren (z.B. Rewrite für saubere URLs)
sudo a2enmod rewrite
# Modul deaktivieren (z.B. autoindex - Verhindert Directory Listing)
sudo a2dismod autoindex
# Seite aktivieren/deaktivieren
sudo a2ensite myapp.conf
sudo a2dissite 000-default.conf
# 4. SSL/TLS & Let’s Encrypt
Verschlüsselung automatisiert.
Nutzen Sie Certbot, um Zertifikate automatisch zu erstellen und zu erneuern.
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d myapp.company.com
# Manuelles Hardening (/etc/apache2/mods-available/ssl.conf)
Erzwingen Sie moderne Ciphers:
SSLProtocol all -SSLv3 -TLSv1 -SSLv2 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
# 5. Troubleshooting & “War Stories”
Wenn die Seite nicht lädt.
# Story 1: “Der Port-Konflikt”
Symptom: Apache startet nicht mit der Meldung (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80.
Ursache: Ein anderer Dienst (oft Nginx oder Varnish) belegt bereits Port 80.
Lösung: sudo ss -tulpn | grep :80 zeigt den Schuldigen.
# Story 2: “Die .htaccess Ignoranz”
Symptom: URLs in WordPress funktionieren nicht (404), obwohl die .htaccess Datei vorhanden ist.
Ursache: AllowOverride None ist in der vHost-Konfiguration gesetzt (Apache ignoriert dann .htaccess).
Lösung: Setzen Sie AllowOverride All für das Verzeichnis (siehe Beispiel oben) und laden Sie mod_rewrite mit a2enmod rewrite.
# 6. Monitoring & Performance
- Status:
mod_statusaktivieren, um live zu sehen, welche IP welches File anfragt. - Logs: Nutzen Sie
tail -f /var/log/apache2/error.logzur Echtzeit-Fehlersuche. - MPM: Prüfen Sie, ob Sie das moderne
mpm_eventnutzen (apache2ctl -M | grep mpm). Es ist deutlich effizienter als das alteprefork.
# 7. Fazit & Empfehlung
- Sicherheit: Deaktivieren Sie
Indexes, um neugierige Blicke in Verzeichnisse zu verhindern. - Struktur: Nutzen Sie für jede Domain eine eigene Konfigurationsdatei.
- SSL: Nutzen Sie immer TLS 1.2/1.3.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Config testen | sudo apache2ctl configtest |
| Sanfter Reload | sudo systemctl reload apache2 |
| Liste aller vHosts | apache2ctl -S |
| Liste aller Module | apache2ctl -M |
| Berechtigungen fixen | chown -R www-data:www-data /var/www |