Tela de splash travada até atualização forçada

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?

Console quando a página não está carregando

Console após uma atualização forçada

3 curtidas

Todos esses erros são devido ao limite de requisições estar sendo atingido. O Discourse não pode rodar se seus assets não puderem ser carregados.

Você deve verificar:

  • O endereço IP correto do usuário final está sendo passado para o backend?
  • O limite de requisições está configurado corretamente? (em geral)
  • Qual entidade está realizando o limite de requisições aqui?
4 curtidas

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.

image

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).

3 curtidas

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"

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.