DevOps
Laravel и Nginx FastCGI Cache
Задача
Ускорить сайт с помощью кеширования Nginx FastCGI Cache, путем отдачи страницы напрямую из кеша Nginx без обращения к PHP.
В следующем примере покажу как кешировать Laravel с условиями:
- страница главная,
- запросы типа GET и никакие другие,
- только те запросы, в которых нет GET параметров
Измените содержимое ваших конфигов
- etc\nginx\sites-available\YOUR_DOMAIN_CONFIG:
server {
...
try_files $uri $uri/ /index.php;
add_header X-Cache $upstream_cache_status;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
fastcgi_cache_lock on;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
include fastcgi_params;
}
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;
}
}
- etc\nginx\nginx.conf:
http {
...
fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=MYAPP:10m inactive=60m max_size=512m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
}
Протестируйте конфигурацию Nginx:
nginx -t
Перезапустите Nginx:
sudo systemctl reload nginx
Откройте страницу вашего сайта в браузере, во вкладке Network проверьте заголовок x-cache. Если страница получена из кэша, то вы увидите значение HIT. (Первый раз будет MISS, т.к. кеш только сгенерировался).
- miss — отсутствие данных в кэше,
- expired — просроченные ответы,
- bypass — ответ не был взят из кэша вследствие proxy_cache_bypass и аналогичных директив.
Источники:
Афоризм дня:
Многие многознайки не имеют ума. (555)
Leave a reply