Nginx ist ein Open-Source- und Hochleistungs-Webserver, mit dem die Bereitstellung von Inhalten und Anwendungen beschleunigt werden kann. Nginx erhöht die Sicherheit, verbessert die Skalierbarkeit und kann auch als Hochverfügbarkeits-Load-Balancer verwendet werden. Es kann als Reverse-Proxy verwendet werden und eine der wichtigsten Anwendungen von Nginx ist das Zwischenspeichern von Inhalten. Einer der besten Ansätze ist die Verwendung von Nginx als Inhalts-Caching. In diesem Artikel besprechen wir das Caching von Nginx FastCGI-Inhalten für eine bessere Leistung von Websites.
FastCGI-Caching in Nginx aktivieren
In diesem Artikel gehen wir davon aus, dass Sie Nginx mit PHP bereits auf Ihrem Linux-Rechner installiert haben.
Um mit der Aktivierung des FastCGI-Cachings zu beginnen, bearbeiten Sie die Konfigurationsdatei des virtuellen Hosts, in der das Caching aktiviert werden soll.
$ cd /etc/nginx/conf.d
$ vi example.conf
Fügen Sie am Anfang der Datei den folgenden Inhalt hinzu. Denken Sie daran, dass die Zeilen außerhalb der server {}-Direktive stehen sollten .
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";
Wo,
- fastcgi_cache_path – Ort des Caches
- Stufen – Cache-Hierarchieebene, richtet eine zweistufige Verzeichnishierarchie unter /etc/nginx/cache ein
- keys_zone – Name der Speicherzone (In diesem Beispiel habe ich MYAPP verwendet. Sie können Ihre eigene Präferenz haben)
- inaktiv – gibt die Zeit an, nach der zwischengespeicherte Daten, auf die während der angegebenen Zeit nicht zugegriffen wurde, aus dem Cache gelöscht werden. In diesem Beispiel ist die inaktive Zeit auf 60 Minuten eingestellt, die erhöht oder verringert werden kann.
- fastcgi_cache_key – Es gibt an, wie die Cache-Dateinamen gehasht werden
In factcgi_cache_key
verwendete Variablen- $schema – Anforderungsschema HTTPS oder HTTP
- $request_method – spezifiziert die Anfragemethoden wie GET oder POST
- $host – Name des zur Anfrage passenden Servers
- $request_uri – Vollständiger Anfrage-URI
Der Speicherort der Cache-Datei kann überall auf der Festplatte sein, aber die Größe sollte kleiner sein als der RAM+Swap des Systems, um das Problem „Speicher kann nicht zugewiesen werden“ zu vermeiden.
Gehen Sie nun zur Standortdirektive, wo die PHP-Anfrage an php-fpm übergeben wird. Fügen Sie innerhalb von „location ~ \.php$ {}“ die folgenden Zeilen hinzu
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
Wobei MYAPP der Name der Speicherzone ist und fastcgi_cache_valid 200 alle HTTP 200-Antworten zwischenspeichert.
Wenn nur die Zeit definiert ist, werden 200, 301 und 302 Antworten zwischengespeichert.
Führen Sie den folgenden Befehl aus, um die Nginx-vhost-Konfiguration zu testen.
$ nginx -t
Starten Sie nun den Nginx-Dienst neu.
$ systemctl restart nginx
Eine vollständige vhost-Konfigurationsdatei sieht so aus
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; root /usr/share/nginx/html; index index.php index.html index.htm; server_name your_server_name; location / { try_files $uri $uri/ /index.html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; } }
FastCGI-Caching testen
Erstellen Sie eine einfache PHP-Datei im Dokumentstammverzeichnis.
$ vi /usr/share/nginx/html/info.php
Fügen Sie den folgenden Inhalt ein und speichern Sie
<?php phpinfo(); ?>
Fordern Sie nun die Datei mit dem curl-Befehl oder mit einem Browser an
Wenn das Caching gut funktioniert, können Sie das Caching-Verzeichnis unter /etc/nginx/cache
auflisten
Fügen Sie die folgende Zeile über der server{}-Anweisung hinzu, um anzugeben, ob der Cache verfehlt oder getroffen wurde
add_header X-Cache $upstream_cache_status;
Starten Sie Nginx neu und führen Sie den Curl-Befehl als
aus$ curl -I http://localhost/info.php
Festlegen von Cache-Ausnahmen in Nginx fastCGI Cache
Manchmal müssen wir dynamische Inhalte wie grundlegende Authentifizierungsseiten möglicherweise nicht zwischenspeichern. Diese Arten von Inhalten können basierend auf verschiedenen Variablen wie „$request_method“, „“$request_uri“, „$http_cookie“ usw. nicht zwischengespeichert werden.
Unten ist die Beispielkonfiguration für eine Cache-Ausnahme und sollte innerhalb des Servers verwendet werden{}
Richtlinie.
#Cache everything by default set $no_cache 0; #Don't cache POST requests if ($request_method = POST) { set $no_cache 1; } #Don't cache if the URL contains a query string if ($query_string != "") { set $no_cache 1; } #Don't cache the following URLs if ($request_uri ~* "/(cp/)") { set $no_cache 1; } #Don't cache if there is a cookie called PHPSESSID if ($http_cookie = "PHPSESSID") { set $no_cache 1; }
Schlussfolgerung
In diesem Artikel haben wir gelernt, wie man Nginx mit PHP für das Caching dynamischer Inhalte konfiguriert. Außerdem haben wir verschiedene Tipps zum Einrichten von Cache-Ausnahmen kennengelernt.