تشغيل مضيفين خلف haproxy يفشل مع أخطاء 404 عشوائية

اليوم جربت إضافة خادم ثانٍ لاستضافة إحدى نسخ discourse الخاصة بنا. تم تكوين الحاوية لاستخدام خوادم Redis وPostgres والتخزين الخارجية - فهي مخصصة لتطبيق الويب فقط. حتى الآن، كنا ندير مواقع الخادم الواحد خلف HAProxy دون مشاكل. عند التشغيل بخادمين خلف HAProxy، نلاحظ العديد من أخطاء 404 من nginx لملفات JavaScript. إزالة أي من الخادمين من HAProxy توقف المشكلة. تبدو عناوين URL للملفات التي تظهر فيها أخطاء 404 متطابقة، لذا فأنا حائر حول سبب عدم تقديمها من قبل أي من الخادمين.

لا توجد أي تعديلات في إعدادات المطور. نحن نعمل بالإصدار المستقر 2.4.3.

إذا كنت تشغّل أكثر من حاوية ويب، فستحتاج إلى شيء يضمن أن كلاهما لديه وصول إلى الملفات الثابتة.

أبسط مسار هو استخدام التخزين الكائني للملفات المرفوعة (نسخ S3)

@Falco مرحبًا، شكرًا على الرد. تستخدم الخادمان تخزينًا مشتركًا عبر NFS. في تكوين الحاوية الخاص بي، لدي ما يلي:

volumes:
  - volume:
      host: {{ discourse_nas_path }}/data
      guest: /shared
  - volume:
      host: {{ discourse_nas_path }}/logs
      guest: /var/log

ومع ذلك، تقوم كل حاوية بتخزين نسخها الخاصة من الأصول المُنشأة بواسطة خطوة assets:precompile. هل من الضروري مشاركة الأصول المُنسقة مسبقًا؟

إلى جانب إضافة وإزالة الخوادم الخلفية في Haproxy، ما الإجراءات التي اتخذتها لاختبار ذلك؟

هل يقوم تكوين Haproxy الخاص بك بتوزيع الطلبات عشوائيًا على الخوادم الخلفية أم يضمن التوجيه بناءً على الارتباط (affinity)؟ هل يتم تسجيل خطأ 404 بواسطة Haproxy؟ أم بواسطة nginx؟ هل الخادم الخاطئ هو الأول أم الثاني؟ هل يتطلب موقعك تسجيل الدخول؟ هل يمكنك تكرار الأخطاء عند الاتصال بـ nginx مباشرةً من خلف خادم الوكيل؟ هل الملفات المطلوبة موجودة فعليًا على القرص؟ هل المشكلة تشمل جميع ملفات JS أم فقط ملفات محددة؟

شكرًا للتلميح من @Falco، جربت إضافة ما يلي إلى إعدادات الحاوية الخاصة بي، والآن تعمل الأمور كما هو متوقع:

  - volume:
      host: {{ discourse_nas_path }}/assets
      guest: /var/www/discourse/public/assets