أرى أحيانًا منتديات أديرها تعرض شاشة ترحيبية لا تتوقف عن التحميل أبدًا.
يبدو أن هذا يحدث بعد إعادة البناء أو إذا لم أزر المنتدى لفترة طويلة. لا يبدو أنه مرتبط بمتصفحات مختلفة أو إضافات المنتدى. ويحدث هذا لبعض الأشخاص وليس لآخرين.
يبدو أن التحديث القوي (Ctrl-F5 على Windows أو Cmd-Shift-R على Mac) يصلح الأمر في كل مرة. تخميني هو أن هذه مشكلة تخزين مؤقت مع شبكة توصيل المحتوى (CDN)، لكنني لست متأكدًا. هل يواجه أي شخص آخر شيئًا كهذا؟
بالنسبة لهذا الخادم المعني، لا يوجد وكيل عكسي يخفي كل حركة مرور المستخدم خلف عنوان IP واحد. حدود المعدل المحددة داخل Discourse هي الحدود الافتراضية.
أفترض أن شبكة توصيل المحتوى (CDN) يمكن أن تقوم ببعض الوكالة؟ هل هناك طريقة موصى بها لتأكيد تمرير عناوين IP للمستخدم النهائي إلى الواجهة الخلفية؟ لا أرى أي شيء عن كثرة الطلبات في السجلات.
هذه حرفياً وظيفة شبكة توصيل المحتوى (CDN)، لذا نعم، تحتاج إلى التأكد من الاحتفاظ بعنوان IP الصحيح للمستخدم النهائي عبر سلسلة الطلبات.
أفترض أنك لم تفعل ذلك، وأن جميع الطلبات من شبكة توصيل المحتوى (CDN) يتم حسابها مقابل حد معدل الطلبات لنقاط تواجد شبكة توصيل المحتوى (CDN POPs) بدلاً من المستخدمين النهائيين.
يمكنك رؤية أن شبكة توصيل المحتوى (CDN) تُرجع 429 هنا، ولكن ستحتاج إلى التحقيق في إعداداتك المحددة لتحديد من يتخذ قرار إرجاع هذا الخطأ (أي الوكيل أو الخادم الحقيقي).
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
# 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"