Warum Standard-Hosting nicht reicht

Dein WordPress-Blog läuft auf einem Shared-Hosting-Paket. Das ist solange okay, bis du 500 Besucher am Tag hast. Dann wird es langsam. Bei 2.000 wird es richtig problematisch. Und bei 10.000? Entweder der Anbieter drosselt dich, oder die Seite geht offline.

Fortgeschrittene Hosting-Konfiguration bedeutet: Du kontrollierst, wie PHP arbeitet, wie der Webserver Requests verteilt, ob Caching aktiviert ist und wie Cronjobs laufen. Das ist der Unterschied zwischen einer Website, die unter Last buckelt, und einer, die稳稳当当 läuft.

Voraussetzungen für diesen Guide

Du brauchst: SSH-Zugang zum Server, Root-Rechte oder einen Benutzer mit sudo, und ein Hosting-Paket mit Zugang zu php.ini oder einer .user.ini. Bei den meisten professionellen Anbietern (VPS, Cloud, Managed Server) ist das Standard.

PHP richtig konfigurieren

PHP ist das Herz fast jeder Website. Standardmäßig ist PHP so eingestellt, dass es für den Anbieter bequem ist — nicht für deine Performance. Hier die Einstellungen, die du ändern solltest:

PHP-Version wählen

PHP 8.3 ist die aktuelle Hauptversion. PHP 8.2 ist der stabilierte Standard. PHP 8.1 wird noch aktiv unterstützt. PHP 7.x und älter sollten längst deprecated sein — sie sind langsam und erhalten keine Security-Updates mehr.

Ein Upgrade von PHP 7.4 auf PHP 8.3 kann 30–50 % bessere Performance bedeuten, ohne eine einzige Code-Zeile zu ändern. Der Trick: teste vorher mit phpcs oder einem statischen Analyzer, ob deine Anwendung PHP-8-Kompatibilität hat.

PHP 7.4
Veraltet — kein Support
PHP 8.1
Stable, noch unterstützt
PHP 8.3
Neueste Version, performant

PHP-FPM: Der Schlüssel zu besserer Performance

Standard-PHP (mod_php / CGI) startet für jede Anfrage einen neuen Prozess. Das ist langsam. PHP-FPM (FastCGI Process Manager) nutzt einen Pool von persistenten PHP-Prozessen — Requests werden sofort an freie Prozesse verteilt.

PHP-FPM-Konfiguration (in /etc/php-fpm/www.conf oder im Hosting-Dashboard):

; Prozess-Manager: ondemand (langsam starten) oder dynamic (viel starten)
pm = dynamic

; Maximale Anzahl von Kind-Prozessen
pm.max_children = 50

; Anzahl der Children, die im Leerlauf bleiben
pm.min_spare_servers = 5
pm.max_spare_servers = 20

; Wie viele Requests ein Child-Prozess verarbeitet, bevor er recycelt wird
pm.max_requests = 500

pm.max_children richtig setzen

Jeder PHP-FPM-Prozess braucht ca. 64–128 MB RAM. Bei 2 GB RAM und 512 MB für das System bleiben dir ~1,5 GB für PHP. Bei 128 MB pro Child = max_children = 12. Überschreitest du das, начинается der Swap — und deine Website wird extrem langsam. Überwache den RAM-Verbrauch in den ersten Tagen nach der Konfiguration.

OPcache aktivieren

OPcache speichert kompilierten PHP-Code im RAM. Ohne OPcache muss PHP bei jeder Anfrage den gesamten Code neu parsen und kompilieren — das sind Millisekunden pro Request, die sich bei hundert Requests pro Sekunde zu echten Latenzen addieren.

OPcache aktivieren (in php.ini oder .user.ini):

opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.interned_strings_buffer=32
opcache.save_comments=1
opcache.validate_timestamps=0  ; 0 = kein Check (nur bei prod, nach dev-Test!)

opcache.validate_timestamps=0 deaktiviert den Datei-Timestamp-Check. Das spart weitere Millisekunden, bedeutet aber: du musst nach jedem Code-Update manuell den OPcache leeren (z.B. php -r "opcache_get_status();" oder per Panel).

Realpath-Cache aktivieren

PHP's Realpath-Cache speichert Dateisystem-Lookups. Besonders nützlich bei vielen Include-Dateien (Frameworks wie Symfony, Laravel, WordPress mit vielen Plugins):

realpath_cache_size = 4096K
realpath_cache_ttl = 600

Variablen-Konfiguration: php.ini tune-up

Jenseits von PHP-FPM und OPcache gibt es eine Handvoll php.ini-Einstellungen, die du kennen solltest:

Einstellung Empfohlen für Produktion Warum
max_execution_time 30–60s Verhindert endlos laufende Scripts. 30s reicht für 95 % der WP-Operationen.
memory_limit 256–512M WordPress mit vielen Plugins braucht oft 256 MB. Nicht mehr.
upload_max_filesize 64–128M Media-Uploads. Für die meisten Blogs ausreichend.
post_max_size 128M Muss größer sein als upload_max_filesize für Formulare.
display_errors Off Niemals on in Produktion — exposing Fehler-Details ist ein Sicherheitsrisiko.
log_errors On Fehler sollten geloggt werden, nicht angezeigt.
allow_url_fopen Off Deaktiviert Remote-Includes — eine häufige Angriffsfläche.

Wo änderst du PHP-Einstellungen?

php.ini (Root-Zugang): Globale Einstellungen für den gesamten Server.
.user.ini (im Docroot): Benutzerdefinierte Einstellungen, die nur für dieses Verzeichnis gelten.
cPanel / Plesk: UI-basierte PHP-Konfiguration.
FastCGI / .htaccess: PHP_ADMIN_VALUE für einzelne Verzeichnisse.

Redis als Object-Cache

WordPress ist berüchtigt für seine Datenbank-Abfragen. Jede Seitenladung kann 20–100 Datenbank-Queries bedeuten — besonders mit vielen Plugins. Redis speichert die Ergebnisse dieser Queries im RAM und liefert sie blitzschnell aus, statt sie jedes Mal neu aus der DB zu holen.

Redis auf dem Server installieren:

# Auf Debian/Ubuntu:
sudo apt install redis-server

# Prüfe ob Redis läuft:
redis-cli ping
# Response: PONG

# WordPress: Nutze Plugin "Redis Object Cache"
# oder setze in wp-config.php:
# define('WP_REDIS_HOST', '127.0.0.1');

Performance-Effekt von Redis: Eine typische WordPress-Seite mit aktiviertem Redis-Object-Cache braucht statt 50+ DB-Queries nur noch 3–5. Das kann Page-Load-Zeiten um 40–70 % reduzieren.

Redis ist nicht nur für WordPress

Jede Anwendung, die häufig dieselben Daten aus einer Datenbank oder einem externen API liest, profitiert von Redis. Dein Node.js-Backend, deine Python-API, dein PHP-Script — alle können Redis als verteilten Cache nutzen. Ein zentraler Redis-Server kann von mehreren Apps gleichzeitig verwendet werden.

Reverse Proxy: Nginx vor Apache

Viele Hosting-Setups nutzen Apache als primären Webserver. Aber Nginx als Reverse Proxy vor Apache kann die Performance drastisch verbessern. Nginx übernimmt die statische Dateiauslieferung (CSS, JS, Bilder) und leitet PHP-Requests an Apache weiter.

Der Vorteil: Nginx ist beim gleichzeitigen Ausliefern vieler Verbindungen (C10k-Problem) extrem effizient. Apache's Prefork/Worker-MPM kommt bei hohem Parallel-Traffic an seine Grenzen.

Ein typisches Setup:

# Nginx als Reverse Proxy (nginx.conf)
upstream backend {
    server 127.0.0.1:8080;  # Apache auf Port 8080
}

server {
    listen 80;
    server_name beispiel.de;

    # Statische Dateien direkt von Nginx
    location ~* \/(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
        proxy_pass http://backend;
    }

    # PHP an Apache weiterleiten
    location ~ \".php$\" {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Alles andere an Apache
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

HTTP/2 und HTTP/3 aktivieren

HTTP/2 ist seit 2015 Standard, wird aber auf vielen Shared-Hostings noch nicht aktiviert. HTTP/2 erlaubt Multiplexing — mehrere Requests über eine einzige Verbindung. Bei einer typischen Website mit 80 Ressourcen (CSS, JS, Bilder, Fonts) bedeutet HTTP/1.1 Dutzende Round-Trips. HTTP/2 braucht nur einen.

HTTP/3 (QUIC) geht noch weiter und reduziert Latenz besonders bei instabilen Verbindungen. Beides in Nginx aktivieren:

# /etc/nginx/nginx.conf
server {
    listen 443 ssl http2;
    listen 443 ssl http3;

    ssl_protocols TLSv1.2 TLSv1.3;

    # HTTP/3 (QUIC)
    add_header alt-svc 'h3=":443"; ma=86400';
}

Um HTTP/3 zu nutzen, brauchst du einen aktuellen Nginx (1.25+) und ein valides TLS-Zertifikat (Let's Encrypt funktioniert). Bei den meisten Managed Hostings ist HTTP/3 bereits vorkonfiguriert — frag nach oder prüfe mit dem HTTP/3 Checker.

Cronjobs: Regelmäßige Aufgaben richtig konfigurieren

WordPress und andere CMS brauchen regelmäßige Cronjobs für Aufräumen, Newsletter-Versand, geplante Posts und mehr. WordPress' eingebauter Cron (wp-cron.php) wird bei jedem Seitenaufruf getriggert — das ist ineffizient bei viel Traffic und funktioniert gar nicht, wenn die Seite Down ist.

Besser: deaktiviere WordPress-Cron und richte einen echten System-Cron ein:

# In wp-config.php:
define('DISABLE_WP_CRON', true);

# Als System-Cron (crontab -e):
# Alle 15 Minuten WordPress-Cronjob ausführen
*/15 * * * * wget -q -O /dev/null https://deine-domain.de/wp-cron.php?doing_wp_cron > /dev/null 2>&1

# Oder mit curl (etwas zuverlässiger):
*/15 * * * * curl -s https://deine-domain.de/wp-cron.php?doing_wp_cron > /dev/null 2>&1

System-Crons haben den Vorteil, dass sie auch laufen, wenn gerade niemand die Seite besucht. Bei einer Seite mit wenig Traffic wäre der WordPress-Cron sonst oft ausgesetzt.

Logs und Monitoring: Was läuft schief?

Die beste Konfiguration nutzt nichts, wenn du nicht weißt, wann etwas schiefläuft. Hier die Essentials:

PHP-Fehlerlogs aktivieren

# php.ini
error_log = /var/log/php_errors.log
log_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Prüfe das Log regelmäßig: tail -f /var/log/php_errors.log. Wiederholte Fehler zeigen dir, welche Plugins oder Code-Stellen Probleme machen.

Nginx Error Log

# nginx.conf
error_log /var/log/nginx/error.log warn;

Uptime-Monitoring einrichten

Nutze UptimeRobot, Better Uptime oder ein ähnliches Tool. Konfiguriere Checks alle 60 Sekunden auf die wichtigsten Endpunkte. Bei Fehlern -> Alert per E-Mail oder Slack. Das ist der Unterschied zwischen einem 5-Minuten-Ausfall, den du selbst bemerkst, und einem 3-Stunden-Ausfall, den deine Nutzer melden.

CPU- und RAM-Auslastung überwachen

Nutze htop (interaktiv) oder vmstat 5 (kompakt), um die Server-Auslastung im Auge zu behalten. Wenn der RAM regelmäßig über 85 % liegt oder die CPU dauerhaft über 80 %, brauchst du ein Upgrade — oder deine Konfiguration hat ein Memory-Leak.

Fazit: Konfiguration ist kein Set-and-Forget

Fortgeschrittenes Hosting ist kein einmaliges Setup, sondern ein kontinuierlicher Prozess. Starte mit den größten Hebeln: PHP-FPM, OPcache, Redis. Dann HTTP/2. Dann die Cronjob-Optimierung. Und dann: überwache. Die beste Konfiguration bringt nichts, wenn du nicht bemerkst, dass sie abrutscht.

Wenn du bei einem Anbieter bist, der dir keinen SSH-Zugang und keine vernünftige PHP-Konfiguration erlaubt, ist das ein Zeichen: dieser Anbieter ist nicht für fortgeschrittene Nutzer gebaut. Wechsle zu einem VPS oder Managed Server mit SSH-Zugang.

Finde den richtigen Hosting-Anbieter

Vergleiche Anbieter mit SSH-Zugang, PHP-FPM, Redis-Support und HTTP/2 — alle mit echten Preisen und Bewertungen.

Zum Hosting-Vergleich