FastCGI Cache ist ein Daten-Caching-System, das auf Nginx HTTP-Serverebene implementiert ist .
Der Vorteil des FastCGI-Cache besteht darin, dass Nginx die zwischengespeicherte Antwort an den Benutzer zurĂŒckgibt, sobald er eine Anforderung empfĂ€ngt, wĂ€hrend die Anwendungsschicht die eingehende HTTP-Anforderung ĂŒberhaupt nicht verarbeitet, wenn sie sich im Nginx-Cache befindet.
Die Verwendung von FastCGI Cache ist eine hervorragende Möglichkeit, die Belastung Ihres Systems zu verringern.
Wenn Ihre Site Seiten enthĂ€lt, die sich selten Ă€ndern, oder die Verzögerung beim Aktualisieren von Informationen fĂŒr eine Weile nicht kritisch ist, ist der FastCGI-Cache genau das, was Sie benötigen.
So funktioniert der Nginx FastCGI Cache
Wenn eine HTTP-Anfrage beim Nginx-Server eintrifft und vor einiger Zeit die Antwort auf dieselbe Anfrage in den Cache gestellt wurde, sendet Nginx diese Anfrage nicht zur AusfĂŒhrung von PHP-FPM, sondern Nginx gibt das Ergebnis aus dem Cache zurĂŒck.

Aufgabe
Angenommen, wir haben ein webbasiertes Steuerungssystem fĂŒr einen Flug zum Mond, das in PHP geschrieben ist. Jeder Benutzer muss seinen Benutzernamen und sein Kennwort eingeben, um das System aufzurufen und sich auf der Hauptseite der Space-Anwendung zu befinden.
, , . . . SQL- .
, , .
, , . .
?
, .
-. .
1 .
:
http {
include /etc/nginx/mime.types;
server {
listen 80;
index index.php index.html;
server_name moon-flight.aero;
error_log /var/log/nginx/moon-flight.aero.error.log;
access_log /var/log/nginx/moon-flight.aero.access.log
root /var/www/moon-flight.aero/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}
}, fastcgi_cache_path http.
fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=fastcgicache:10m inactive=70m max_size=512m;/tmp/nginx_cache , . /tmp , . , , /tmp/nginx_cache .
â . levels=1:2. , 2. , , .
â . keys_zone=fastcgicache:10m , fastcgicache, 10m â . 10 80 000 . , .
â inactive=70m, , , , . , , inactive, , . inactive 10 .
max_size=512m â . . , Nginx .
. fastcgi_cache_key. http, server location.
server fastcgi_cache_key:
fastcgi_cache_key "$scheme$request_method$host$request_uri$cookie_codeAuth";:
â $scheme
â $request_method
â $host
â $request_uri
â $cookie_codeAuth
. , .
, :
http://moon-flight.aero/search/?query=10
Nginx :
$scheme |
|
$request_method |
|
$host |
|
$request_uri |
|
$cookie_codeAuth | Cookie codeAuth, . Cookie -. |
, Cookie codeAuth. .
Nginx Cookie, $cookie_.
, HTTP- :
Cookie: codeAuth=a7e30fbb7f4513redfd22049c6b5dzme306f4e
"$scheme$request_method$host$request_uri$cookie_codeAuth" , , . $cookie_codeAuth .
.
server fastcgi_cache, fastcgi_cache_valid, fastcgi_cache_bypass fastcgi_no_cache location.
server.
:
, $request_uri
"/".GET . $request_method
GET., GET . $query_string
"".
3 ( server):
set $no_cache 0;
if ($request_method != GET) {
set $no_cache 1;
}
if ($query_string != "") {
set $no_cache 1;
}
if ($request_uri != "/") {
set $no_cache 1;
}fastcgi_cache, fastcgi_cache_valid, fastcgi_cache_bypass fastcgi_no_cache location.
fastcgi_cache fastcgicache;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;?
fastcgi_cache â , . fastcgi_cache_path.
fastcgi_cache_valid â HTTP- . 60 200.
fastcgi_cache_bypass â , . 0, .
fastcgi_no_cache â , . 0, .
:
sudo service nginx reload
.
, ?
. , $upstream_cache_status.
server add_header :
add_header x-fastcgi-cache $upstream_cache_status;x-fastcgi-cache â .
$upstream_cache_status :
MISS
BYPASS
EXPIRED
STALE
UPDATING
REVALIDATED
HIT
, HIT.
:
http {
include /etc/nginx/mime.types;
fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=fastcgicache:10m inactive=70m max_size=512m;
server {
listen 80;
index index.php index.html;
server_name moon-flight.aero;
error_log /var/log/nginx/moon-flight.aero.error.log;
access_log /var/log/nginx/moon-flight.aero.access.log
root /var/www/moon-flight.aero/public;
fastcgi_cache_key "$scheme$request_method$host$request_uri$cookie_codeAuth";
set $no_cache 0;
if ($request_method != GET) {
set $no_cache 1;
}
if ($query_string != "") {
set $no_cache 1;
}
if ($request_uri != "/") {
set $no_cache 1;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
add_header x-fastcgi-cache $upstream_cache_status;
location ~ \.php$ {
fastcgi_cache fastcgicache;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}
}Nginx :
sudo nginx -t
, , :
sudo service nginx reload
Apache Bench
Apache Bench -. C Apache Bench , . cookies.
Apache Bench Ununtu.
:
sudo apt-get update
:
sudo apt-get install apache2-utils
.
Apache Bench
FastCGI Cache $no_cache 1.
sudo service nginx reload
. , Apache Bench :
ab -c 5 -n 100 -C "codeAuth=a7e30fbb7f4513redfd22049c6b5dzme306f4e" http://moon-flight.aero http://moon-flight.aero 100 , 5 . -C , cookie codeAuth.
:
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking moon-flight.aero (be patient).....done
Server Software: nginx/1.14.0
Server Hostname: moon-flight.aero
Server Port: 80
Document Path: /
Document Length: 31134 bytes
Concurrency Level: 5
Time taken for tests: 2.978 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 3150400 bytes
HTML transferred: 3113400 bytes
Requests per second: 33.58 [#/sec] (mean)
Time per request: 148.878 [ms] (mean)
Time per request: 29.776 [ms] (mean, across all concurrent requests)
Transfer rate: 1033.25 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 23 29 5.0 27 50
Processing: 58 112 17.1 113 142
Waiting: 58 112 17.0 113 142
Total: 85 141 16.7 142 176
Percentage of the requests served within a certain time (ms)
50% 142
66% 149
75% 154
80% 159
90% 163
95% 166
98% 170
99% 176
100% 176 (longest request)3 , 100 . â 33.58 .
Apache Bench
$no_cache 0.
sudo service nginx reload
:
ab -c 5 -n 100 -C "codeAuth=a7e30fbb7f4513redfd22049c6b5dzme306f4e" http://moon-flight.aero:
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking moon-flight.aero (be patient).....done
Server Software: nginx/1.14.0
Server Hostname: moon-flight.aero
Server Port: 80
Document Path: /
Document Length: 31134 bytes
Concurrency Level: 5
Time taken for tests: 1.068 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 3150104 bytes
HTML transferred: 3113400 bytes
Requests per second: 93.64 [#/sec] (mean)
Time per request: 53.398 [ms] (mean)
Time per request: 10.680 [ms] (mean, across all concurrent requests)
Transfer rate: 2880.52 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 23 31 6.5 27 47
Processing: 14 17 7.8 16 93
Waiting: 14 17 7.8 16 93
Total: 37 47 10.1 44 122
Percentage of the requests served within a certain time (ms)
50% 44
66% 49
75% 52
80% 54
90% 56
95% 61
98% 63
99% 122
100% 122 (longest request)1 , 100 . â 93.64 .
:
Eine Beschreibung des Moduls ngx_http_fastcgi_module finden Sie unter folgendem Link: http://nginx.org/ru/docs/http/ngx http fastcgi_module.html
Video zum Einrichten von FastCGI Cache Nginx: https://www.youtube.com/watch?v=Nri2KOI3HJo&t=66s
Apache Bench-Dokumentation: https://httpd.apache.org/docs/2.4/programs/ab.html