Occasionalmente vedo che i forum che gestisco mostrano una schermata iniziale che non finisce mai di caricarsi.
Sembra accadere dopo i rebuild o se non ho visitato il forum per molto tempo. Non sembra associato a browser o plugin diversi per forum. E succede ad alcune persone ma non ad altre.
Un refresh forzato (Ctrl-F5 su Windows o Cmd-Shift-R su Mac) sembra risolverlo ogni volta. La mia ipotesi è che si tratti di un problema di cache con la CDN, ma non ne sono sicuro. Qualcun altro sta riscontrando qualcosa di simile?
Ognuno di questi errori è dovuto al fatto che la richiesta ha raggiunto il limite di frequenza. Discourse non può funzionare se le sue risorse non possono essere caricate.
Dovresti controllare:
viene passato l’indirizzo IP corretto dell’utente finale al backend?
il limite di frequenza è impostato correttamente? (in generale)
quale entità sta eseguendo il limite di frequenza qui?
Per questo server in questione, non c’è alcun proxy inverso che nasconda tutto il traffico degli utenti dietro un unico IP. I limiti di frequenza impostati all’interno di Discourse sono quelli predefiniti.
Suppongo che la CDN possa fare un po’ di proxy? Esiste un modo consigliato per confermare che gli IP degli utenti finali vengano passati al backend? Non vedo nulla riguardo a troppe richieste nei log.
Questo è letteralmente il lavoro della CDN, quindi sì, devi assicurarti che l’IP corretto dell’utente finale sia mantenuto attraverso la catena di richieste.
Suppongo che tu non l’abbia fatto e che tutte le richieste dalla CDN vengano conteggiate rispetto al limite di frequenza delle richieste dei POP della CDN piuttosto che degli utenti finali.
Puoi vedere che la CDN sta restituendo il 429 qui, ma dovrai indagare sulla tua configurazione specifica per determinare chi sta prendendo la decisione di restituire questo errore (cioè il proxy o il server reale).
KeyCDN è la CDN in questione. Ho provato ad abilitare OriginShield e ad aggiungere un template.yml (nello stile di cloudflare.template.yml) al mio app.yml, ma stavo ancora ricevendo 429.
Invece di continuare a trafficarci, sono passato a BunnyCDN e sembra che stia funzionando meglio.
Ho messo il file template qui sotto nel caso possa aiutare qualcun altro.
keycdn.template.yml
run:
- file:
path: /tmp/add-keycdn-ips
chmod: +x
contents: |
#!/bin/bash -e
# Aggiungi elenco di 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
# Trasforma in comandi nginx ed effettua l'escape per l'inclusione nel comando sed append
CONTENTS=$(< /tmp/keycdn-ips sed 's/^/set_real_ip_from /' | sed 's/$/;/' | tr '\n' '\\' | sed 's/\\/\\n/g')
echo keycdn IPs:
echo $(echo | sed "/^/a $CONTENTS")
# Inserisci in discourse.conf
sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header X-Forwarded-For;\nreal_ip_recursive on;" /etc/nginx/conf.d/discourse.conf
# Pulisci
rm /tmp/keycdn-ips
- exec: "/tmp/add-keycdn-ips"
- exec: "rm /tmp/add-keycdn-ips"