Доступные настройки для глобальных ограничений частоты и троттлинга

Discourse поставляется с 3 различными глобальными ограничениями частоты запросов, которые могут быть настроены администраторами сайта.

Глобальные ограничения частоты запросов по IP

Эти ограничения применяются к каждому уникальному IP-адресу, обращающемуся к приложению Discourse. (файлы, отдаваемые напрямую из файловой системы или CDN, исключены)

По умолчанию это ограничение включено, вы можете отключить его или установить режим только для отчета.

DISCOURSE_MAX_REQS_PER_IP_MODE : по умолчанию block, это ограничение применяется из коробки. (другие варианты: warn, warn+block и none)

DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE: количество запросов с одного IP-адреса в минуту (по умолчанию 200)

DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS: количество запросов с одного IP-адреса за 10 секунд (по умолчанию 50)

DISCOURSE_MAX_ASSET_REQS_PER_IP_PER_10_SECONDS: количество запросов к ресурсам (аватары/css) с одного IP-адреса за 10 секунд (по умолчанию 200)

DISCOURSE_MAX_REQS_RATE_LIMIT_ON_PRIVATE: следует ли применять ограничение частоты запросов к частным IP-адресам, обращающимся к Discourse? По умолчанию false.

DISCOURSE_SKIP_PER_IP_RATE_LIMIT_TRUST_LEVEL: использовать ограничения частоты запросов на пользователя вместо ограничений по IP для пользователей с этим уровнем доверия или выше (по умолчанию 1)

DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS: список IP-адресов или CIDR-блоков, разделенных пробелами, которые исключаются из ограничений частоты запросов по IP. Например: 14.15.16.32/27 216.148.1.2

Ограничения частоты запросов API для пользователей

Мобильные приложения получают ключ API пользователя для каждого устройства, чтобы обращаться к Discourse от имени пользователя (используя открытый протокол). Эти ключи API имеют очень строгие ограничения.

DISCOURSE_MAX_USER_API_REQS_PER_MINUTE: по умолчанию 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY: по умолчанию 2880

Ограничения частоты запросов API для администраторов

Административные ключи API могут быть сгенерированы на странице yoursite.com/admin/api/keys. Эти ключи могут действовать от имени пользователей, но для их генерации требуются административные привилегии. Ограничение составляет 60 запросов в минуту, общее для всех ключей.

Пользователи, размещающие серверы самостоятельно, могут изменить это значение в файле app.yml. Клиентам, использующим хостинг, необходимо связаться со своим хостинг-провайдером.

DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE : 60

Ограничения частоты запросов API плагина Data Explorer

DISCOURSE_MAX_DATA_EXPLORER_API_REQ_MODE: по умолчанию warn, это ограничение применяется из коробки. (другие варианты: block, warn+block и none)

DISCOURSE_MAX_DATA_EXPLORER_API_REQS_PER_10_SECONDS: 2

Примечание: запросы, выполняемые через пользовательский интерфейс Data Explorer, не учитываются в лимите частоты запросов.

Что мне делать, если я достиг лимита частоты запросов и получил замедление?

Если вы используете API программно и получаете ответ с кодом статуса 429 (ограничение частоты), вы должны соблюдать его и замедлить скорость запросов.

Как конечный пользователь, вы, как правило, не должны сталкиваться с ограничениями частоты запросов. Если вы столкнулись с ними, замедлите свои действия. Вы можете спровоцировать это, например, открыв 50 вкладок очень быстро или выполнив аналогичное действие.

Предупреждение о файрволе и прокси! :warning:

Если вы используете обратный прокси, настроенный некорректно, Discourse может считать, что все запросы поступают с одного IP-адреса, и с высокой вероятностью вы быстро упретесь в ограничения частоты запросов. Убедитесь, что ваш обратный прокси настроен на правильную передачу IP-адресов.

Как изменить эти ограничения?

Чтобы изменить ограничения, добавьте нужные изменения в раздел env вашего файла app.yml.

:discourse: Если вы используете хостинг Discourse и находитесь на тарифном плане Enterprise, свяжитесь с team@discourse.org, если вам нужно изменить какие-либо из этих ограничений.

Глобальные ограничения частоты запросов нельзя настроить на тарифных планах Free, Starter, Pro или Business.

60 лайков
Troubleshooting a 429 (rate limit)
Is there a limit of API requests?
Rate limits for API users
Any way to turn off RateLimiter temporarily for bulk creation by admin?
Changing/removing API rate limit with category creation
Internal links not oneboxing in private messages
How to improve the forum api call number limit?
Rate limit errors although IP is whitelisted
API rate limits
How to edit "hidden" site_settings?
How-to disable or tune rate limiting by ip address?
Error code 429 when utilising a Zapier integration
429 error when opening multiple topics
Why semrushbot and ahrefsbot are blocked by default?
Understanding /logs/report_js_error 429
Remove the ip limits
User API keys specification
Discourse API Generating 429
How to disable api limits?
Global rate API Limit is not working on live server
How to avoid throttling limits with admin API key?
Set Environmental Variables
Discourse REST API Documentation
Increase rate limit for API?
How do I disable rate limiting from a single IP
Generate User Api Key Without User Approval
Default value for id_10_secs_limit
Semantic Search API
Self-hosting Index
Fetch All Posts from a Topic Using the API
Issues when I enable Component, maybe Right Sidebar Blocks?
Create and configure an API key
Direct URL for the "email me a login link" feature
Direct URL for the "email me a login link" feature
Do not see discourse/config/site_settings.yml to set USER API limits
API rate limits
Very slow discobot certificate generation on our server
Api call returns nothing when too many requests
Uncaught (in promise) error
You Have Performed this Action Too Many Times Error
Import posts through API (time delay)
Discourse-topic-organizer causing "Slow down, too Many Requests from this IP Address"
429 too many requests good or bad ? (please help)
Enable user to Generate API key
Changing/removing API rate limit with category creation
Webhook connect to post comments to WordPress working unreliably

Мне кажется, что если у вас установлен web.ratelimited.template.yml, то эти настройки не имеют значения, так как NGINX ограничивает скорость запросов до того, как они достигнут Discourse, верно?

По крайней мере, так это выглядит в моих логах nginx.

Мое краткосрочное решение — добавить свой IP-адрес в список локальных IP, чтобы запросы проходили через NGINX. Думаю, чтобы эти настройки заработали, нужно удалить шаблон ratelimited?

2 лайка

Что касается следующего текста:

Предупреждение о брандмауэре и прокси! :warning:

Если вы используете неправильно настроенный обратный прокси, Discourse может полагать, что все запросы поступают с одного IP-адреса. В этом случае вы очень быстро столкнетесь с ограничениями скорости. Убедитесь, что ваш обратный прокси настроен на корректную передачу IP-адреса.

В нашей конфигурации все вызовы API проходят через прокси. Этот прокси обрабатывает аутентификацию и множество других задач, прежде чем иногда обращаться к Discourse.

Какой рекомендуемый способ (конкретный заголовок?) для передачи IP-адреса оригинального запрашивающего?

Связанные темы

1 лайк

Может, кто-нибудь поможет мне разобраться с этой настройкой конфигурации?

Правильно ли я понимаю, что это значение уже установлено в 1 и что ограничения частоты запросов по умолчанию уже настроены на каждого пользователя, а не на IP-адрес (если уровень доверия пользователя 1 или выше)?

1 лайк

На самом деле его не существовало, чтобы заставить меня указать одно или несколько из этих настроек.

мой скрипт всегда уважал заголовок Retry-After, как мы видим из исходной строки 101;

retry_after = r.headers.get("Retry-After")

однако этот заголовок становился излишне большим, так как я планировал запуск разных сервисных модулей для этого же скрипта в разное время в течение дня.

Следовательно, кратные значения некоторых из этих настроек по умолчанию; улучшенная доставка электронной почты через mail-receiver, что остается важным.