Nginx je open-source a vysoce výkonný webový server, který lze použít k urychlení poskytování obsahu a aplikací. Nginx zvyšuje zabezpečení, zlepšuje škálovatelnost a může být také použit jako nástroj pro vyrovnávání zátěže s vysokou dostupností. Může být použit jako reverzní proxy a jedním z nejdůležitějších použití Nginx je ukládání obsahu do mezipaměti. Jedním z nejlepších přístupů je použití Nginx jako mezipaměti obsahu. V tomto článku se budeme zabývat ukládáním obsahu do mezipaměti Nginx FastCGI pro lepší výkon webových stránek.
Povolení ukládání do mezipaměti FastCGI v Nginx
V tomto článku předpokládáme, že jste již nainstalovali Nginx s PHP na svůj Linux.
Chcete-li začít povolovat ukládání do mezipaměti FastCGI, upravte konfigurační soubor virtuálního hostitele, ve kterém má být ukládání do mezipaměti povoleno.
$ cd /etc/nginx/conf.d
$ vi example.conf
Přidejte následující obsah na začátek souboru. Pamatujte, že řádky by měly být mimo direktivu server {} .
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";
Kde,
- fastcgi_cache_path – umístění keše
- úrovně – úroveň hierarchie mezipaměti, nastavuje dvouúrovňovou hierarchii adresářů pod /etc/nginx/cache
- keys_zone – název paměťové zóny (V tomto příkladu jsem použil MYAPP. Můžete mít své vlastní preference)
- neaktivní – určuje čas, po kterém budou z mezipaměti vymazána data uložená v mezipaměti, ke kterým se během zadané doby nepřistoupí. V tomto příkladu je doba nečinnosti nastavena na 60 m, kterou lze zvýšit nebo snížit.
- fastcgi_cache_key – Určuje, jak budou hašovány názvy souborů mezipaměti
Proměnné použité v factcgi_cache_key
- $schéma – schéma požadavku HTTPS nebo HTTP
- $request_method – určuje metody požadavku, jako je GET nebo POST
- $host – Název serveru odpovídající požadavku
- $request_uri – Úplný identifikátor URI požadavku
Umístění souboru mezipaměti může být kdekoli na pevném disku, ale velikost by měla být menší než systémová RAM + swap, aby se předešlo problému „Nelze alokovat paměť “.
Nyní přejděte do direktivy umístění, kde je požadavek PHP předán php-fpm. Do „location ~ \.php$ {}“ přidejte následující řádky
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
Kde MYAPP je název paměťové zóny a fastcgi_cache_valid 200 ukládá do mezipaměti všechny odpovědi HTTP 200.
Pokud je definován pouze čas, pak se do mezipaměti uloží 200, 301 a 302 odpovědí.
Spuštěním následujícího příkazu otestujte konfiguraci Nginx vhost.
$ nginx -t
Nyní restartujte službu Nginx.
$ systemctl restart nginx
Úplný konfigurační soubor vhost vypadá takto
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; } }
Testování mezipaměti FastCGI
Vytvořte jednoduchý soubor PHP v kořenovém adresáři dokumentu.
$ vi /usr/share/nginx/html/info.php
Vložte následující obsah a uložte
<?php phpinfo(); ?>
Nyní si soubor vyžádejte pomocí příkazu curl nebo pomocí prohlížeče
Pokud ukládání do mezipaměti funguje dobře, můžete uvést adresář pro ukládání do mezipaměti pod /etc/nginx/cache
Přidejte následující řádek nad direktivu server{}, abyste označili, zda byla mezipaměť vynechána nebo nalezena
add_header X-Cache $upstream_cache_status;
Restartujte Nginx a spusťte příkaz curl jako
$ curl -I http://localhost/info.php
Nastavení výjimek mezipaměti v Nginx fastCGI Cache
Někdy nemusíme ukládat do mezipaměti dynamický obsah, jako jsou základní autentizační stránky. Tyto typy obsahu lze zabránit ukládání do mezipaměti na základě různých proměnných, jako je „$request_method“ „“$request_uri“ „$http_cookie“ atd.
Níže je ukázková konfigurace výjimky mezipaměti a měla by být použita na serveru{}
směrnice.
#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; }
Závěr
V tomto článku jsme se naučili, jak nakonfigurovat Nginx s PHP pro dynamické ukládání obsahu do mezipaměti. Také jsme se dozvěděli o různých tipech, jak nastavit výjimky mezipaměti.