nginx-Konfiguration für WordPress

Dieser Artikel gehört zu unserer Videokursreihe über WordPress-Sicherheit.

In diesem Artikel wird beschrieben, wie man Nginx auf einem Debian-basierten System für die Verwendung mit WordPress und Let’s Encrypt konfiguriert.

Installieren wir zunächst Nginx. Dies kann durch Ausführen des folgenden Befehls erreicht werden:

sudo apt install nginx-light nginx-extras php7.4-fpm

Sobald Nginx installiert ist, müssen wir einen Serverblock für unsere WordPress-Installation erstellen. Dazu muss im Verzeichnis /etc/nginx/sites-available/ eine neue Datei mit der Erweiterung .conf erstellt werden. Wenn unsere Domäne zum Beispiel example.com heißt, würden wir eine Datei namens example.com.conf erstellen.

In diese Datei müssen wir die folgende Konfiguration aufnehmen:

server {
    listen 80;

    # NOTE: make sure to replace example.com with your domain name!
    server_name example.com www.example.com;
    root /var/www/html;

    index index.php index.html index.htm;

    # let’s add the headers to mitigate clickjacking and mime sniffing
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    # let’s disable auto index function
    autoindex off;

    # let’s also hide the webserver’s software identification
    server_tokens off;

    # the following block will make sure no one can hotlink and 
    #  php files are not getting executed from the uploads directory
    #  make sure to have package nginx-extras installed as well
    location ~ ^/wp-content/uploads {
        expires max;

        valid_referers none blocked server_names;

        if ($invalid_referer) {
            return 403;
        }
    }

    # an additional layer of security: block access to backup files
    location ~* \.(sql|sql\..*|php[~_])$ {
        return 403;
    }

    # block access to xmlrpc (remove that block, when you need the feature)
    location = /xmlrpc.php {
        return 403;
    }

    # pass every other request that won’t lead to a file to WordPress
    location / {
        if (!-f $request_filename) {
            rewrite ^(.+)$ /index.php?q=$1 last;
        }

        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # deny access to .htaccess files, if Apache’s document root
    # concurs with nginx’s one
    location ~ /\.ht {
        deny all;
    }
}

Diese Konfiguration weist Nginx an, auf Port 80 für Anfragen an example.com (sowiewww.example.com) zu lauschen und Dateien aus dem Verzeichnis /var/www/html bereitzustellen. Sie legt auch fest, dass die Datei index.php als Standard-Indexdatei verwendet werden soll und dass Anfragen nach .php Dateien an den PHP-FPM (FastCGI Process Manager) Dienst weitergeleitet werden sollen. Darüber hinaus verweigert es den Zugriff auf bestimmte sensible Dateien wie Konfigurationsdateien, versteckte Dateien und .htaccess Dateien.

Nun aktivieren wir den Serverblock, indem wir einen symbolischen Link vom Verzeichnis /etc/nginx/sites-available/ zum Verzeichnis /etc/nginx/sites-enabled/ erstellen:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Um sicherzustellen, dass die Konfiguration korrekt ist, testen Sie die nginx-Konfiguration, indem Sie den Befehl ausführen:

sudo nginx -t

Wenn die Konfiguration korrekt ist, lautet die Ausgabe „configuration test is successful“ und Sie können nginx neu starten, indem Sie den Befehl ausführen:

sudo systemctl restart nginx

Nun ist es an der Zeit, unseren Server mit Let’s Encrypt zu sichern. Sie können den Let’s Encrypt-Client installieren, indem Sie den Befehl ausführen:

sudo apt install certbot python3-certbot-nginx

Sobald die Installation abgeschlossen ist, führen Sie den folgenden Befehl aus, um das SSL/TLS-Zertifikat für HTTPS zu generieren und zu installieren. Bevor Sie den nächsten Befehl ausführen, vergewissern Sie sich bitte, dass Sie die Domäne korrekt konfiguriert haben, damit sie auf Ihren neuen Webserver verweist.

sudo certbot --nginx -d example.com -d www.example.com

Mit diesem Befehl wird Nginx automatisch so konfiguriert, dass es das neu generierte Zertifikat verwendet. Außerdem wird die automatische Erneuerung des Zertifikats durch Hinzufügen eines Cron-Jobs eingerichtet.

Schließlich sollten Sie Ihre WordPress-Site so konfigurieren, dass sie HTTPS verwendet, indem Sie die WordPress-Adresse (URL) und die Site-Adresse (URL) in den allgemeinen Einstellungen so aktualisieren, dass https statt http verwendet wird.

Damit sollte Ihr Nginx-Server nun vollständig für die Verwendung mit WordPress und Let’s Encrypt konfiguriert sein.

Verwandte Beiträge

Apache httpd-Konfiguration für WordPress

Dieser Artikel gehört zu unserer Videokursreihe über WordPress-Sicherheit. In diesem Artikel wird erläutert, wie Apache auf einem Debian-basierten System für die Verwendung mit WordPress, Let’s

Mehr lesen

Sie sehen gerade einen Platzhalterinhalt von {{Name }}. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen