يحدث خطأ عند بناء Discourse عبر HTTP

  1. اكتمل تكوين النطاق
  2. تم إنشاء مثيل AWS EC2
  3. تم إصدار الشهادة باستخدام ACM
  4. تم تكوين 443 وربط الشهادة عبر ALB
  5. يقوم ALB بتوجيه حركة مرور النطاق إلى مثيل EC2 على المنفذ 80

قبل بناء Discourse، قمت بتعديل ملف app.yml لتكوين اتصالات HTTP:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## قم بإلغاء التعليق على السطر التالي لتمكين مستمع IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## قم بإلغاء التعليق على هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## ما هي منافذ TCP/IP التي يجب أن يكشف عنها هذا الحاوية؟
## إذا كنت تريد أن تشارك Discourse منفذًا مع خادم ويب آخر مثل Apache أو nginx،
## انظر https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
  - "80:80"   # http
 #- "443:443" # https

بعد إجراء التغييرات، قمت ببناء Discourse وتحققت من التكوين، لكن nginx يستمر في طلب مفتاح SSL مع الخطأ التالي:

[emerg] 7416#7416: لا يمكن تحميل الشهادة "/shared/ssl/discourse.xxxxxxx.com.cer": فشل PEM_read_bio_X509_AUX() (SSL: error:0480006C:PEM routines::no start line:Expecting: TRUSTED CERTIFICATE)

هل هناك طريقة لمنع nginx من محاولة تحميل المفتاح أو جعل nginx يعمل بشكل صحيح عبر HTTP؟

يحدث الخطأ لأن Nginx لا يزال يبحث عن شهادة SSL، ولكن ALB الخاص بك يتعامل مع SSL. إليك كيفية إصلاح ذلك:

  1. تحقق من ملف app.yml الخاص بك: يبدو أنك قمت بالفعل بتعطيل قوالب SSL، لذا يمكنك تخطي هذه الخطوة.

  2. إعادة بناء Discourse: قم بتشغيل ./launcher rebuild app لتطبيق التغييرات.

  3. تحقق من إعدادات Nginx: داخل الحاوية، انظر إلى تكوين Nginx وتأكد من عدم وجود أي أسطر SSL (ssl_certificate، ssl_certificate_key). إذا وجدت أيًا منها، فقم بإزالتها وأعد تشغيل Nginx باستخدام sv restart nginx.

  4. تحقق من إعداد ALB الخاص بك: تأكد من أن ALB الخاص بك ينهي SSL على المنفذ 443 ويعيد توجيه HTTP (المنفذ 80) إلى مثيل EC2 الخاص بك.

سيؤدي ذلك إلى إيقاف Nginx عن البحث عن شهادة SSL، ويجب أن يعمل كل شيء بشكل جيد عبر HTTP!

شكرا لك. لقد قمت بحل المشكلة بناءً على المحتوى ذي الصلة والملاحظات الأخرى.