GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So aktivieren Sie serverseitiges FastCGI-Caching mit Nginx und PHP

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.


Linux
  1. So installieren und konfigurieren Sie Varnish Cache 6 mit Nginx unter CentOS 8

  2. So konfigurieren Sie Nginx für die Arbeit mit PHP über PHP-FPM

  3. So aktivieren Sie HTTP2 in NGINX

  4. So installieren Sie PHP 7.4 mit Nginx unter Ubuntu 20.04

  5. Wie untersucht man ein Speicherleck mit Apache und PHP?

Wie aktiviere ich IPv6 in Nginx?

So aktivieren Sie TLS 1.3 auf Apache und Nginx

So konfigurieren Sie PHP-FPM mit NGINX

So stellen Sie eine PHP-Anwendung mit Nginx und MySQL mit Docker und Docker Compose bereit

So installieren und konfigurieren Sie Memcached mit Apache und PHP

So aktivieren Sie die GD-Bibliothek in PHP mit LibJPEG, FreeType und LibPNG