С 2026 года я полностью перевел все свои проекты на WordPress на технологический стек PHP FastCGI (Nginx + PHP-FPM) версии 8.3.6 (native) и начал использовать Redis. Результат превзошел все ожидания: сайты буквально «летают». Однако просто развернуть этот стек недостаточно, чтобы выжать из сервера максимум производительности, нужна правильная конфигурация. В этой статье мы подробно разберем, какие именно закулисные настройки необходимо выставить на сервере сразу после запуска сайта, чтобы заставить эту связку работать на пределе возможностей. А так же предоставлю свой промт, который можно использовать в Cursor AI или Claude Code.
Самое важное
- Nginx FastCGI/page cache для гостей.
- PHP OPcache.
- Правильно ограниченный PHP-FPM, чтобы не съесть всю RAM.
- Redis object cache.
- Настроенная MariaDB/MySQL.
- CDN/Cloudflare для статики и защиты от всплесков.
- Мониторинг и лимиты, чтобы сервер деградировал мягко, а не падал.
Nginx
Базовые настройки:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
В http:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 20;
client_body_timeout 30;
client_header_timeout 30;
send_timeout 30;
client_max_body_size 64m;
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml;
Для PHP:
fastcgi_connect_timeout 10s;
fastcgi_send_timeout 60s;
fastcgi_read_timeout 60s;
fastcgi_buffer_size 32k;
fastcgi_buffers 16 16k;
fastcgi_busy_buffers_size 64k;
fastcgi_temp_file_write_size 256k;
FastCGI Cache Для WordPress
Это один из самых сильных бустов. Для гостей страницы должны отдаваться из Nginx, не заходя в PHP. Примерно:
fastcgi_cache_path /var/cache/nginx/wordpress
levels=1:2
keys_zone=WORDPRESS:256m
inactive=60m
max_size=5g;
Кэшировать можно:
fastcgi_cache WORDPRESS; fastcgi_cache_valid 200 301 302 10m; fastcgi_cache_valid 404 1m; fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503; fastcgi_cache_lock on;
Не кэшировать:
set $skip_cache 0;
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
if ($request_uri ~* "/wp-admin/|/wp-login.php|/cart|/checkout|/my-account") {
set $skip_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in|comment_author|woocommerce_items_in_cart|wp-postpass") {
set $skip_cache 1;
}
OPcache
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=384
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=1
opcache.huge_code_pages=1
PHP-FPM
Для сервера 8 GB RAM я бы начал так:
pm = dynamic
pm.max_children = 25
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 12
pm.max_requests = 500
request_terminate_timeout = 120s
pm.max_children нельзя ставить “побольше”. Его считают по памяти:
pm.max_children = доступная RAM под PHP / средний размер одного PHP-процесса
Для WordPress один PHP-FPM процесс часто ест 80-180 MB. Если выделить PHP примерно 3 GB, то:
3000 MB / 120 MB ≈ 25 процессов
Если БД на этом же сервере, я бы не ставил выше 25-30 без замеров. Если база отдельно, можно пробовать 35-45.
PHP.ini
Рекомендуемые стартовые значения:
memory_limit = 256M
max_execution_time = 60
max_input_time = 60
post_max_size = 64M
upload_max_filesize = 64M
max_input_vars = 3000
realpath_cache_size = 4096K
realpath_cache_ttl = 600
expose_php = Off
Для админки и тяжёлых импортов иногда нужен memory_limit = 512M, но для фронта лучше не разгонять память без необходимости.
Redis Object Cache
Поставить Redis и WordPress-плагин типа Redis Object Cache.
Redis config стартово:
maxmemory 512mb
maxmemory-policy allkeys-lru
В wp-config.php можно добавить:
define('WP_CACHE_KEY_SALT', 'site-domain:');
define('WP_REDIS_MAXTTL', 86400);
MariaDB/MySQL
Если база на этом же сервере, стартово:
innodb_buffer_pool_size = 3G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
max_connections = 100
table_open_cache = 4000
thread_cache_size = 64
tmp_table_size = 128M
max_heap_table_size = 128M
slow_query_log = 1
long_query_time = 1

Комментарии (0)