Добавлены рекомендации по обработке ошибки превышения лимита запросов к API reg.ru. Внедрены задержки перед запросами для защиты от rate limit. Обновлены сообщения об ошибках с инструкциями по устранению неполадок.

This commit is contained in:
Dmitriy Fofanov
2025-10-29 22:12:05 +03:00
parent 3682379d98
commit 17469e8427
3 changed files with 104 additions and 0 deletions

View File

@@ -89,6 +89,42 @@ curl -s https://ipinfo.io/ip
sudo letsencrypt-regru --test-api sudo letsencrypt-regru --test-api
``` ```
## ❌ Issue: "IP exceeded allowed connection rate"
### Cause
Reg.ru API limits request frequency from single IP (typically 10-20 requests per minute).
### ✅ Solution
1. **Wait 5-10 minutes**
```bash
# Wait before next attempt
sleep 600 # 10 minutes
sudo letsencrypt-regru --obtain
```
2. **Configure automation properly**
```bash
# Check certificates once per day
sudo systemctl enable letsencrypt-regru.timer
sudo systemctl start letsencrypt-regru.timer
# Check schedule
sudo systemctl cat letsencrypt-regru.timer
```
3. **Request frequency recommendations**
- ✅ Automatic check: **once per day**
- ✅ Manual check: **no more than once per hour**
- ❌ Avoid frequent `--test-api` tests
- ❌ Don't create frequent cron jobs
4. **Use --check instead of --obtain**
```bash
# Check without creating certificate
sudo letsencrypt-regru --check
```
## ❌ Issue: Connection timeout ## ❌ Issue: Connection timeout
### ✅ Solution ### ✅ Solution

View File

@@ -89,6 +89,42 @@ curl -s https://ipinfo.io/ip
sudo letsencrypt-regru --test-api sudo letsencrypt-regru --test-api
``` ```
## ❌ Проблема: "IP exceeded allowed connection rate"
### Причина
API reg.ru ограничивает частоту запросов с одного IP (обычно 10-20 запросов в минуту).
### ✅ Решение
1. **Подождите 5-10 минут**
```bash
# Подождите перед следующей попыткой
sleep 600 # 10 минут
sudo letsencrypt-regru --obtain
```
2. **Настройте автоматизацию правильно**
```bash
# Проверка сертификатов 1 раз в день
sudo systemctl enable letsencrypt-regru.timer
sudo systemctl start letsencrypt-regru.timer
# Проверить расписание
sudo systemctl cat letsencrypt-regru.timer
```
3. **Рекомендации по частоте запросов**
- ✅ Автоматическая проверка: **1 раз в день**
- ✅ Ручная проверка: **не чаще 1 раза в час**
- ❌ Избегайте частых тестов `--test-api`
- ❌ Не создавайте cron с частым запуском
4. **Используйте --check вместо --obtain**
```bash
# Проверка без создания сертификата
sudo letsencrypt-regru --check
```
## ❌ Проблема: Таймаут подключения ## ❌ Проблема: Таймаут подключения
### ✅ Решение ### ✅ Решение

View File

@@ -220,6 +220,26 @@ class RegRuAPI:
self.logger.error("❌ Неверные учетные данные") self.logger.error("❌ Неверные учетные данные")
self.logger.error("🔧 Проверьте username и password в конфигурации") self.logger.error("🔧 Проверьте username и password в конфигурации")
self.logger.error("=" * 80) self.logger.error("=" * 80)
elif "IP exceeded allowed connection rate" in error_msg or error_code == "IP_EXCEEDED_ALLOWED_CONNECTION_RATE":
self.logger.error("=" * 80)
self.logger.error("⏱️ ОШИБКА: ПРЕВЫШЕН ЛИМИТ ЗАПРОСОВ К API")
self.logger.error("=" * 80)
self.logger.error("❌ IP адрес превысил допустимую частоту подключений к API reg.ru")
self.logger.error("")
self.logger.error("🔧 РЕШЕНИЕ ПРОБЛЕМЫ:")
self.logger.error("1. Подождите 5-10 минут перед следующей попыткой")
self.logger.error("2. Не запускайте скрипт слишком часто")
self.logger.error("3. Используйте --test-api только для диагностики")
self.logger.error("4. Настройте systemd timer для автоматических проверок (раз в день)")
self.logger.error("")
self.logger.error("📊 ЛИМИТЫ API REG.RU:")
self.logger.error(" • Обычно: не более 10-20 запросов в минуту с одного IP")
self.logger.error(" • Рекомендация: проверка сертификатов 1-2 раза в день")
self.logger.error("")
self.logger.error("⚙️ АВТОМАТИЗАЦИЯ:")
self.logger.error(" sudo systemctl enable letsencrypt-regru.timer")
self.logger.error(" sudo systemctl start letsencrypt-regru.timer")
self.logger.error("=" * 80)
else: else:
self.logger.error(f"Ошибка API reg.ru: {error_msg} (код: {error_code})") self.logger.error(f"Ошибка API reg.ru: {error_msg} (код: {error_code})")
@@ -247,6 +267,10 @@ class RegRuAPI:
""" """
self.logger.info(f"Получение DNS записей для домена: {domain}") self.logger.info(f"Получение DNS записей для домена: {domain}")
# Задержка перед запросом (защита от rate limit)
import time
time.sleep(1)
params = { params = {
"domain": domain, "domain": domain,
} }
@@ -275,6 +299,10 @@ class RegRuAPI:
""" """
self.logger.info(f"Добавление TXT записи: {subdomain}.{domain} = {txt_value}") self.logger.info(f"Добавление TXT записи: {subdomain}.{domain} = {txt_value}")
# Задержка перед запросом (защита от rate limit)
import time
time.sleep(2)
params = { params = {
"domain": domain, "domain": domain,
"subdomain": subdomain, "subdomain": subdomain,
@@ -323,6 +351,10 @@ class RegRuAPI:
self.logger.info("Проверка доступности API reg.ru...") self.logger.info("Проверка доступности API reg.ru...")
try: try:
# Небольшая задержка перед запросом (защита от rate limit)
import time
time.sleep(1)
# Простой запрос для проверки доступа # Простой запрос для проверки доступа
params = {} params = {}
result = self._make_request("user/get_balance", params) result = self._make_request("user/get_balance", params)