Иногда я вижу, что управляемые мной форумы показывают загрузочный экран, который никогда не перестает загружаться.
Похоже, это происходит после перестроения или если я долго не заходил на форум. Это, кажется, не связано с разными браузерами или плагинами форума. И это случается с некоторыми людьми, но не со всеми.
Жесткая перезагрузка (Ctrl-F5 в Windows или Cmd-Shift-R на Mac) кажется исправляет это каждый раз. Я предполагаю, что это проблема кэширования с CDN, но я не уверен. Кто-нибудь еще сталкивается с чем-то подобным?
Что касается этого сервера, обратного прокси, который скрывал бы весь пользовательский трафик за одним IP-адресом, нет. Ограничения скорости, установленные в Discourse, являются значениями по умолчанию.
Возможно, CDN выполняет какое-то проксирование? Есть ли рекомендуемый способ убедиться, что IP-адреса конечных пользователей передаются на бэкенд? В логах я не вижу ничего о слишком большом количестве запросов.
Это буквально задача CDN, поэтому да, вам необходимо убедиться, что правильный IP-адрес конечного пользователя сохраняется на протяжении всей цепочки запросов.
Полагаю, вы этого не сделали, и все запросы от CDN учитываются в рамках лимита скорости запросов для POP-узлов CDN, а не для конечных пользователей.
Здесь видно, что CDN возвращает ошибку 429, но вам нужно изучить вашу конкретную конфигурацию, чтобы определить, кто принимает решение о возврате этой ошибки (то есть прокси или реальный сервер).
Речь идет о CDN KeyCDN. Я попытался включить OriginShield и добавить файл template.yml (по образцу cloudflare.template.yml) в свой app.yml, но всё равно получал ошибки 429.
Вместо того чтобы продолжать возиться с этим, я перешёл на BunnyCDN, и это, кажется, работает лучше.
Ниже привожу файл шаблона на случай, если он поможет кому-то ещё.
keycdn.template.yml
run:
- file:
path: /tmp/add-keycdn-ips
chmod: +x
contents: |
#!/bin/bash -e
# Добавить список IP-адресов KeyCDN
curl -s 'https://www.keycdn.com/shield-prefixes.json' | \
python3 -c "import sys, json; print('\n'.join(json.load(sys.stdin)['prefixes']))" > /tmp/keycdn-ips
# Преобразовать в команды nginx и экранировать для включения в команду sed append
CONTENTS=$(</tmp/keycdn-ips sed 's/^/set_real_ip_from /' | sed 's/$/;/' | tr '\n' '\\' | sed 's/\\/\\n/g')
echo IP-адреса KeyCDN:
echo $(echo | sed "/^/a $CONTENTS")
# Вставить в discourse.conf
sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header X-Forwarded-For;\nreal_ip_recursive on;" /etc/nginx/conf.d/discourse.conf
# Очистка
rm /tmp/keycdn-ips
- exec: "/tmp/add-keycdn-ips"
- exec: "rm /tmp/add-keycdn-ips"