1) Nginx microcache для гостей с умным ключом
Мини-кэш на 1–3 секунды гасит шипы и экономит CPU, при этом авторизованные обходят кэш.
# /etc/nginx/conf.d/cache.conf proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cms_cache:128m max_size=10g inactive=10m use_temp_path=off; map $http_cookie $cache_bypass { default 0; ~*(wordpress_logged_in|woocommerce_items_in_cart|PHPSESSID|bitrix_sessid|OCSESSID|SESS|mage-cache-sessid) 1; } map $request_method $no_cache_method { default 0; ~*POST 1; } map $http_cache_control $no_cache_cc { default 0; ~*no-cache 1; } server { # ... ваш сервер location / { proxy_cache cms_cache; proxy_cache_valid 200 302 3s; proxy_cache_valid 404 1s; proxy_no_cache $cache_bypass $no_cache_method $no_cache_cc; proxy_cache_bypass $cache_bypass $no_cache_method $no_cache_cc; proxy_cache_key "$scheme$request_method$host$request_uri"; add_header X-Microcache $upstream_cache_status always; proxy_pass http://127.0.0.1:9000; } }
2) Перенос сессий и кэша в Redis, чтобы убрать файловый I/O
# /etc/php/8.2/fpm/php.ini session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379?database=2" opcache.enable=1 opcache.memory_consumption=256 opcache.max_accelerated_files=100000
Для WordPress ставьте объектный кэш (Redis Object Cache). Для Magento/Drupal используйте встроенные модули Redis.
3) Реальная формула PHP-FPM вместо «на глаз»
-
Узнайте среднюю память на воркер:
ps --no-headers -o rss -C php-fpm8.2 | awk '{sum+=$1} END {print int(sum/NR/1024)"M"}'
-
Считаем pm.max_children = RAM_под_PHP / средний_воркер.
-
Включите отдельные пулы под фронт и админку, чтобы админка не съедала фронт.
4) Снижение TIME_WAIT-бури без опасных твиков
# /etc/sysctl.d/99-net-tune.conf net.core.somaxconn=8192 net.ipv4.tcp_max_syn_backlog=8192 net.ipv4.ip_local_port_range=10240 65535 net.ipv4.tcp_fin_timeout=30 net.netfilter.nf_conntrack_max=262144
Никаких устаревших tcp_tw_recycle. Этого достаточно для пиков.
5) NVMe «ездит» только с правильным I/O
Вынесите БД на отдельный том NVMe, включите noatime в fstab.
Логи приложения уводите в journald с ротацией, чтобы не дробить IOPS.
6) Brotli и HTTP/2 без нагрузки на PHP
# если собран модуль brotli brotli on; brotli_comp_level 5; brotli_types text/plain text/css application/javascript application/json application/xml image/svg+xml; gzip on; gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml; sendfile on; tcp_nopush on;
-
Статику и минификацию выполняет Nginx/CDN, не PHP.
7) Пре-рендер и «тёплый» кэш через curl
Подогрейте самые посещаемые URL после деплоя:
#!/usr/bin/env bash URLS="/ /catalog/ /blog/ /contacts/" for u in $URLS; do curl -s -H "Cache-Control: no-cache" "https://example.org$u" > /dev/null done
-
Положите в cron раз в 5–10 минут. Меняет профиль нагрузки радикальнее, чем лишнее ядро.
8) Антишторм по поиску и фильтрам каталога
-
Включите limit_req для «тяжёлых» эндпоинтов:
limit_req_zone $binary_remote_addr zone=search_zone:10m rate=10r/s;
location /search {
limit_req zone=search_zone burst=20 nodelay;
proxy_pass http://127.0.0.1:9000;
}
9) Объективный контроль здоровья без сложных APM
Включите stub_status и status у PHP-FPM, снимайте метрики простыми командами:
-
curl -s localhost/nginx_status
-
curl -s localhost/status?full
-
iostat -x 1 10, vmstat 1 10, ss -s
Смотрите на p95 latency, I/O wait и количество ожидающих воркеров — это честнее процента CPU.
10) Гео-точность и rDNS для Ads/маркетплейсов
Обновляйте MaxMind/IP2Location, держите нейтральные PTR и FCrDNS.
Это снижает странные проверки и лишние капчи в соцсетях/маркетплейсах.
11) Экономный MySQL/MariaDB, который не «жжёт» CPU
# /etc/mysql/conf.d/90-innodb.cnf [mysqld] innodb_buffer_pool_size=8G innodb_log_file_size=512M innodb_flush_log_at_trx_commit=2 innodb_flush_method=O_DIRECT max_connections=200 slow_query_log=1 long_query_time=0.3
-
Для магазинов добавьте внешнюю выдачу поиска (Meilisearch/OpenSearch) — это снимает «LIKE %…%» с базы.
12) Быстрое изображение без плагинов
-
Готовьте WebP/AVIF офлайн и отдавайте по заголовку Accept:
map $http_accept $webp_suffix { default ""; "~*webp" ".webp"; } location ~* \.(png|jpe?g)$ { try_files $uri$webp_suffix $uri =404; }
Чек-лист топ 5 советов
- Включите microcache Nginx с ключом, игнорирующим «мусорные» куки, и вынесите сессии в Redis.
- Дайте базе память и быстрый диск: InnoDB buffer pool 60–70 процентов RAM БД, NVMe отдельным томом.
- Считайте PHP-FPM по формуле, а не «на глаз», и разделите пулы под фронт/админку.
- Следите за I/O wait, p95 latency и очередью воркеров, а не только за процентом CPU.
- Уберите тяжёлые фильтры и поиск под лимиты RPS, а HOT-страницы прогревайте скриптом.
Как оформить заказ
Выберите тариф хостинга или VDS на сайте и укажите стек, средний онлайн, пиковый RPS и список плагинов/модулей.
Мы подберём конфигурацию по ядрам, памяти, диску и сети, настроим LEMP, Redis, MariaDB, microcache и перенесём проект без простоя.
При аренде от 6 месяцев настраиваем серверы бесплатно.
Акция
При оплате хостинга или VPS от 6 месяцев удвоим оплаченный период.
Оформите заказ сейчас и в комментарии укажите Удвоение периода 6+ месяцев. Закрепим условия и активируем в приоритетном порядке.