PHP und WordPress mit nginx
PHP-FPM einrichten, WordPress installieren und die Dateirechte richtig setzen.
5 Min. Lesezeit
Auf dieser Seite
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:
- nginx und eine Domain, die auf den Server zeigt: Webserver mit HTTPS einrichten (Weg A mit nginx).
- Eine Datenbank mit eigenem Benutzer, z. B.
wordpress: MariaDB einrichten.
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):
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-imagickAlmaLinux 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:
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-zipAuf AlmaLinux und Rocky läuft PHP-FPM als Benutzer apache. Stell es auf nginx um. In /etc/php-fpm.d/www.conf:
user = nginx
group = nginxDann starten:
systemctl enable --now php-fpmWo 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
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.gzDateirechte 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):
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:
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 1wp-config.php anlegen
cd /var/www/example.de
cp wp-config-sample.php wp-config.phpTrag in wp-config.php Datenbankname, Benutzer und Passwort ein:
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/:
curl -s https://api.wordpress.org/secret-key/1.1/salt/Die Datei enthält das Datenbankpasswort, also enger machen:
chmod 640 wp-config.phpnginx-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:
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:
nginx -t
systemctl reload nginx
certbot --nginx -d example.de -d www.example.decertbot 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 unterhttps://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 infastcgi_passstimmt. - Browser lädt die PHP-Datei herunter. Der
location ~ \.php$-Block fehlt oder greift nicht.nginx -tund die Konfiguration prüfen. - „Fehler beim Aufbau einer Datenbankverbindung“. Name, Benutzer oder Passwort in
wp-config.phpfalsch. Teste sie mitmariadb -u wordpress -p wordpress. - WordPress fragt beim Plugin-Update nach FTP. Die Dateien gehören nicht dem PHP-Benutzer. Das
chownvon oben wiederholen. - Leere weiße Seite. Meist ein PHP-Fehler.
tail -n 50 /var/log/nginx/error.logzeigt ihn. - Updates scheitern auf AlmaLinux oder Rocky. SELinux sperrt Verbindungen nach außen.
setsebool -P httpd_can_network_connect 1.
Wie es weitergeht
- Halte WordPress, Plugins und Themes aktuell; die meisten Angriffe zielen auf alte Plugins.
- Sichere Dateien und Datenbank regelmäßig: Backups einrichten.
- Kontaktformulare brauchen ausgehende Mails: Mails vom vServer verschicken.
Kommst du nicht weiter, schreib uns ein Ticket.