Оптимізація сервера для роботи з MediaWiki
Це здатна викликати 429, затримки або навіть 504. Залишайте свій робочий варіант.
sudo mkdir -p /var/www/wiki.erp.kyiv.ua/cache </syntaxhighlight>
# Backend Nginx має бачити реальний IP клієнта. # POST is not limited, so MediaWiki save actions are not affected. include /etc/nginx/sites-enabled/*;
map "$is_heavy_bot:$mw_heavy_query:$mw_heavy_uri:$request_method" $bot_heavy_key {
pm.max_requests = 500
~*meta-webindexer 1;
##
# Limit only bot GET/HEAD requests. }</code> потрібно додати:
sudo tail -n 100 /var/log/nginx/error.log
limit_req zone=bot_heavy_slow burst=5 nodelay;
Приклад: </syntaxhighlight>
}
'''Не варто віддавати всю RAM під PHP-FPM.''' Потрібен запас для MySQL/MariaDB. ##
}
$wgShowIPinHeader = false;
</div>
unknown "bot_heavy_key" variable
- Heavy MediaWiki query detection
include fastcgi_params;
Приклад:
Не можна робити так:
<syntaxhighlight lang="bash">
Правильний результат:
##
# Heavy MediaWiki URI detection
##
<syntaxhighlight lang="ini">
$wgUseFileCache = true;
MySQL / MariaDB
~*ClaudeBot 1;
User-agent: SemrushBot
slowlog = /var/log/php8.4-fpm-slow.log
##
# Limit only bots + heavy GET/HEAD requests
##
~^1:0:1:HEAD$ $binary_remote_addr;
sudo systemctl reload nginx fastcgi_read_timeout 300s; htop Crawl-delay: 30 action=edit </syntaxhighlight>
##
# Rate limit zones
##
set $skip_cache 1;
З <code>nodelay</code>:
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
== 14. File cache MediaWiki ==
Рекомендований стартовий варіант:
fastcgi_cache_key "$scheme$request_method$host$request_uri";
User-agent: CCBot
=== 3.3 Перевірка real IP ===
set $skip_cache 1;
<syntaxhighlight lang="bash">
SET GLOBAL slow_query_log = 'ON';
gzip_min_length 1024;
oldid= Disallow: /*action=edit </syntaxhighlight>
</div>
ps aux | grep php-fpm | sort -k3 -nr | head -20
Повний приклад PHP location:
</div>
action=raw
default 0;
include fastcgi_params;
limit_req zone=bot_heavy_slow burst=5 nodelay;
~*(^|&)(hidebots=|limit=|from=|target=|namespace=|offset=|dir=) 1;
~*/wiki/Special: 1;
request_slowlog_timeout = 5s
Поточні запити: User-agent: Bytespider
У PHP location:
opcache.enable=1
Додати cron від користувача www-data:
add_header Cache-Control "public";
</syntaxhighlight> set_real_ip_from 192.168.20.225; додати або перевірити:
</syntaxhighlight>
=== Етап 2. PHP-FPM ===
gzip_comp_level 5;
У <code>LocalSettings.php</code>:
Crawl-delay: 30
sudo systemctl reload nginx
Disallow: /*oldid=
=== 2.3 Топ User-Agent ===
pm.min_spare_servers = 12
всередині <code>server { ... # Перевірити, що <code>POST</code> не лімітується. # Slowlog PHP-FPM і slow query log MySQL потрібні для пошуку реальної причини затримок. Після впровадження цих змін сервер має краще витримувати активність ботів, не створюючи проблем для звичайних користувачів і редакторів MediaWiki. pm.min_spare_servers = 10
if ($request_method != GET) {
Пошук старих або неповних правил:
Причина: у location застосовують, коли потрібноlimit_req zone=bot_heavy_slow, але в http { } не оголошено $bot_heavy_key. # Rate limit має діяти тільки на GET/HEAD, не на POST. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
pm.start_servers = 12
python3 ... # OPcache, APCu і кешування анонімних сторінок суттєво зменшують навантаження. Please slow down.\n";
Якщо в htop видно процеси:
index.php?title=
sudo nano /etc/nginx/nginx.conf
sudo nginx -t
pm.max_spare_servers = 20
limit_req_status 429;
~*PetalBot 1;
Перевірити кількість кодів відповідей:
fastcgi_send_timeout 300s;
pm.max_children = 60
'''Якщо 504 виникає при збереженні сторінки, потрібно перевірити:'''
<syntaxhighlight lang="text">
'''критично:''' збільшення timeout не лікує причину повільної роботи, але дає довгим операціям, як приклад збереженню великої сторінки, завершитися без 504. всередину секції <code>http { ... }</code>:
'''Мета статті:''' зменшити навантаження на сервер MediaWiki, стабілізувати роботу php8.4-fpm, обмежити агресивних ботів за швидкістю, але не закривати їм доступ на 100%. # Увімкнути slowlog. # MediaWiki jobs краще виконувати через cron.</div>
Перегляд:
<syntaxhighlight lang="nginx">
<div style="border-left: 6px solid #2b7cff; background: #eef5ff; padding: 12px; margin: 12px 0;">
~*PerplexityBot 1; ↓ add_header X-FastCGI-Cache $upstream_cache_status always; fastcgi_cache_bypass $skip_cache;
apc.user_ttl=3600
sudo chown -R www-data:www-data /var/cache/nginx/mediawiki
Після змін:
Або:
limit_req zone=bot_slow burst=20 nodelay;
'''Помилка:'''
Тоді можна поставити:
<syntaxhighlight lang="text">
* * * * * /usr/bin/php /var/www/wiki.erp.kyiv.ua/maintenance/runJobs.php --maxjobs 100 --maxtime 50 > /dev/null 2>&1
"1:GET" $binary_remote_addr;
sudo tail -f /var/log/php8.4-fpm-slow.log }
↓
На frontend Nginx у блоці, який прокидує запити на backend, повинно бути:
<syntaxhighlight lang="php">
Backend Nginx
pm.max_children = RAM, доступна для PHP-FPM / середній розмір одного PHP-FPM процесу
sudo tail -n 50000 /var/log/nginx/access.log | awk -F\" '{print $6}' | sort | uniq -c | sort -nr | head -30
Special:
fastcgi_no_cache $skip_cache;
8. Таймаути для уникнення 504
upstream timed out while reading response header from upstream
proxy_send_timeout 300s;
</syntaxhighlight> if ($query_string != "") {
real_ip_header X-Real-IP;
<syntaxhighlight lang="bash">
Nginx здатна затримувати зайві запити в черзі. '''Якщо backend Nginx бачить тільки IP frontend-проксі, то limit_req буде рахувати всіх користувачів і ботів як одного клієнта.'''
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
'''критично:''' якщо перед MediaWiki стоїть ще один Nginx, backend-сервер повинен бачити реальні IP користувачів, а не тільки IP frontend-проксі. * оновити розширення <code>SyntaxHighlight</code>;
* уникати дуже великих блоків <code><syntaxhighlight></code>;
* закешувати сторінки з великими блоками коду;
* обмежити ботам швидкість доступу до <code>oldid</code>, <code>diff</code>, <code>history</code>;
* перевірити PHP-FPM slowlog.<syntaxhighlight lang="bash">
# Увімкнути APCu. # Перевірити довгі запити. opcache.interned_strings_buffer=32
<div style="border-left: 6px solid #d32f2f; background: #ffebee; padding: 12px; margin: 12px 0;">
~^1:0:1:GET$ $binary_remote_addr;
</div>
<div style="border-left: 6px solid #d32f2f; background: #ffebee; padding: 12px; margin: 12px 0;">
sudo nano /var/www/wiki.erp.kyiv.ua/robots.txt
<syntaxhighlight lang="ini">
User-agent: PerplexityBot
real_ip_recursive on;
<syntaxhighlight lang="text">
User-agent: Amazonbot
gzip on;
Встановлення:
</syntaxhighlight>
Очікуваний заголовок:
'x_real_ip="$http_x_real_ip" '
</syntaxhighlight>
}
sudo nginx -t
opcache.save_comments=1 location ~ \.php$ { Disallow: /*action=history
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
</syntaxhighlight>
access_log off;
}
== конфігурація php8. 9.4-fpm ==
pm = dynamic
Crawl-delay: 30
</syntaxhighlight> Перезапуск:
api.php limit_req zone=bot_slow burst=20 nodelay;
limit_req zone=bot_heavy_slow burst=5 nodelay;
Якщо в slow query log багато запитів до таблиць page, revision, text, recentchanges, logging, потрібно окремо аналізувати індекси, розмір таблиць і проблемні сторінки.
</syntaxhighlight>
<syntaxhighlight lang="nginx">
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Увімкнення slow query log:
<syntaxhighlight lang="php">
proxy_read_timeout 300s;
'''Перевага цього блоку:''' обмежуються тільки боти, тільки GET/HEAD-запити. # Обережно впровадити FastCGI cache для анонімних GET. proxy_read_timeout 300s;
sudo nano /etc/php/8.4/fpm/pool.d/www.conf
client=192.168.20.225
~*AhrefsBot 1;
map $http_user_agent $is_heavy_bot {
pm.max_children = 80
<syntaxhighlight lang="nginx">
<syntaxhighlight lang="bash">
У <code>server { ... # Перевірити OPcache. Окремо варто відзначити Nginx, системи, файлового кешу і службових задач MediaWiki.<syntaxhighlight lang="bash">
у секції <code>http { ... # Ботів потрібно обмежувати за швидкістю, а не блокувати на 100%.<syntaxhighlight lang="text">
<div style="border-left: 6px solid #ff9800; background: #fff4e5; padding: 12px; margin: 12px 0;">
limit_req zone=bot_slow burst=20 nodelay;
Перевірка:
Файл здатна бути:
Якщо основне навантаження створюють процеси:
=== 2.4 Топ URL ===
sudo systemctl reload nginx
~*MJ12bot 1;
$wgParserCacheType = CACHE_ACCEL;
== 6. Чому потрібен nodelay ==
</div>
proxy_set_header X-Forwarded-Proto $scheme;
<syntaxhighlight lang="text">
Crawl-delay: 10
<syntaxhighlight lang="text">
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
X-FastCGI-Cache: HIT
sudo mkdir -p /var/cache/nginx/mediawiki
== 7. Перевірка Nginx ==
limit_req zone=bot_slow burst=20;
User-agent: AhrefsBot
Перевірити середній розмір PHP-FPM процесу:
Файл pool-конфігурації:
access_log /var/log/nginx/wiki_realip_debug.log realip_debug; Перезапуск:
== 15. FastCGI cache в Nginx для анонімних GET ==
proxy_connect_timeout 60s;
</div>
sudo systemctl restart php8.4-fpm
Неправильний результат:
</syntaxhighlight>
</syntaxhighlight>
ps aux | grep "php-fpm: pool" | awk '{sum+=$6; n++} END {if (n>0) print "avg:", sum/n/1024, "MB", "count:", n}' </syntaxhighlight> </syntaxhighlight>
OPcache для PHP 8. 11.4
або:
default "";
</syntaxhighlight> Crawl-delay: 30 send_timeout 300s;
limit_conn_zone $bot_limit_key zone=bot_conn:20m;
У location з proxy_pass:
20. Діагностика 504 Gateway Timeout
Crawl-delay: 30
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|webp|woff|woff2)$ { sudo tail -f /var/log/mysql/mysql-slow.log
fastcgi_read_timeout 300s;
location / {
21. Рекомендований порядок впровадження
як приклад:
SET GLOBAL long_query_time = 1;
=== 3.1 Frontend Nginx ===
real_ip_recursive on; $wgMessageCacheType = CACHE_ACCEL;
~*YandexBot 1;
- Real client IP from frontend nginx
Без nodelay:
так само критично, щоб обмеження не зачіпали POST, бо збереження сторінок MediaWiki виконується саме через POST. action=history
</syntaxhighlight>
proxy_set_header Host $host; </syntaxhighlight> sudo tail -n 50000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -30
fastcgi_cache_path /var/cache/nginx/mediawiki levels=1:2 keys_zone=MEDIAWIKI:200m inactive=60m max_size=5g;
↓
</syntaxhighlight>
robots. 16.txt без повного блокування
server reached pm.max_children setting
<syntaxhighlight lang="bash">
<div style="border-left: 6px solid #ff9800; background: #fff4e5; padding: 12px; margin: 12px 0;">
<syntaxhighlight lang="text">
Перевірка:
У backend Nginx:
sudo tail -n 50000 /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -50
Подивитися конкретні URL з 504:
location @rate_limited { sudo apt install php8.4-apcu
8.1 Frontend Nginx
Висновок
request_terminate_timeout = 300s
MediaWiki
<syntaxhighlight lang="nginx">
include /etc/nginx/conf.d/*.conf;
'xff="$http_x_forwarded_for" '
Перевірка:
12. APCu для кешу MediaWiki
add_header Retry-After 30 always;
У http { ... # Поставити request_terminate_timeout = 300s. ~*(^|&)(action=edit|action=history|action=raw|action=info|action=purge) 1;
sudo nano /etc/php/8.4/fpm/conf.d/20-apcu.ini
limit_req zone=bot_slow burst=20 nodelay;
sudo nginx -t
<syntaxhighlight lang="nginx">
map "$is_heavy_bot:$request_method" $bot_limit_key {
}
default 0;
sudo nano /etc/nginx/sites-available/wiki.erp.kyiv.ua
sudo chown -R www-data:www-data /var/www/wiki.erp.kyiv.ua/cache
У PHP location додати:
~*SemrushBot 1;
18. Перевірка MySQL / MariaDB
User-agent: *
~*Bytespider 1;
send_timeout 300s;
~*facebookexternalhit 1;
</div>
<syntaxhighlight lang="bash">
fastcgi_read_timeout 300s;
log_format realip_debug '$host client=$remote_addr proxy=$realip_remote_addr '
}
Приклад:
}
<syntaxhighlight lang="text">
$wgFileCacheDirectory = "$IP/cache";
Рекомендації:
sudo nano /etc/php/8.4/fpm/php.ini
sudo nano /etc/nginx/nginx.conf
fastcgi_send_timeout 300s;
<code>504 Gateway Timeout</code> означає, що Nginx не дочекався відповіді від upstream. sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c | sort -nr
=== 4.1 Повний блок для http { } ===
<syntaxhighlight lang="ini">
# Налаштувати <code>real_ip</code> на backend Nginx. # Перевірити, що авторизовані сторінки не кешуються. Це небезпечно, бо клієнти зможуть підробляти IP через HTTP-заголовки. }</code>:
↓
=== 9.2 Як порахувати pm.max_children ===
return 429 "Too many requests. # Додати кешування статичних файлів.<syntaxhighlight lang="bash">
sudo systemctl restart php8.4-fpm
Після зміни:
У <code>LocalSettings.php</code>:
<syntaxhighlight lang="text">
sudo tail -f /var/log/nginx/wiki_realip_debug.log
<syntaxhighlight lang="bash">
~*Special: 1;
default "";
'''robots.txt не виступає як захистом від агресивних ботів.''' Але коректні боти можуть враховувати <code>Crawl-delay</code> і не сканувати важкі URL. }</code>:
~*Baiduspider 1;
<syntaxhighlight lang="bash">
</syntaxhighlight>
користувач системи / бот
Crawl-delay: 30
дозволені запити проходять одразу, а зайві швидше отримують:
Етап 5. База даних
Увага: якщо PHP-FPM у вас слухає TCP, як приклад 127.0.0.1:9000, не змінюйте fastcgi_pass на socket. Основна ідея оптимізації MediaWiki: не без зусиль збільшити кількість PHP-FPM воркерів, а зменшити кількість важких запитів, які доходять до PHP. # Збереження сторінок не повинно потрапляти під bot limit. # Перевірити повідомлення server reached pm.max_children. # Проаналізувати важкі розширення. # Збільшити proxy_read_timeout і fastcgi_read_timeout до 300s.== 17. Кешування статичних файлів ==
У PHP location:
sudo grep -R "bot_heavy_key\|mw_heavy_uri\|bot_limit_key\|is_heavy_bot\|limit_req" /etc/nginx/
mysqladmin status
Етап 3. MediaWiki
~^1:1:1:HEAD$ $binary_remote_addr;
== 3. Коректне визначення реального IP через два Nginx ==
Перезапуск:
<syntaxhighlight lang="bash">
Disallow: /*action=raw
fastcgi_connect_timeout 60s;
~*Applebot 1;
== 13. Винесення MediaWiki Job Queue з веб-запитів ==
12000 MB / 180 MB = 66
На backend Nginx у файлі:
map $request_uri $mw_heavy_uri {
limit_req_zone $bot_heavy_key zone=bot_heavy_slow:20m rate=10r/m;
* чи POST не потрапляє під rate limit;
* чи достатній <code>proxy_read_timeout</code> на frontend Nginx;
* чи достатній <code>fastcgi_read_timeout</code> на backend Nginx;
* чи не впирається PHP-FPM у <code>pm.max_children</code>;
* чи не виконуються MediaWiki jobs під час веб-запиту;
* що показує PHP-FPM slowlog.</div>
'''Slowlog допоможе знайти реальну причину повільної роботи.''' Часто там видно <code>Parser</code>, <code>LinksUpdate</code>, <code>SpecialPage</code>, <code>SyntaxHighlight</code>, <code>api.php</code>, <code>RecentChange</code> або <code>JobQueue</code>. pm.max_spare_servers = 30
# Увімкнути slow query log. # Винести Job Queue в cron. У <code>LocalSettings.php</code>:
<syntaxhighlight lang="bash">
set_real_ip_from 192.168.20.225;
потрібно збільшити <code>pm.max_children</code>.
Шукати:
apc.ttl=3600
Рекомендовані параметри:
</syntaxhighlight>
Формула:
proxy_set_header Host $host;
Найважливіші зміни:
~^1:1:0:GET$ $binary_remote_addr;
fastcgi_connect_timeout 60s;
unknown "mw_heavy_uri" variable
Disallow: /w/index.php?title=Special:
~*anthropic-ai 1;
client=92.222.104.195 proxy=192.168.20.225
sudo systemctl restart php8.4-fpm
proxy_set_header X-Real-IP $remote_addr;
Перегляд:
</syntaxhighlight>
</syntaxhighlight>
</syntaxhighlight>
У конфігу сайту, як приклад:
Crawl-delay: 30
proxy_pass http://BACKEND_IP;
sudo journalctl -u php8.4-fpm | grep -i "max_children" | tail -20
sudo systemctl restart php8.4-fpm
5. конфігурація server-блоку MediaWiki
limit_conn bot_conn 5;
</syntaxhighlight>
curl -I https://wiki.example.com/wiki/Main_Page
$wgSessionCacheType = CACHE_ACCEL;
real_ip_header X-Real-IP;
4. Обмеження швидкості ботів без повного блокування
Frontend Nginx
php -i | grep -i opcache
~^1:1:1:GET$ $binary_remote_addr;
Помилка:
9.1 Перевірка нестачі воркерів
limit_req_zone $bot_limit_key zone=bot_slow:20m rate=1r/s;
sudo tail -n 5000 /var/log/nginx/access.log | awk '$9 == 504 {print $1, $6, $7, $9, $12}' | tail -50
захисту живих користувачів краще використовувати nodelay забезпечується через Рекомендація:; так само реалізовано щоб Nginx не накопичував довгу чергу запитів. ##
- Bot detection
php8.4-fpm
Цей блок потрібно вставити у:
</syntaxhighlight>
location ~ \.php$ {
pm = dynamic
}
~*/Special: 1;
</syntaxhighlight>
</syntaxhighlight>
proxy_set_header X-Forwarded-Proto $scheme;
expires 30d;
<syntaxhighlight lang="bash">
fastcgi_cache_valid 404 1m;
$wgMainCacheType = CACHE_ACCEL;
IP frontend Nginx виступає ключовою рисою де <code>192.168.20.225 </code>. extensions/SyntaxHighlight_GeSHi/... pm.start_servers = 10
Disallow: /*diff=
'''Причина:''' у конфігу застосовується для <code>$mw_heavy_uri</code>, але не оголошено відповідний <code>map</code>. php-fpm: pool www
~*ChatGPT-User 1;
<syntaxhighlight lang="nginx">
~*GPTBot 1;
== 19. SyntaxHighlight та інші важкі розширення ==
User-agent: ClaudeBot
<div style="border-left: 6px solid #2b7cff; background: #eef5ff; padding: 12px; margin: 12px 0;">
↓
apc.enabled=1
</syntaxhighlight>
fastcgi_cache_valid 200 301 302 10m;
<div style="border-left: 6px solid #388e3c; background: #e8f5e9; padding: 12px; margin: 12px 0;">
це означає, що сторінки з підсвіткою коду можуть створювати велике навантаження. }</code> можна тимчасово додати:
~*CCBot 1;
~^1:1:0:HEAD$ $binary_remote_addr;
Створити каталог:
~*BLEXBot 1;
=== 8.2 Backend Nginx ===
<syntaxhighlight lang="bash">
set $skip_cache 1;
php -m | grep -i apcu
fastcgi_connect_timeout 60s;
fastcgi_cache MEDIAWIKI;
== 1. Типова схема роботи ==
У потрібному <code>server { ... POST-запити, тобто збереження сторінок, не повинні потрапляти під цей rate limit. це означає, що навантаження йде через PHP / MediaWiki. }</code> додати:
pm.max_requests = 500
Це одна з найважливіших оптимізацій для збереження сторінок. MediaWiki jobs не повинні виконуватись у звичайному веб-запиті користувача. # Використати , бажано до рядків:
</syntaxhighlight>
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
</syntaxhighlight>
nodelay. }
set $skip_cache 0;
default 0;
sudo nano /etc/php/8.4/fpm/conf.d/10-opcache.ini У файлі:
</syntaxhighlight>
if ($http_cookie ~* "UserID|Token|session|mediawiki") {
proxy_send_timeout 300s;
</syntaxhighlight>
proxy_connect_timeout 60s; </syntaxhighlight> Якщо все добре: }
Конфігурація:
</syntaxhighlight>
=== Етап 4. Кешування Nginx ===
<syntaxhighlight lang="cron">
map $query_string $mw_heavy_query {
~*Amazonbot 1;
2. Діагностика навантаження
задача — не забороняти ботам доступ через 403, а зменшити швидкість їхніх запитів. # Оптимізувати індекси або проблемні сторінки. # PHP-FPM має мати достатньо воркерів. '"$request" $status "$http_user_agent"';
</syntaxhighlight> Загальний статус:
2.2 Топ IP за кількістю запитів
</syntaxhighlight>
proxy_set_header X-Real-IP $remote_addr;
apc.gc_ttl=3600 У розглянутій конфігурації сайт функціонує приблизно так:
Файл:
opcache.validate_timestamps=1
Типові помилки
opcache.max_accelerated_files=20000 request_slowlog_timeout = 5s
<syntaxhighlight lang="nginx">
<div style="border-left: 6px solid #388e3c; background: #e8f5e9; padding: 12px; margin: 12px 0;">
error_page 429 = @rate_limited;
Створити каталог:
} Якщо виступає як:
~*DotBot 1;
sudo nano /etc/php/8.4/fpm/pool.d/www.conf
Crawl-delay: 30
fastcgi_send_timeout 300s;
}
$wgJobRunRate = 0;
Перевірка:
=== Етап 1. Безпечні термінові дії ===
<syntaxhighlight lang="text">
<syntaxhighlight lang="bash">
</div>
</div>
'''Особливо важкі запити для MediaWiki:'''
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
set_real_ip_from 0.0.0.0/0;
opcache.memory_consumption=256
</syntaxhighlight> 429 Too Many Requests
User-agent: GPTBot
</syntaxhighlight>
10. PHP-FPM slowlog
2.1 Перевірка процесів
Увага: FastCGI cache потрібно впроваджувати обережно, щоб не кешувати сторінки авторизованих користувачів. "1:HEAD" $binary_remote_addr;
- Збільшити
pm.max_children. # Увімкнути файловий кеш. sudo crontab -u www-data -e
diff=
3.2 Backend Nginx
mysqladmin processlist </syntaxhighlight> opcache.revalidate_freq=60
slowlog = /var/log/php8.4-fpm-slow.log
У http { ... # Додати rate limit тільки для ботів і тільки для GET/HEAD. ~*(^|&)(diff=|oldid=|curid=) 1;
pm.max_children = 60
apc.shm_size=256M