linux-rhel-centos-fedora webserver apache httpd rhel selinux

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 keine a2enmod-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 (nicht www-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 configtest vor 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