Auch Entwickler brauchen Platz zum Spielen

15. Juni 2021 /

WordPress auf Nginx: Performance und Sicherheit optimieren

Im letzten Teil der Serie „WordPress auf Nginx“ beschreibt das heutige Tutorial die Perfektionierung der Ausgabe an den Browser: Angefangen mit der Gzip-Komprimierung der Daten bis hin zu bevorzugten Caching-Headern für Bilder, Stylesheets und JavaScript. Zum Thema werden auch die nachhaltige Absicherung des Administrationsbereichs und der Schutz gegen unerwünschte Versuche, das WordPress-System anzugreifen.

Gzip-Aktivierung
Im Auslieferungszustand komprimiert Nginx die Ausgabe der HTML-Dateien im Gzip-Format, so dass weniger Bytes durch die Leitung an den Browser gesendet werden. Doch das ist nur die halbe Mitte, denn ein (WordPress-)Blog beinhaltet auch Stylesheets, Feeds und nicht selten zahlreiche JavaScript-Files. All diese Ressourcen können vom Webserver ebenfalls verkleinert ausgegeben werden.

Dazu müssen in der Konfigurationsdatei nginx.conf – zu lokalisieren unter /etc/nginx/ – alle Zeilen beginnend mit gzip_ einkommentiert werden. Einkommentiert bedeutet, dass das Doppelkreuz am Anfang der jeweiligen Zeilen eliminiert gehört. Und zwar:

Die Standard-Einstellung

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json ...

verwandelt sich in:

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json ...

Änderungen speichern, Nginx neu starten:

/etc/init.d/nginx restart

Die letzte einkommentierte Zeile listet Dateiformate auf, die Nginx Gzip-komprimiert an den Client schickt. Diese kann auf Wunsch ausgedehnt oder reduziert werden.

Nginx Gzip-Header

Caching- und Gzip-Header gesendet von Nginx

Steuerungszentrale
Im vorherigen Artikel wurde gezeigt, wie eine Konfigurationsdatei pro Server erstellt und im Nginx-Verzeichnis sites-available abgelegt wird. In unserem Beispiel heißt die Datei XYZ – diese wurde mit minimalen Eigenschaften bereits versehen. Nun ist es an der Zeit, die empfohlene Konfiguration in voller Länge zu präsentieren. Die Devise bleibt nach wie vor: Nginx optimiert für WordPress.

Server-Konfigurationsdatei
[gist id=1887141]

Erläuterungen
Die meisten Zeilen der Konfiguration kommen bekannt vor, da vorhin besprochen. Weiter geht’s mit dem Abschnitt SECURITY. An dieser Stelle werden unerlaubte Request-Methoden abgewehrt. Auch der Zugriff auf unsichtbare System- und WordPress-interne Dateien, welche möglicherweise die Nummer der eingesetzten Blogsoftware-Version verraten, wird sofort beendet. Unter REWRITES befindet sich eine Regel, die einen im Browser aufgerufenen Permalink im Format /%post_id%/ auf /?p=%post_id% per 301 Redirect umleitet.

Der Bereich RESSOURCES vereint in sich die Behandlung aller Grafik-, CSS- und JavaScript-Ressourcen. Hier wird Nginx aufgefordert, korrekte Cache-Header zu senden. Die Gültigkeit des Caching beläuft sich auf 31 Tage.

In der gleichen Abfrage für Ressourcen sind sechs Zeilen Code auskommentiert – dabei handelt es sich um einen Hotlinking-Schutz. Sind die Zeilen nachträglich einkommentiert (wie? siehe oben), so unterbindet Nginx die Einbettung eigener Ressourcen auf fremden Webseiten. So schützt man sich gegen Diebstahl von Medien. Favicons sind von der Sperre ausgeschlossen. Die Liste mit Domains ist eine Whitelist – dort sind Domains eingetragen, wo die Einbindung erlaubt ist. Wichtig: Auch die eigene Domain gehört in die Auflistung mit rein.

Schutz des Administrationsbereichs
Aus Sicherheitsgründen wird es empfohlen, den Admin-Bereich mit einem zusätzlichen Zugang auszustatten. Genauer gesagt die Eingangstür dahin: die Datei wp-login.php (dazu passend: Mehr Sicherheit für WordPress durch den „Admin“-Schutz). Für diesen Zweck sind folgende Schritte erforderlich:

  1. Z.B. unter /etc/nginx/ eine neue Datei namens htpasswd anlegen (die Datei beinhaltet keine Punkte).
  2. Der Dateiinhalt sind die Zugangsdaten des Nutzers. Das Format wäre Nutzer:Passwort. Diese können mit dem Online-Generator erzeugt werden. Wichtig: Unter Algorithmus bitte Crypt auswählen.
  3. Passwortdatei speichern.
  4. In der Server-Konfigurationsdatei die Zeilen mit auth_basic und auth_basic_user_file einkommentieren.
  5. Nginx restarten.

Tipp zur Spam-Bekämpfung
Handelt es sich um eine CMS-Website, also um Inhalte mit abgestellten Kommentar- und XML-RPC-Funktionen, so würde es Sinn machen, die Dateien wp-comments-post.php und xmlrpc.php auf die interne Blackliste zu setzen und jede Anfrage dahin mit dem Code 444 unverzüglich zu beenden. Die betroffene Zeile aus dem Snippet oben müsste in diesem Fall wie folgt aussehen:

location ~ /(.|wp-config.php|liesmich.html|readme.html|xmlrpc.php|wp-comments-post.php) {
  return 444;
}
Twenty Eleven Page Speed

Nginx optimiert: 100 Page Speed Punkte beim Twentyeleven Theme

Load Test
Die durchgeführten Optimierungen (samt Cachify) können sich sehen lassen: WordPress kann locker mit 10 Millionen Hits pro Tag umgehen.

Outro
An dieser Stelle endet die Tutorial-Serie. Der WordPress-Blog läuft performant unter Nginx und PHP5-FPM. APC beschleunigt zusätzlich die Ausführung der Skripte. Durch die Erweiterung der Server-Konfigurationsdatei ist WordPress gegen böswillige Angriffe und unerwünschte Einbettungen der Medien geschützt. Ressourcen sind mit korrekten Caching-Mechanismen ausgestattet. Jetzt ist der Blogger mit hochwertigen Inhalten dran ;)

Tutorials der Serie

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.