Ocasionalmente veo que los foros que administro muestran una pantalla de bienvenida que nunca deja de cargar.
Parece suceder después de reconstrucciones o si no he visitado el foro durante mucho tiempo. No parece estar asociado con diferentes navegadores o complementos del foro. Y le sucede a algunas personas pero no a otras.
Una actualización forzada (Ctrl-F5 en Windows o Cmd-Shift-R en Mac) parece solucionarlo cada vez. Mi suposición es que se trata de un problema de caché con la CDN, pero no estoy seguro. ¿Alguien más está experimentando algo así?
Todos y cada uno de estos errores se deben a que la solicitud está limitada en su frecuencia. Discourse no puede ejecutarse si sus activos no se cargan.
Deberías comprobar:
¿Se está pasando la dirección IP correcta del usuario final al backend?
¿Está la limitación de frecuencia configurada correctamente? (en general)
¿Qué entidad está realizando la limitación de frecuencia aquí?
Para este servidor en cuestión, no hay un proxy inverso que oculte todo el tráfico de usuarios detrás de una sola IP. Los límites de tasa establecidos dentro de Discourse son los predeterminados.
¿Supongo que la CDN podría estar haciendo algún tipo de proxy? ¿Hay alguna forma recomendada de confirmar que las IPs de los usuarios finales se pasan al backend? No veo nada sobre demasiadas solicitudes en los registros.
Este es literalmente el trabajo de la CDN, así que sí, necesitas asegurarte de que la IP correcta del usuario final se mantenga a través de la cadena de solicitudes.
Supongo que no has hecho eso, y que todas las solicitudes de la CDN se están contando contra el límite de tasa de solicitudes de los POP de la CDN en lugar de los usuarios finales.
Puedes ver que la CDN está devolviendo el 429 aquí, pero necesitarás investigar tu configuración específica para determinar quién está tomando la decisión de devolver ese error (es decir, el proxy o el servidor real).
KeyCDN es la CDN en cuestión. Intenté habilitar OriginShield y agregar un template.yml (al estilo de cloudflare.template.yml) a mi app.yml, pero todavía estaba recibiendo 429s.
En lugar de seguir perdiendo el tiempo con eso, he cambiado a BunnyCDN y eso parece estar funcionando mejor.
He puesto el archivo de plantilla a continuación en caso de que ayude a alguien más.
keycdn.template.yml
run:
- file:
path: /tmp/add-keycdn-ips
chmod: +x
contents: |
#!/bin/bash -e
# Add list of keycdn ips
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
# Make into nginx commands and escape for inclusion into sed append command
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")
# Insert into discourse.conf
sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header X-Forwarded-For;\nreal_ip_recursive on;" /etc/nginx/conf.d/discourse.conf
# Clean up
rm /tmp/keycdn-ips
- exec: "/tmp/add-keycdn-ips"
- exec: "rm /tmp/add-keycdn-ips"