<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://wiki.corp2.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki</id>
	<title>Оптимізація сервера для роботи з MediaWiki - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.corp2.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki"/>
	<link rel="alternate" type="text/html" href="https://wiki.corp2.eu/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki&amp;action=history"/>
	<updated>2026-06-30T03:49:12Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.corp2.eu/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki&amp;diff=1304&amp;oldid=prev</id>
		<title>R в 22:25, 8 травня 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.corp2.eu/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki&amp;diff=1304&amp;oldid=prev"/>
		<updated>2026-05-08T22:25:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.corp2.eu/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki&amp;amp;diff=1304&amp;amp;oldid=1303&quot;&gt;Показати зміни&lt;/a&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.corp2.eu/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki&amp;diff=1303&amp;oldid=prev</id>
		<title>R: Створена сторінка: = Оптимізація сервера для роботи з MediaWiki =  &lt;div style=&quot;border-left: 6px solid #2b7cff; background: #eef5ff; padding: 12px; margin: 12px 0;&quot;&gt; &#039;&#039;&#039;Мета статті:&#039;&#039;&#039; зменшити навантаження на сервер MediaWiki, стабілізувати роботу php8.4-fpm, обмежити агресивних ботів за швидкістю, але не закривати їм доступ повні...</title>
		<link rel="alternate" type="text/html" href="https://wiki.corp2.eu/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%B7_MediaWiki&amp;diff=1303&amp;oldid=prev"/>
		<updated>2026-05-08T22:25:12Z</updated>

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