ΠΠ°ΠΊ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° 429 Too Many Requests
ΠΡΠ΅ΡΠΊΠ°ΡΠ° 429 Too Many Requests Π΅ HTTP ΡΡΠ°ΡΡΡ ΠΊΠΎΠ΄, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ Π² RFC 6585, ΠΊΠΎΠΉΡΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ°, ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ Π΅ Π½Π°Π΄Π²ΠΈΡΠΈΠ» ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π±ΡΠΎΠΉ Π·Π°ΡΠ²ΠΊΠΈ, Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΡ ΡΡΡΠ²ΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΏΡΠΎΠΊΡΠΈ. Π‘ΡΡΠ²ΡΡΡΡ ΠΎΡΠΊΠ°Π·Π²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΡΡ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π΅ ΡΠ΅ Π½ΡΠ»ΠΈΡΠ°, ΠΊΠ°ΡΠΎ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π²ΡΡΡΠ° Π·Π°Π³Π»Π°Π²ΠΊΠ° Retry-After, ΡΠΊΠ°Π·Π²Π°ΡΠ° ΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠ»Π³ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ.
ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Π³ΡΠ΅ΡΠΊΠ° 503 Service Unavailable, ΠΊΠΎΡΡΠΎ ΠΎΡΡΠ°Π·ΡΠ²Π° Π½Π΅ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΡ Π² ΠΊΠ°ΠΏΠ°ΡΠΈΡΠ΅ΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°, 429 Π΅ ΡΠΌΠΈΡΠ»Π΅Π½ ΠΎΡΠΊΠ°Π·, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°. Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΠ°Π·Π»ΠΈΠΊΠ° Π΅ ΠΎΡ ΡΠ΅ΡΠ°Π²Π°ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° β ΡΠΎ Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° *ΠΊΠΎΠΉ* ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΡΠ²ΠΊΠΈ, *Π·Π°ΡΠΎ*, ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΡΠ»ΠΎΠΉ ΠΎΡ ΡΡΠ΅ΠΊΠ°.
ΠΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° Π³ΡΠ΅ΡΠΊΠ° 429
ΠΡΠ΅ΡΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠ΅Π²Π΅ ΠΈ ΡΠΌΠ΅ΡΠ²Π°Π½Π΅ΡΠΎ ΠΈΠΌ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎΠ³ΡΠ΅ΡΠ½Π° Π΄ΠΈΠ°Π³Π½ΠΎΠ·Π°. ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° ΠΏΠΎΠΏΠ°Π΄Π° Π² Π΅Π΄Π½Π° ΠΎΡ ΡΠ΅ΡΠΈΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ:
- ΠΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²ΡΡΠ° β Π£Π΅Π± ΡΡΡΠ²ΡΡΠΈ (Apache, Nginx), ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΠΏΡΠΎΠΊΡΠΈ (HAProxy, Varnish) ΠΈΠ»ΠΈ CDN ΠΊΡΠ°ΠΉΠ½ΠΈ Π²ΡΠ·Π»ΠΈ (Cloudflare, Fastly) Π½Π°Π»Π°Π³Π°Ρ ΠΏΡΠ°Π³ΠΎΠ²Π΅ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ Π½Π° IP ΠΈΠ»ΠΈ ΡΠΎΠΊΠ΅Π½.
- ΠΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β WordPress ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ, ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ middleware ΠΈΠ»ΠΈ API ΡΠ»ΡΠ·ΠΎΠ²Π΅ Π½Π°Π»Π°Π³Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡΠ°.
- ΠΠ·ΡΠ΅ΡΠΏΠ²Π°Π½Π΅ Π½Π° ΠΊΠ²ΠΎΡΠ°ΡΠ° Π½Π° API Π½Π° ΡΡΠ΅ΡΠΈ ΡΡΡΠ°Π½ΠΈ β ΠΠ°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π²ΡΠ½ΡΠ΅Π½ API (Google Maps, Stripe, OpenAI) ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΊΠ²ΠΎΡΠ°ΡΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°, ΠΈ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° 429 ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π΄ΠΎ ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π».
- ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ ΡΡΠ°ΡΠΈΠΊ β ΠΠΏΠΈΡΠΈ Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅ Ρ Π³ΡΡΠ±Π° ΡΠΈΠ»Π°, Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΈ ΡΠΊΡΠ΅ΠΉΠΏΡΡΠΈ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈΠ»ΠΈ Π»ΠΎΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΊΡΠΎΡΠ»ΡΡΠΈ ΠΈΠ·ΡΠ΅ΡΠΏΠ²Π°Ρ Π±ΡΠ΄ΠΆΠ΅ΡΠΈΡΠ΅ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ.
Π§Π΅ΡΡΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½ ΠΊΡΠ°Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ: ΡΡΠ΅Π΄ΠΈ Π·Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΡΠΊΠΎΠΊ Π² ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° ΡΡΡΠ΅Π΄Π΅Π½ Π½Π°Π΅ΠΌΠ°ΡΠ΅Π» ΠΈΠ·ΡΠ΅ΡΠΏΠ²Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΠΏΡΠ»ΠΎΠ²Π΅ ΠΎΡ Π²ΡΡΠ·ΠΊΠΈ, ΠΊΠ°ΡΠ°ΠΉΠΊΠΈ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ 429 ΠΎΡ upstream Π±Π°Π»Π°Π½ΡΡΠΎΡ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π²Π°ΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠ΄ ΡΠ΅ Π΄ΡΡΠΆΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠ»Π°Π½ Π·Π° Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Π½ Π£Π΅Π± Π₯ΠΎΡΡΠΈΠ½Π³ ΠΈ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΈ ΠΈΠ·Π±Π»ΠΈΡΠΈ Π½Π° 429 Π±Π΅Π· ΡΡΠΎΡΠ²Π΅ΡΠ΅Π½ ΡΠΊΠΎΠΊ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ Π²ΠΈ ΡΡΠ°ΡΠΈΠΊ, ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²Π°ΡΠ° Ρ ΠΈΠΏΠΎΡΠ΅Π·Π°, ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅.
Π‘ΡΡΠΏΠΊΠ° 1: ΠΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΊΠΎΠΌΠ΅ΡΠ½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ
ΠΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠ° 429 Π±Π΅Π· ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅ΠΉΠ½ΠΈΡ ΠΏΡΠΎΠΈΠ·Ρ ΠΎΠ΄ Π΅ Π³Π°Π΄Π°Π΅Π½Π΅. ΠΠ°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅.
Π§Π΅ΡΠ΅Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡΡΠΏ Π½Π° Apache
grep " 429 " /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ·Π²Π»ΠΈΡΠ° Π²ΡΠ΅ΠΊΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ 429, Π±ΡΠΎΠΈ ΠΏΠΎΡΠ²ΡΠ²Π°Π½ΠΈΡΡΠ° ΠΏΠΎ IP Π°Π΄ΡΠ΅Ρ ΠΈ Π³ΠΈ ΠΊΠ»Π°ΡΠΈΡΠ°. IP Π°Π΄ΡΠ΅Ρ, ΠΏΠΎΡΠ²ΡΠ²Π°Ρ ΡΠ΅ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΏΡΡΠΈ Π·Π° ΠΌΠΈΠ½ΡΡΠΈ, Π΅ ΠΈΠ»ΠΈ Π±ΠΎΡ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΡΠΊΡΠΈΠΏΡ, ΠΈΠ»ΠΈ Π½Π°ΠΏΠ°Π΄Π°ΡΠ΅Π».
Π§Π΅ΡΠ΅Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡΡΠΏ Π½Π° Nginx
awk '$9 == 429 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20ΠΠΎΡΠ΅Π»ΠΈΡΠ°Π½Π΅ Ρ ΠΏΡΡΠΈΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ
grep " 429 " /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20ΠΠΊΠΎ /wp-login.php ΠΈΠ»ΠΈ /xmlrpc.php Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠ° Π² ΠΈΠ·Ρ
ΠΎΠ΄Π°, ΠΈΠΌΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΡ Π·Π° Π³ΡΡΠ±Π° ΡΠΈΠ»Π° ΠΈΠ»ΠΈ ΠΏΡΠ»Π½Π΅Π½Π΅ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΊΠΎ API ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ° ΠΊΠ°ΡΠΎ /api/v1/search ΠΎΠ³Π»Π°Π²ΡΠ²Π° ΡΠΏΠΈΡΡΠΊΠ°, Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΠΊΡΠ΅ΠΉΠΏΡΡ.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° fail2ban Π·Π° ΡΠ°Π·ΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ
fail2ban-client status
fail2ban-client status nginx-req-limitΠΠΊΠΎ fail2ban Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Ρ ΠΊΠ°ΠΏΠ°Π½ nginx-req-limit, ΡΠΎΠΉ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ ΡΠ° Π±ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΏΠ΅ΡΡΡΠ²Π°ΠΉΠΊΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅.
Π‘ΡΡΠΏΠΊΠ° 2: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΅Π± ΡΡΡΠ²ΡΡ
Apache: ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° mod_ratelimit ΠΈ mod_evasive
Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΡΡ .htaccess, ΡΠΈΡΠΎΠΊΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ ΠΎΠ½Π»Π°ΠΉΠ½, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° mod_rewrite Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° 403, Π° Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ 429. ΠΠΎ-ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ½ΠΎ ΠΊΠΎΡΠ΅ΠΊΡΠ΅Π½ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° mod_evasive Π·Π° ΡΠΌΠ΅ΠΊΡΠ°Π²Π°Π½Π΅ Π½Π° DoS Π°ΡΠ°ΠΊΠΈ.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ mod_evasive Π½Π° Debian/Ubuntu:
apt install libapache2-mod-evasive
a2enmod evasiveΠ‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΊΡΠΌ Π²Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»Π΅Π½ Ρ ΠΎΡΡ Π½Π° Apache ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify admin@yourdomain.com
DOSLogDir /var/log/mod_evasive
</IfModule>Π’ΠΎΠ²Π° Π±Π»ΠΎΠΊΠΈΡΠ° Π²ΡΠ΅ΠΊΠΈ IP Π°Π΄ΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π° Π΄ΠΎ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 5 ΠΏΡΡΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°, ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΈΡ ΡΠ°ΠΉΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 50 ΠΏΡΡΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°, Π·Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ Π½Π° ΠΎΡ Π»Π°ΠΆΠ΄Π°Π½Π΅ ΠΎΡ 10 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
ΠΠ° ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ 429 ΡΡΠ΅Π· .htaccess Π½Π° Apache Ρ mod_rewrite, ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π·Π° Π³ΡΠ΅ΡΠΊΠ°:
ErrorDocument 429 "Too Many Requests"
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(SemrushBot|AhrefsBot|MJ12bot|DotBot).*$ [NC]
RewriteRule .* - [R=429,L]
</IfModule>Nginx: limit_req_zone Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·Π±Π»ΠΈΡΠΈ
ngx_http_limit_req_module Π½Π° Nginx Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. ΠΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, ΡΠ° burst ΠΈ nodelay.
Π /etc/nginx/nginx.conf ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠ°ΠΉΠ» Π·Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅:
http {
# Zone keyed by client IP, 10MB shared memory, 10 requests/second baseline
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/s;
# Return 429 instead of the default 503
limit_req_status 429;
server {
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
}
location /wp-login.php {
limit_req zone=login_limit burst=3 nodelay;
}
}
}ΠΡΠΈΡΠΈΡΠ΅Π½ Π½ΡΠ°Π½Ρ: ΠΠ΅Π· limit_req_status 429, Nginx ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π²ΡΡΡΠ° 503 Π·Π° Π·Π°ΡΠ²ΠΊΠΈ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π±ΡΠΎΠΉ. ΠΠ°Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΌΡ Π½Π° 429 Π΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ½ΠΎ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π΄Π° ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅ Retry-After.
nodelay ΡΡΠ΅ΡΡ Π±Π΅Π· ΡΠ»Π°Π³:
- ΠΠ΅Π·
nodelay: ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΡ Π½Π° ΠΎΠΏΠ°ΡΠΊΠ° ΠΈ ΡΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Ρ Ρ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅, ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π°ΠΉΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ. - Π‘
nodelay: ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π½Π°Π΄ ΠΈΠ·Π±Π»ΠΈΠΊΠ° ΡΠ΅ ΠΎΡΡ Π²ΡΡΠ»ΡΡ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Ρ 429, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅nodelayΠ·Π° ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅ ΠΈ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ API.
ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠ° Retry-After
ΠΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅, ΡΠΏΠ°Π·Π²Π°ΡΠΈ RFC 6585, ΡΠ΅ ΡΠ΅ ΡΡΠΎΠ±ΡΠ°Π·ΡΡ ΡΡΡ Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° Retry-After. Π Nginx Ρ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΊΡΠΌ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π·Π° Π³ΡΠ΅ΡΠΊΠ°:
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
add_header Retry-After 60 always;
}Π‘ΡΡΠΏΠΊΠ° 3: ΠΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΠΎΡΡΡΡΠ°Π½Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ Ρ WordPress ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ
WordPress Π΅ ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ 429. ΠΠ»ΡΠ³ΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π°Π½ΠΊΠ΅ΡΠΈΡΠ°Ρ Π²ΡΠ½ΡΠ½ΠΈ API ΠΏΡΠΈ Π²ΡΡΠΊΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° β SEO ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, ΠΈΠ·Π²Π»ΠΈΡΠ°ΡΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΊΠ»ΡΡΠΎΠ²ΠΈ Π΄ΡΠΌΠΈ, Π°Π½Π°Π»ΠΈΡΠΈΡΠ½ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ, ΠΈΠ·ΠΏΡΠ°ΡΠ°ΡΠΈ Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΡ ΡΡΡΠ²ΡΡ, ΠΈΠ»ΠΈ WooCommerce ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ, Π·Π°ΡΠ²ΡΠ²Π°ΡΠΈ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΈ ΡΠ»ΡΠ·ΠΎΠ²Π΅ β ΠΌΠΎΠ³Π°Ρ Π±ΡΡΠ·ΠΎ Π΄Π° ΠΈΠ·ΡΠ΅ΡΠΏΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠΈ.
Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΡΠ½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π·Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½Π΅:
- ΠΠ΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ ΡΡΠ΅Π· ΡΠ°Π±Π»ΠΎΡΠΎ Π½Π° WordPress ΠΈΠ»ΠΈ, Π°ΠΊΠΎ ΡΠ°Π±Π»ΠΎΡΠΎ Π΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ, ΡΡΠ΅Π· WP-CLI:
wp plugin deactivate --all- ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½, ΡΠ΅ΡΡΠ²Π°ΠΉΠΊΠΈ ΡΠ»Π΅Π΄ Π²ΡΡΠΊΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅:
wp plugin activate plugin-slug- ΠΠ°Π±Π»ΡΠ΄Π°Π²Π°ΠΉΡΠ΅ Π»ΠΎΠ³Π° Π·Π° Π΄ΠΎΡΡΡΠΏ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π΄ΠΎΠΊΠ°ΡΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ:
tail -f /var/log/nginx/access.log | grep " 429 "- Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π±ΡΠ΄Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡΡ ΠΏΠ»ΡΠ³ΠΈΠ½, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΠΌΡ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ Π½Π° Π°Π½ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° API ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΡΠ΅ΡΡΠΎΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΎ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎ.
Π§Π΅ΡΡΠΈ Π½Π°ΡΡΡΠΈΡΠ΅Π»ΠΈ: Jetpack (ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ), Yoast SEO (ΠΊΠΎΠ³Π°ΡΠΎ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ MyYoast), WooCommerce Subscriptions ΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ wp_remote_get() Π½Π° WordPress Π² ΡΠΈΠΊΡΠ» Π±Π΅Π· ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Ρ ΡΡΠ°Π½Π·ΠΈΠ΅Π½ΡΠΈ.
ΠΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½Π° β ΡΠΎ Π΅ Π΄Π° ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Π½Π° API ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° WordPress ΡΡΠ°Π½Π·ΠΈΠ΅Π½ΡΠΈ:
$cached = get_transient( 'my_api_response' );
if ( false === $cached ) {
$response = wp_remote_get( 'https://api.example.com/data' );
set_transient( 'my_api_response', $response, HOUR_IN_SECONDS );
$cached = $response;
}Π‘ΡΡΠΏΠΊΠ° 4: ΠΠ½Π΅Π΄ΡΠ΅ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° API Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
ΠΠΎΠ³Π°ΡΠΎ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ *ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ*, Π΄ΠΎΡΡΡΠΏΠ²Π°Ρ API Π½Π° ΡΡΠ΅ΡΠ° ΡΡΡΠ°Π½Π°, Π²ΠΈΠ΅ ΡΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΡΠΏΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ. Π Π°Π·ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ»Π°Π²ΡΠ½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ 429 Π΅ Π»ΠΎΡΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡΡΠ²ΠΎ β Π²Π½Π΅Π΄ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅.
Node.js Ρ p-throttle
import pThrottle from 'p-throttle';
const throttle = pThrottle({
limit: 10, // max 10 calls
interval: 1000 // per 1000ms (1 second)
});
const throttledFetch = throttle(async (url) => {
const response = await fetch(url);
return response.json();
});Python Ρ tenacity Π·Π° Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅
Π‘Π°ΠΌΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π°ΠΊΠΎ API Π½Π°Π»Π°Π³Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΠΈΠ·Π±Π»ΠΈΡΠΈ. ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΉΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Ρ Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅ ΠΏΡΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ 429:
import requests
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception
def is_rate_limited(exception):
return (
isinstance(exception, requests.HTTPError)
and exception.response.status_code == 429
)
@retry(
retry=retry_if_exception(is_rate_limited),
wait=wait_exponential(multiplier=1, min=2, max=60),
stop=stop_after_attempt(5)
)
def call_api(url):
response = requests.get(url)
response.raise_for_status()
return response.json()Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ Π΄ΠΎ 5 ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΎΠΏΠΈΡΠ° Ρ Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅ (2 ΡΠ΅ΠΊ., 4 ΡΠ΅ΠΊ., 8 ΡΠ΅ΠΊ., 16 ΡΠ΅ΠΊ., 32 ΡΠ΅ΠΊ.), ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ Π΄ΠΎ 60 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ β ΠΌΠΎΠ΄Π΅Π», ΠΊΠΎΠΉΡΠΎ Π·Π°ΡΠΈΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π½Π° API, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° ΠΏΠ»Π°Π²Π½ΠΎ.
Π‘ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° Retry-After
ΠΠΊΠΎ API Π²ΡΡΡΠ° Π·Π°Π³Π»Π°Π²ΠΊΠ° Retry-After, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΎ ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅:
def call_with_retry_after(url):
response = requests.get(url)
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 5))
time.sleep(retry_after)
return call_with_retry_after(url)
response.raise_for_status()
return response.json()Π‘ΡΡΠΏΠΊΠ° 5: ΠΠ»ΠΎΠΊΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΠΉΡΠ΅ Π±ΠΎΡΠΎΠ²Π΅ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠ΅Π²Π΅
ΠΠΎΡΠΎΠ²Π΅ΡΠ΅ ΡΡΠ΄ΠΊΠΎ ΡΠ΅ ΠΎΠ±ΡΠ²ΡΠ²Π°Ρ ΡΠ΅ΡΡΠ½ΠΎ, Π½ΠΎ ΠΎΡΡΠ°Π²ΡΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΡΡΠΈ Π² Π½ΠΈΠ·ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ Π°Π³Π΅Π½Ρ, ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈΡΠ΅ Π² Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅.
ΠΠ»ΠΎΠΊΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ Π»ΠΎΡΠΈ Π±ΠΎΡΠΎΠ²Π΅ Π² Nginx
map $http_user_agent $bad_bot {
default 0;
~*SemrushBot 1;
~*AhrefsBot 1;
~*MJ12bot 1;
~*DotBot 1;
~*PetalBot 1;
~*serpstatbot 1;
}
server {
if ($bad_bot) {
return 429;
}
}Π£ΠΏΡΠ°Π²Π»ΡΠ²Π°ΠΉΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΎΠ±Ρ
ΠΎΠΆΠ΄Π°Π½Π΅ ΡΡΠ΅Π· robots.txt
User-agent: Googlebot
Crawl-delay: 2
User-agent: *
Crawl-delay: 10ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Crawl-delay Π½Π΅ ΡΠ΅ ΡΠΏΠ°Π·Π²Π° ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΊΡΠΎΡΠ»ΡΡΠΈ, Π½ΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ Π·Π°ΡΠΈΡΠ° ΠΎΡ Bing, Yandex ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄ΡΡΠΆΠ°ΡΠΈ ΡΠ΅ Π±ΠΎΡΠΎΠ²Π΅.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π½Π° Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π° Π·Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (WAF)
WAF, ΡΠ°Π±ΠΎΡΠ΅ΡΠ° Π½Π° CDN ΡΡΠ±Π° (Cloudflare, AWS WAF, Sucuri), ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°Π»Π°Π³Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΈ ΡΡΠ°ΡΠΈΠΊΡΡ Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π½Π΅ Π²Π°ΡΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΡΡΠ²ΡΡ, Π΄ΡΠ°ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ. ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° Cloudflare, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ IP Π°Π΄ΡΠ΅ΡΠΈ, Π½Π°Π΄Π²ΠΈΡΠ°Π²Π°ΡΠΈ ΠΏΡΠ°Π³, Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π²Π°ΡΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΡΡΠ²ΡΡ β Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π·Π° ΡΠ°ΠΉΡΠΎΠ²Π΅ Ρ Π²ΠΈΡΠΎΠΊ ΡΡΠ°ΡΠΈΠΊ.
Π‘ΡΡΠΏΠΊΠ° 6: ΠΠΎΡΠΈΠ³ΠΈΡΠ°ΠΉΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π² WordPress
ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Wordfence, ΠΏΡΠ°Π³ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΠ΅ΡΡΠΎ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΠΎ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Ρ ΡΠ°Π»ΡΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π·Π° Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π½Π° ΡΠ°ΠΉΡΠΎΠ²Π΅ Ρ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° AJAX ΠΈΠ»ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π½Π° Π²Π»Π΅Π·Π»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ.
ΠΠ°Π²ΠΈΠ³ΠΈΡΠ°ΠΉΡΠ΅ Π΄ΠΎ Wordfence > Firewall > All Firewall Options > Rate Limiting ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΉΡΠ΅:
- ΠΠ°ΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ΅ΡΠΈΡΠ°ΠΌΠ΅ ΠΊΡΠΎΡΠ»ΡΡΠΈΡΠ΅ Π½Π° Google β Π·Π°Π΄Π°ΠΉΡΠ΅ Π½Π° βVerified Google crawlers are not rate limitedβ, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΠ΅ Π²ΡΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²ΡΡΡ Ρ SEO.
- ΠΠΊΠΎ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° Π½ΡΠΊΠΎΠ³ΠΎ Π½Π°Π΄Π²ΠΈΡΠ°Ρ β ΡΠ²Π΅Π»ΠΈΡΠ΅ΡΠ΅ ΠΏΡΠ°Π³Π° ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ (Π½Π°ΠΏΡ. ΠΎΡ 240 Π½Π° 480 Π·Π°ΡΠ²ΠΊΠΈ Π² ΠΌΠΈΠ½ΡΡΠ° Π·Π° Π²Π»Π΅Π·Π»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° ΡΠ°ΠΉΡΠΎΠ²Π΅ Ρ Π±ΠΎΠ³Π°ΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅).
- ΠΠΊΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΈΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΎΡ ΠΊΡΠΎΡΠ»ΡΡ Π½Π°Π΄Π²ΠΈΡΠ°Ρ β Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π²ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° Π±ΡΠ΄ΠΆΠ΅Ρ Π·Π° ΠΎΠ±Ρ ΠΎΠΆΠ΄Π°Π½Π΅.
Π‘Π»Π΅Π΄ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° Π½Π° ΠΆΠΈΠ²ΠΈΡ ΡΡΠ°ΡΠΈΠΊ Π½Π° Wordfence Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 24β48 ΡΠ°ΡΠ°, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅, ΡΠ΅ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ.
Π‘ΡΡΠΏΠΊΠ° 7: ΠΠ·ΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠ΅ΡΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π±ΡΠ°ΡΠ·ΡΡ
ΠΠ΅ΡΠΈΡΠ°Π½ΠΈΡΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡ 429 Π² Π±ΡΠ°ΡΠ·ΡΡΠ° Π΅ ΡΡΠ΄ΡΠΊ, Π½ΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½, Π°ΠΊΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ Π΅ Π²ΠΊΠ»ΡΡΠ²Π°Π» Π·Π°Π³Π»Π°Π²ΠΊΠΈ Cache-Control: max-age (Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΡΠ²ΡΡΠ°). Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ 429 Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ.
Chrome:
Settings > Privacy and Security > Clear browsing dataΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ Cached images and files ΠΈ Cookies and other site data, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΡΠΈΡΡΠ΅ΡΠ΅.
ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° curl, Π·Π° Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° Π±ΡΠ°ΡΠ·ΡΡΠ°:
curl -I -X GET https://yourdomain.com/problematic-endpointΠΠΎΡΡΡΡΠ΅ΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Cache-Control, Retry-After ΠΈ X-RateLimit-* Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°. Π’Π΅Π·ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΡΠ°Π·ΠΊΡΠΈΠ²Π°Ρ ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΉ ΡΠ»ΠΎΠΉ Π½Π°Π»Π°Π³Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΊΠΎΠ³Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅: ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΏΠΎ ΡΠ»ΠΎΠΉ
| Π‘Π»ΠΎΠΉ | ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ / ΠΠ΅ΡΠΎΠ΄ | ΠΡΠ°Π½ΡΠ»ΡΡΠ½ΠΎΡΡ | ΠΠ°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ | ΠΠ°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° |
|---|---|---|---|---|
| CDN / Π ΡΠ± | Cloudflare Rate Limiting, AWS WAF | ΠΠ° IP, Π½Π° ΠΏΡΡ, Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠ° | ΠΠ½ΠΎΠ³ΠΎ Π½ΠΈΡΠΊΠΎ (ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΡΡΠ²ΡΡ) | DDoS, ΡΠΌΠ΅ΠΊΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΊΡΠ΅ΠΉΠΏΡΡΠΈ |
| ΠΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ | Nginx `limit_req_zone` | ΠΠ° IP, Π½Π° Π·ΠΎΠ½Π° | ΠΠΈΡΠΊΠΎ | API ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ, ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅ |
| Π£Π΅Π± ΡΡΡΠ²ΡΡ | Apache `mod_evasive` | ΠΠ° IP, Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° | ΠΠΈΡΠΊΠΎ-ΡΡΠ΅Π΄Π½ΠΎ | Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³, Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΡΡΠ΅ΠΊΠΎΠ²Π΅ |
| ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ | Middleware ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅, API ΡΠ»ΡΠ· | ΠΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π½Π° ΡΠΎΠΊΠ΅Π½, Π½Π° ΠΊΠ»ΡΡ | Π‘ΡΠ΅Π΄Π½ΠΎ | ΠΠ½ΠΎΠ³ΠΎΠ½Π°Π΅ΠΌΠ°ΡΠ΅Π»ΡΠΊΠΈ SaaS, REST API |
| CMS ΠΏΠ»ΡΠ³ΠΈΠ½ | Wordfence, iThemes Security | ΠΠ° IP, Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ° ΡΠΎΠ»Ρ | Π‘ΡΠ΅Π΄Π½ΠΎ-Π²ΠΈΡΠΎΠΊΠΎ | WordPress-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° Π·Π°ΡΠΈΡΠ° |
| ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΠΊΠΎΠ΄ | `tenacity`, `p-throttle`, ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅ | ΠΠ° ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠ° Π·Π°ΡΠ²ΠΊΠ° | ΠΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ | ΠΠΎΠ½ΡΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° API Π½Π° ΡΡΠ΅ΡΠΈ ΡΡΡΠ°Π½ΠΈ |
ΠΠΎΠ³Π° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ Π²Π°ΡΠΈΡ Ρ ΠΎΡΡΠΈΠ½Π³ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊ
ΠΡΠΊΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ Π΄ΠΎ Π²Π°ΡΠΈΡ Ρ ΠΎΡΡΠΈΠ½Π³ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊ, ΠΊΠΎΠ³Π°ΡΠΎ:
- ΠΡΠ΅ΡΠΊΠ°ΡΠ° 429 ΠΏΡΠΎΠΈΠ·Ρ ΠΎΠΆΠ΄Π° ΠΎΡ upstream Π±Π°Π»Π°Π½ΡΡΠΎΡ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅.
- ΠΠ½Π°Π»ΠΈΠ·ΡΡ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡΠ΅ ΠΎΠ±Π΅ΠΌΠΈ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, Π½ΠΎ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°.
- ΠΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ ΡΠΊΠΎΠΊ Π² ΡΡΠ°ΡΠΈΠΊΠ° (ΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡ, ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ΠΎΠ²Π° ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΡ).
- ΠΡΠ΅ΡΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° ΡΠ°ΠΌΠΎ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ Π³Π΅ΠΎΠ³ΡΠ°ΡΡΠΊΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ CDN ΠΈΠ»ΠΈ anycast ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ»Π°Π½ Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³, ΠΈΠΌΠ°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Nginx ΠΈ Apache, ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π±Π΅Π· Π΄Π° ΠΎΡΠ²Π°ΡΡΡΠ΅ ΡΠΈΠΊΠ΅Ρ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°. ΠΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠΎ Dedicated ΡΡΡΠ²ΡΡΠΈ, Π΅ΠΊΠΈΠΏΡΡ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π²Π°ΡΠΈΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½Π° Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π°, ΠΊΠΎΠΈΡΠΎ Π½Π°Π΄Ρ Π²ΡΡΠ»ΡΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ ΡΡΠ΅ΠΊ Π²ΠΊΠ»ΡΡΠ²Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π», VPS Ρ cPanel ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ModSecurity ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° Apache ΡΡΠ΅Π· GUI, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° Π΅ΠΊΠΈΠΏΠΈ Π±Π΅Π· Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ΅Π½Π° Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΠ·Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
ΠΠ°ΡΠΈΡΠ° Π½Π° API ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ Ρ SSL
Π§Π΅ΡΡΠΎ ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅Π³Π²Π°Π½ ΡΠ°ΠΊΡΠΎΡ: Π½Π΅ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½ΠΈΡΠ΅ HTTP ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ ΡΠ° ΠΏΠΎ-ΡΡΠ·Π²ΠΈΠΌΠΈ ΠΊΡΠΌ Π°ΡΠ°ΠΊΠΈ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ»Π½Π΅Π½Π΅ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π³ΡΠ΅ΡΠΊΠΈ 429, ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΈ ΠΎΡ Π³ΡΡΠ±Π° ΡΠΈΠ»Π°. ΠΠ°Π»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° HTTPS Ρ Π²Π°Π»ΠΈΠ΄Π΅Π½ SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΡΠΎΠΊΠ΅Π½ΠΈΡΠ΅ Π·Π° ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ ΠΈ Π±ΠΈΡΠΊΠ²ΠΈΡΠΊΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΡ Π²Π°Π½Π°ΡΠΈ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ ΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ Π΅Π΄Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ, Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΡΠΈ ΡΠ°ΠΌΠΈΡ ΠΉ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ° ΠΌΠ°ΡΡΠΈΡΠ° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ: ΠΠ·Π±ΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ, Π·Π° Π΄Π° Π½Π°ΡΠΎΡΠΈΡΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΠ·Π°ΡΠ° ΡΠΈ ΠΊΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
- 429 Π½Π°
/wp-login.phpΠΈΠ»ΠΈ/xmlrpc.phpβ ΠΠ°ΡΠ΅Π³Π½Π΅ΡΠ΅ Nginxlimit_reqΠ·Π° ΡΠ΅Π·ΠΈ ΠΏΡΡΠΈΡΠ°, Π±Π»ΠΎΠΊΠΈΡΠ°ΠΉΡΠ΅xmlrpc.phpΠΈΠ·ΡΡΠ»ΠΎ, Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ, Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ Π·Π°ΡΠΈΡΠ°ΡΠ° ΡΡΠ΅ΡΡ Π³ΡΡΠ±Π° ΡΠΈΠ»Π° Π½Π° Wordfence. - 429 Π½Π° API ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ ΠΎΡ Π²Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ β ΠΠ½Π΅Π΄ΡΠ΅ΡΠ΅ Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ°
Retry-After; Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Ρ ΡΡΠ°Π½Π·ΠΈΠ΅Π½ΡΠΈ/Redis Π·Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ. - 429, Π·Π°ΡΡΠ³Π°Ρ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΠΏΡΠΈ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³ β ΠΠΈΠ³ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΡΠΌ VPS Π·Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ.
- 429 ΠΎΡ API Π½Π° ΡΡΠ΅ΡΠ° ΡΡΡΠ°Π½Π°, ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Π½ ΠΎΡ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ°, Π²Π½Π΅Π΄ΡΠ΅ΡΠ΅ ΠΎΠΏΠ°ΡΠΊΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠ΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΎ ΠΈ ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π½Π° API, Π·Π° Π΄Π° ΠΎΠ±ΡΡΠ΄ΠΈΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠ²ΠΎΡΠ°ΡΠ°.
- 429, ΠΏΡΠΈΡΠΈΠ½Π΅Π½ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π±ΠΎΡ ΠΈΠ»ΠΈ ΠΊΡΠΎΡΠ»ΡΡ β ΠΠ»ΠΎΠΊΠΈΡΠ°ΠΉΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ WAF ΠΈΠ»ΠΈ Nginx
mapΠΏΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ Π°Π³Π΅Π½Ρ; ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΉΡΠ΅ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈΡΠ΅ ΠΊΡΠΎΡΠ»ΡΡΠΈ (Googlebot) ΡΡΠ΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ DNS ΠΏΡΠ΅Π΄ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅. - 429, ΠΏΠΎΡΠ²ΡΠ²Π°Ρ ΡΠ΅ ΡΠ°ΠΌΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°, Π½Π΅ Π²
curlβ ΠΠ·ΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠ΅ΡΠ° Π½Π° Π±ΡΠ°ΡΠ·ΡΡΠ°; ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π·Π° service worker, ΠΊΠ΅ΡΠΈΡΠ°Ρ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π·Π° Π³ΡΠ΅ΡΠΊΠ°; ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡΠ°ΠΉΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅Cache-ControlΠ½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° 429. - 429 Π±Π΅Π· ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π» Π² Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ β ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π½Π° upstream CDN ΠΈΠ»ΠΈ Π±Π°Π»Π°Π½ΡΡΠΎΡΠ° Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ; ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅Π½ ΡΠ»ΠΎΠΉ, Π½Π΅Π²ΠΈΠ΄ΠΈΠΌ Π² Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π§ΠΠ
ΠΠ°ΠΊΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π³ΡΠ΅ΡΠΊΠ° 429 ΠΈ Π³ΡΠ΅ΡΠΊΠ° 503?
429 Π΅ ΡΠΌΠΈΡΠ»Π΅Π½ ΠΎΡΠΊΠ°Π·, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΈΠ·Π΄Π°Π²Π°Π½ ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π°Π΄Π²ΠΈΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΊΠΎΡΠΎΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. 503 ΡΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΡΡΠ²ΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° 429 Π΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°; ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° 503 Π΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ°ΠΏΠ°ΡΠΈΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°.
Π’ΡΡΠ±Π²Π° Π»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°ΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΠΈΠ΄Ρ 429?
ΠΠ΅. Π£Π²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°. ΠΠΊΠΎ 429 Π΅ ΠΏΡΠΈΡΠΈΠ½Π΅Π½Π° ΠΎΡ Π±ΠΎΡΠΎΠ²Π΅, ΠΎΠΏΠΈΡΠΈ Π·Π° Π³ΡΡΠ±Π° ΡΠΈΠ»Π° ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΡΠΊΡΠΈΠΏΡ, ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π²Π»ΠΎΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ ΡΡΠ°ΡΠΈΠΊ. ΠΠΈΠ½Π°Π³ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΡΠ²ΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°.
ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° Retry-After ΠΈ ΡΡΡΠ±Π²Π° Π»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° Ρ Π²ΠΊΠ»ΡΡΠ²Π°ΠΌ?
ΠΠ°Π³Π»Π°Π²ΠΊΠ°ΡΠ° Retry-After ΠΊΠ°Π·Π²Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ ΠΎΠΏΠΈΡ. RFC 6585 ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΉ Ρ Π²ΡΠ΅ΠΊΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ 429. ΠΠΎΠ±ΡΠ΅ Π΄ΡΡΠΆΠ°ΡΠΈΡΠ΅ ΡΠ΅ HTTP ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° API ΡΠ΅ Ρ ΡΠΏΠ°Π·Π²Π°Ρ, Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ Π±ΡΡΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΎΠΏΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π°Ρ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.
ΠΠΎΠΆΠ΅ Π»ΠΈ Π³ΡΠ΅ΡΠΊΠ° 429 Π΄Π° Π½Π°Π²ΡΠ΅Π΄ΠΈ Π½Π° ΠΌΠΎΠ΅ΡΠΎ SEO?
ΠΠ°, Π°ΠΊΠΎ Googlebot ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ 429, ΡΠΎΠΉ ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΎΠ±Ρ ΠΎΠΆΠ΄Π°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡ ΡΠ°ΠΉΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π±Π°Π²ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. Wordfence ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Ρ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΊΡΠΎΡΠ»ΡΡΠΈ Π½Π° Google ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. ΠΠ°Π±Π»ΡΠ΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΡΡΠ΅ΡΠ° Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° ΠΎΠ±Ρ ΠΎΠΆΠ΄Π°Π½Π΅ Π² Google Search Console Π·Π° ΡΠΊΠΎΠΊΠΎΠ²Π΅ Π² Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ°.
ΠΠ°ΠΊ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° Π³ΡΠ΅ΡΠΊΠΈ 429 Π½Π° Π²ΡΠ½ΡΠ½ΠΈ API?
ΠΠ½Π΅Π΄ΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ ΠΏΡΠΎΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π΄ΠΎ ΠΏΠΎΠ΄ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠ°Π³ Π½Π° API), Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ (ΡΡΡ
ΡΠ°Π½ΡΠ²Π°ΠΉΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ API Π² Redis ΠΈΠ»ΠΈ Memcached Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈ TTL) ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎ Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΎΡΡΡΡΠΏΠ²Π°Π½Π΅ (Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Retry-After ΠΈ ΠΎΡΡΡΡΠΏΠ²Π°ΠΉΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ). ΠΠΈΠΊΠΎΠ³Π° Π½Π΅ ΠΏΡΠ°Π²Π΅ΡΠ΅ API ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΏΡΠΈ Π²ΡΡΠΊΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° Π±Π΅Π· ΠΊΠ΅ΡΠΈΡΠ°Ρ ΡΠ»ΠΎΠΉ ΠΏΡΠ΅Π΄ ΡΡΡ
.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ