Apache httpd on RHEL: Enterprise Setup (Artikel 097)
Konfiguration des Apache Webservers unter RHEL. Erfahren Sie die Unterschiede zur Debian-Welt, den Umgang mit httpd-Strukturen und die perfekte SELinux-Integration.
# Apache httpd on RHEL: Web-Services im Red Hat Standard
TL;DR / Management Summary In der RHEL-Welt heißt der Webserver nicht
apache2, sondern httpd. Die Konfigurationspfade folgen einem anderen Schema als bei Ubuntu/Debian. Ein Senior Admin muss wissen, dass in RHEL keinea2enmod-Befehle existieren – hier laden wir Module über.conf-Dateien. Das wichtigste Thema in diesem Modul ist die Koexistenz von httpd und SELinux, ohne die kein Webdienst in RHEL stabil läuft.
# 1. Einführung & Architektur
Die RHEL-Struktur verstehen.
- Config-Root:
/etc/httpd/ - Module:
/etc/httpd/conf.modules.d/ - Virtual Hosts:
/etc/httpd/conf.d/ - Logs:
/var/log/httpd/
# Die Lade-Reihenfolge (Mermaid)
graph TD
A[/etc/httpd/conf/httpd.conf] --> B[conf.modules.d/*.conf]
A --> C[conf.d/*.conf]
B --> D[Load Modules: mod_ssl, mod_rewrite]
C --> E[vHosts & Application Config]
E --> F[SELinux Context Check]
# 2. Installation & Grundkonfiguration
Schnell und sauber.
# Schritt 1: Pakete installieren
sudo dnf install httpd mod_ssl
sudo systemctl enable --now httpd
# Schritt 2: Firewall öffnen (RHEL Standard)
sudo firewall-cmd --permanent --add-service={http,https}
sudo firewall-cmd --reload
# 3. SELinux & httpd: Die Überlebensanleitung
Warum ‘Forbidden’ oft kein Rechteproblem ist.
Das ist der Punkt, an dem 90% aller Admins bei RHEL scheitern.
# Szenario A: Web-Inhalt an Non-Standard-Ort
Wenn /var/www/html nicht reicht und Sie /data/web nutzen wollen:
sudo semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
sudo restorecon -Rv /data/web
# Szenario B: Webserver als Proxy (Network Access)
Wenn Apache Anfragen an einen App-Server (Tomcat, Gunicorn) weiterleiten soll:
sudo setsebool -P httpd_can_network_connect on
# 4. Day-2 Operations: Modularität
Module und vHosts.
Anstatt a2enmod editieren wir in RHEL Dateien unter /etc/httpd/conf.modules.d/.
# Virtual Hosts anlegen
In RHEL legen wir einfach eine Datei unter /etc/httpd/conf.d/vhost-myapp.conf an. Sie wird automatisch geladen.
ServerName myapp.company.com
DocumentRoot /var/www/myapp
ErrorLog logs/myapp_error_log
CustomLog logs/myapp_access_log combined
# 5. Troubleshooting & “War Stories”
Praxisfallen.
# Story 1: “Der hängende Restart”
Symptom: systemctl restart httpd dauert ewig und bricht mit einem Timeout ab.
Ursache: Das System hat keine Entropie (Zufallszahlen) für die Generierung von SSL-Keys oder ein Modul wartet auf einen DNS-Lookup, der blockiert wird.
Lösung: Prüfen Sie journalctl -u httpd und installieren Sie ggf. rng-tools für mehr Entropie auf virtuellen Maschinen.
# Story 2: “User-Writeable Uploads”
Symptom: Eine PHP-Applikation kann keine Bilder in /var/www/html/uploads speichern, obwohl der Ordner www-data (in RHEL: apache) gehört.
Ursache: SELinux Typ ist httpd_sys_content_t (Read-only für den Webserver).
Lösung: Ändern Sie das Label für diesen speziellen Ordner auf “beschreibbar”:
sudo semanage fcontext -a -t httpd_sys_ra_content_t "/var/www/html/uploads(/.*)?"
sudo restorecon -Rv /var/www/html/uploads
# 6. Fazit & Empfehlung
- User: In RHEL läuft httpd unter dem User
apache(nichtwww-data). - Logging: Nutzen Sie die relativen Pfade in der Config (z.B.
ErrorLog logs/...), diese zeigen automatisch nach/var/log/httpd/. - Validierung: Nutzen Sie
apachectl configtestvor jedem Restart.
# Anhang: Cheatsheet
| Aufgabe | RHEL Befehl |
|---|---|
| Config testen | apachectl configtest |
| Geladene Module | httpd -M |
| Virtual Hosts listen | httpd -S |
| SELinux Boolean Check | `getsebool -a |
| Haupt-Logdatei | /var/log/httpd/error_log |