Ocasionalmente, vejo que os fóruns que administro exibem uma tela de carregamento que nunca para.
Parece acontecer após reconstruções ou se não visito o fórum há muito tempo. Não parece estar associado a diferentes navegadores ou plugins do fórum. E acontece com algumas pessoas, mas não com outras.
Uma atualização forçada (Ctrl-F5 no Windows ou Cmd-Shift-R no Mac) parece resolver o problema sempre. Minha suposição é que isso é um problema de cache com a CDN, mas não tenho certeza. Mais alguém está passando por algo assim?
Para este servidor em questão, não há um proxy reverso que estaria ocultando todo o tráfego do usuário atrás de um único IP. Os limites de taxa definidos dentro do Discourse são os padrões.
Suponho que a CDN possa estar fazendo algum proxy? Existe uma maneira recomendada de confirmar que os IPs dos usuários finais estão sendo passados para o backend? Não vejo nada sobre muitas solicitações nos logs.
Este é literalmente o trabalho da CDN, então sim, você precisa garantir que o IP correto do usuário final seja mantido em toda a cadeia de solicitação.
Aposto que você não fez isso, e todas as solicitações da CDN estão sendo contabilizadas contra o limite de taxa de solicitação dos POPs da CDN em vez dos usuários finais.
Você pode ver a CDN retornando o 429 aqui, mas você precisará investigar sua configuração específica para determinar quem está tomando a decisão de retornar esse erro (ou seja, o proxy ou o servidor real).
KeyCDN é a CDN em questão. Tentei ativar o OriginShield e adicionar um template.yml (no estilo do cloudflare.template.yml) ao meu app.yml, mas ainda estava recebendo 429s.
Em vez de continuar mexendo nisso, mudei para BunnyCDN e isso parece estar funcionando melhor.
Coloquei o arquivo de modelo abaixo caso ajude mais alguém.
keycdn.template.yml
run:
- file:
path: /tmp/add-keycdn-ips
chmod: +x
contents: |
#!/bin/bash -e
# Adiciona lista de ips da 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
# Transforma em comandos nginx e escapa para inclusão no comando sed append
CONTENTS=$(< /tmp/keycdn-ips sed 's/^/set_real_ip_from /' | sed 's/$/;/' | tr '\n' '\\' | sed 's/\\/\\n/g')
echo IPs da keycdn:
echo $(echo | sed "/^/a $CONTENTS")
# Insere no discourse.conf
sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header X-Forwarded-For;\nreal_ip_recursive on;" /etc/nginx/conf.d/discourse.conf
# Limpa
rm /tmp/keycdn-ips
- exec: "/tmp/add-keycdn-ips"
- exec: "rm /tmp/add-keycdn-ips"