Zum Inhalt springen
CitexNode
Alle Anleitungen

PHP und WordPress mit nginx

PHP-FPM einrichten, WordPress installieren und die Dateirechte richtig setzen.

5 Min. Lesezeit

Diese Anleitung installiert PHP-FPM, verbindet es mit nginx und richtet WordPress ein.

Gilt für Debian 12 und 13, Ubuntu 22.04 und 24.04, AlmaLinux 9 und Rocky Linux 9. Alle Befehle laufen als root. Als Beispiel nehmen wir example.de.

Vorher brauchst du:

PHP-FPM installieren

Debian und Ubuntu bringen eine aktuelle PHP-Version mit (Debian 12: 8.2, Debian 13: 8.4, Ubuntu 22.04: 8.1, Ubuntu 24.04: 8.3):

bash
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-imagick

AlmaLinux und Rocky Linux liefern standardmäßig PHP 8.0. Schalt eine neuere Version frei. Welche es gibt, zeigt dnf module list php; nimm die höchste, hier 8.2:

bash
dnf module reset -y php
dnf module enable -y php:8.2
dnf install -y php-fpm php-mysqlnd php-gd php-intl php-mbstring php-xml php-pecl-zip

Auf AlmaLinux und Rocky läuft PHP-FPM als Benutzer apache. Stell es auf nginx um. In /etc/php-fpm.d/www.conf:

ini
user = nginx
group = nginx

Dann starten:

bash
systemctl enable --now php-fpm

Wo PHP-FPM lauscht

nginx spricht mit PHP-FPM über einen Socket. Such den Pfad heraus:

  • Debian und Ubuntu: ls /run/php/, z. B. /run/php/php8.2-fpm.sock (die Zahl ist deine PHP-Version).
  • AlmaLinux und Rocky Linux: /run/php-fpm/www.sock.

WordPress herunterladen

bash
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
mkdir -p /var/www/example.de
cp -a wordpress/. /var/www/example.de/
rm -rf wordpress latest.tar.gz

Dateirechte setzen

Die Dateien gehören dem Benutzer, unter dem PHP läuft. Nur so kann WordPress Plugins und Updates selbst einspielen. Ordner bekommen 755, Dateien 644.

Debian und Ubuntu (Benutzer www-data):

bash
chown -R www-data:www-data /var/www/example.de
find /var/www/example.de -type d -exec chmod 755 {} +
find /var/www/example.de -type f -exec chmod 644 {} +

AlmaLinux und Rocky Linux (Benutzer nginx), dazu SELinux: WordPress darf in wp-content schreiben und für Updates nach außen verbinden:

bash
chown -R nginx:nginx /var/www/example.de
find /var/www/example.de -type d -exec chmod 755 {} +
find /var/www/example.de -type f -exec chmod 644 {} +
dnf install -y policycoreutils-python-utils
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/example.de/wp-content(/.*)?"
restorecon -Rv /var/www/example.de
setsebool -P httpd_can_network_connect 1

wp-config.php anlegen

bash
cd /var/www/example.de
cp wp-config-sample.php wp-config.php

Trag in wp-config.php Datenbankname, Benutzer und Passwort ein:

php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wordpress' );
define( 'DB_PASSWORD', 'DEIN-PASSWORT' );
define( 'DB_HOST', 'localhost' );

Ersetz außerdem den Block mit AUTH_KEY bis NONCE_SALT durch frische Schlüssel. Die bekommst du von https://api.wordpress.org/secret-key/1.1/salt/:

bash
curl -s https://api.wordpress.org/secret-key/1.1/salt/

Die Datei enthält das Datenbankpasswort, also enger machen:

bash
chmod 640 wp-config.php

nginx-Konfiguration

Ersetz die Konfiguration aus der Webserver-Anleitung, /etc/nginx/conf.d/example.de.conf, durch diese. Den Pfad bei fastcgi_pass passt du an deinen Socket an:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name example.de www.example.de;

    root /var/www/example.de;
    index index.php;
    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\. {
        deny all;
    }
}

Prüfen, laden und das Zertifikat wieder eintragen lassen:

bash
nginx -t
systemctl reload nginx
certbot --nginx -d example.de -d www.example.de

certbot fragt, ob es das vorhandene Zertifikat neu einbinden soll; wähl das.

Lädst du größere Dateien hoch als 2 MB, setz in der PHP-Konfiguration upload_max_filesize und post_max_size höher (Debian/Ubuntu: /etc/php/<version>/fpm/php.ini, Alma/Rocky: /etc/php.ini) und starte PHP-FPM neu (systemctl restart php8.2-fpm bzw. systemctl restart php-fpm).

WordPress einrichten

Öffne https://example.de im Browser. Der Installationsassistent fragt nach Sprache, Titel der Seite, Admin-Benutzer und Passwort. Nimm als Benutzernamen nicht admin.

Prüfen, ob es geklappt hat

  • Die Startseite lädt über https://, das Dashboard unter https://example.de/wp-admin/ auch.
  • Unter Werkzeuge → Website-Zustand meldet WordPress fehlende PHP-Module und Probleme mit Updates.
  • Installier testweise ein Plugin. Klappt das ohne Frage nach FTP-Zugangsdaten, stimmen die Rechte.

Häufige Fehler

  • 502 Bad Gateway. nginx erreicht PHP-FPM nicht. Prüf systemctl status php8.2-fpm (bzw. php-fpm) und ob der Socket-Pfad in fastcgi_pass stimmt.
  • Browser lädt die PHP-Datei herunter. Der location ~ \.php$-Block fehlt oder greift nicht. nginx -t und die Konfiguration prüfen.
  • „Fehler beim Aufbau einer Datenbankverbindung“. Name, Benutzer oder Passwort in wp-config.php falsch. Teste sie mit mariadb -u wordpress -p wordpress.
  • WordPress fragt beim Plugin-Update nach FTP. Die Dateien gehören nicht dem PHP-Benutzer. Das chown von oben wiederholen.
  • Leere weiße Seite. Meist ein PHP-Fehler. tail -n 50 /var/log/nginx/error.log zeigt ihn.
  • Updates scheitern auf AlmaLinux oder Rocky. SELinux sperrt Verbindungen nach außen. setsebool -P httpd_can_network_connect 1.

Wie es weitergeht

Kommst du nicht weiter, schreib uns ein Ticket.