503 Service Unavailable: претоварване или поддръжка?
· 2 мин. четене
Какво означава грешката
503 е уеб сървърът, който казва „Тук съм, но в момента не мога да Ви обслужа“. За разлика от 502, нищо зад него не е непременно повредено. Сървърът праща 503 нарочно в три ситуации: намира се в режим на поддръжка, стигнал е ограничение, което му е казано да спазва (връзки, работници, трафик, ограничение на честотата), или е толкова претоварен, че отхвърля заявки, за да остане жив. 503 може да носи заглавна част Retry-After, която казва на клиентите кога да се върнат; търсачките третират кратко 503 като временно и не премахват страницата.
Чести причини
- Режимът на поддръжка е останал включен. WordPress записва файл
.maintenanceпо време на актуализации и отговаря с 503, докато актуализацията приключи. Ако актуализацията се прекъсне, файлът остава и грешката също. Laravel, Magento, Drupal и повечето рамки имат еквивалентен превключвател. - Претоварване. Повече заявки, отколкото конфигурираните работници могат да обработят. Достигнат
MaxRequestWorkersна Apache, изчерпанpm.max_childrenна PHP-FPM или базата данни е толкова бавна, че всеки работник чака. - Ограничение на хостинга. Споделените хостинги ограничават секундите процесор, едновременните процеси или „entry processes“ на акаунт. Когато достигнете тавана, шлюзът на хостинга отговаря с 503 само за Вашия сайт.
- Бекенд, изваден от ротация. Зад балансьор на натоварването или CDN 503 означава, че всички бекенди са се провалили на проверката за състояние. Cloudflare показва своя собствена страница 503, когато оригиналният сървър е претоварен или с ограничена честота.
- Ботове и скрейпъри. Обходчик, който тегли хиляди страници, или brute-force атака срещу
wp-login.phpилиxmlrpc.phpизчерпва работниците и легитимните посетители получават 503. - Пълен диск или изчерпана памет. Услугата работи, но не може да записва сесии, кеш файлове или логове и някои приложения отговарят с 503 в това състояние.
Ако сте посетител
Изчакайте минута и презаредете; 503 обикновено е кратка. Ако сайт остава на 503 с часове, собственикът има заседнал режим на поддръжка или проблем с капацитета и само той може да го поправи.
Ако е Вашият сайт: проверете първо
Пуснете проверката дали сайтът не работи, за да потвърдите 503 отвън и да видите дали я е пратил CDN, или Вашият собствен сървър. После преценете: Вие или Вашата CMS започнали ли сте актуализация в последните минути? Ако да, това е режим на поддръжка. Ако не, това е капацитет.
На Ваш собствен сървър:
# is the web server up at all?
systemctl status nginx
systemctl status apache2
# load, memory, disk: the three numbers behind most 503s
uptime
free -m
df -h
# who is hammering the site right now?
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Средно натоварване далеч над броя на ядрата на процесора, по-малко от 100 MB свободна памет или един IP с хиляди заявки в последните минути обясняват всяко по една 503.
Поправки на Вашия собствен сървър
1. Прекратете заседнал режим на поддръжка
WordPress: изтрийте файла .maintenance в корена на сайта, после отворете сайта. Ако актуализацията, която го е създала, е била прекъсната, плъгинът или ядрото може да са инсталирани наполовина; изпълнете актуализацията отново от таблото или с WP-CLI:
rm /var/www/example.com/.maintenance
wp core verify-checksums
wp plugin update --all
Laravel: php artisan up. Magento: bin/magento maintenance:disable. Drupal: задайте $settings['maintenance_mode'] на false или ползвайте drush state:set system.maintenance_mode 0.
2. Спрете наводнението
Блокирайте нарушаващия IP или мрежа, после добавете ограничение на честотата, така че следващият да не може да го направи отново.
# block one address (Debian/Ubuntu with ufw)
sudo ufw deny from 203.0.113.45
# or with nftables
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
Ограничение на честотата в nginx за страници за вход (в блока http, после в server блока):
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Apache: mod_evasive или mod_qos правят същото; fail2ban със затворите apache-badbots и wordpress блокира повтарящи се нарушители автоматично.
3. Дайте капацитет на сървъра
Ако натоварването е истински трафик, не злоупотреба, повишете ограниченията на работниците в рамките на това, което паметта позволява. Apache (mpm_event): MaxRequestWorkers. PHP-FPM: pm.max_children. Първо проверете паметта на работник: ps -ylC php-fpm8.3 --sort:rss. После тествайте и презаредете:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Включете кеширане на страниците (WordPress: плъгин за кеширане или FastCGI кеш в nginx), така че скокът да не изпълнява PHP за всяка заявка. Кеширана страница струва част от милисекундата; страница на WordPress без кеш струва стотици.
4. Освободете диска
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
Стари лог файлове, резервни копия, пазени на същия диск, и неконтролируем дебъг лог са обичайните заподозрени.
5. Зад балансьор на натоварването
Всички бекенди, провалили проверката за състояние едновременно, обикновено означава, че самият URL на проверката е повреден (изтрита страница за състояние, пренасочване към HTTPS, което проверяващият не следва), а не всеки бекенд. Изтеглете URL на проверката на ръка от балансьора.
Когато е проблем на Вашия хостинг
При споделен хостинг не можете да повишавате ограниченията. Попитайте хостинга си кое ограничение сте достигнали и дали е Вашият трафик, или друг акаунт на същия сървър:
Здравейте, сайтът ми example.com отговаря „503 Service Unavailable“ от около 09:10 UTC. Не съм започвал актуализация и сайтът не е в режим на поддръжка. Моля, кажете ми дали акаунтът ми е достигнал ограничение на ресурсите (процесор, процеси, памет), или сървърът е претоварен, и какви са числата. Ако е акаунтът ми, кое ограничение и от кога?
Ако отговорът редовно е „акаунтът Ви достига ограниченията си“, или кеширайте сайта правилно, или преминете към план или сървър с повече капацитет.
Как да предотвратите следващата
503 се обявява сама: натоварването пълзи нагоре, паметта свършва, един IP започва да залива. Проверките на сайта хващат 503 в рамките на минута; сървърният агент показва натоварване, памет и диск, преди да се стигне дотам. На Ваш собствен сървър Quick Fix освобождава дисково пространство и рестартира заседнала услуга на фиксирана цена, а Deep Fix настройва ограничения на честотата и кеширане, така че сървърът да остане жив следващия път.
Какво сега
Проверете отвън
Сайтът не работи за всички или само за Вас и какво отговаря сървърът? Безплатно, без регистрация.
Проверка дали сайтът не работиСрив? Намесваме се.
На Ваш собствен сървър или в уеб пространство със SSH достъп: Quick Fix на фиксирана цена за честите причини, Deep Fix, таксуван на блокове от 15 минути, за останалото, денонощно. Цената е известна преди поръчката.
Поръчайте поправкаОще ръководства
- Сайтът Ви не работи. Ето какво да направите през първите 15 минути.
- Сървърът не работи: какво да проверите първо и в какъв ред
- 502 Bad Gateway: причини и как да я поправите
- 504 Gateway Timeout: какво означава и как да я поправите
- DNS_PROBE_FINISHED_NXDOMAIN: причини и поправки
- ERR_CONNECTION_REFUSED: причини и как да я поправите
- „Връзката Ви не е поверителна“: предупреждението за SSL сертификат