لقد شاهدتُ بضع دروس تشرح كيفية القيام بذلك ولكن بطرق مختلفة لم تُساعدني. هل توجد طريقة لإنشاء إعداد استضافة افتراضية في Apache لـ Discourse بحيث يعيد توجيه نطاق معين إلى البرنامج تمامًا مثل إضافة مواقع ويب أخرى ونطاقاتها الخاصة؟
شكرًا لك.
لقد شاهدتُ بضع دروس تشرح كيفية القيام بذلك ولكن بطرق مختلفة لم تُساعدني. هل توجد طريقة لإنشاء إعداد استضافة افتراضية في Apache لـ Discourse بحيث يعيد توجيه نطاق معين إلى البرنامج تمامًا مثل إضافة مواقع ويب أخرى ونطاقاتها الخاصة؟
شكرًا لك.
نعم. تشرح تلك الدروس كيفية ذلك.
أو، إذا كنت تقصد ما إذا كان بإمكانك تشغيل discourse دون استخدام Docker وبدون Apache كوكيل عكسي، فإن الإجابة هي لا.
بمبلغ 5 دولارات شهريًا، يمكنك تجنب هذا الإزعاج.
شكرًا لك على الرد.
أنا أشغله من خادم VPS. لقد قمت بتثبيت Apache، لكنني لست خبيرًا جدًا في المواقع الإلكترونية. أنا أطلع على هذا الموضوع: Run other websites on the same machine as Discourse
لكن يبدو من خلاله أنني مضطر لاستخدام Nginx بسبب ملفات التكوين. لكن سؤالي هو: هل يمكنني فعل الشيء نفسه باستخدام Apache؟
نعم، كنت أنظر إلى ذلك أيضًا. لقد غطى الأمر لـ CentOS وليس Ubuntu، وبعض الأجزاء غير واضحة بالنسبة لي.
إذا لم تكن معتادًا على هذا (ولا ترغب في أن تصبح كذلك)، فإنني أنصحك بشدة بالتخلي عن Apache وتشغيل Discourse فقط على VPS. إذا كنت بحاجة إلى تشغيل المزيد من الأشياء، فاحصل على VPS لأشياء Apache وآخر لـ Discourse.
لذا قمت بالتحويل إلى Nginx والآن يعمل كل شيء. أعتقد أن إعدادات SSL صحيحة، لكن على متصفح Chrome، تظهر لي الرسالة “اتصالك بهذا الموقع ليس آمنًا بالكامل”. تفعيل HTTPs إجباري مفعل.
تم إعداد شهادة SSL مع خدمة nginx داخل الحاوية. إذا كانت الحاوية معرضة للإنترنت وقمت بالوصول إليها مباشرة من المتصفح (التثبيت الافتراضي لـ Discourse)، فستحصل على SSL.
لكن إذا وضعت وكيلًا عكسيًا أمامه (سواء كان Apache أو Nginx أو خدمة طرف ثالث مثل Cloudflare)، فستحتاج إلى ضمان أن تكون الاتصال بين المتصفح والوكيل العكسي آمنًا.
لذلك، في حالتك، ستحتاج إلى إنشاء شهادات لوكيل nginx العكسي (لا أعتقد أنك بحاجة إلى إضافة قوالب SSL من Discourse لأن الحاوية ليست معرضة مباشرة للإنترنت؛ يمكنك ذلك، لكن لا حاجة لذلك).
يمكنك الاطلاع على كيفية القيام بذلك باستخدام Let’s Encrypt (مجانية، وهي نفس المستخدمة في التثبيت الافتراضي لـ Discourse، ولكن في هذه الحالة لـ nginx خارج الحاوية).
TL;DR يحتاج nginx الذي يعمل كوكيل عكسي إلى SSL. أما nginx الموجود داخل الحاوية فلا يحتاج إلى SSL (بافتراض أنك تصل إليه من نفس الجهاز).
لضمان الأمان بين المتصفح وعكس الوكيل، هل أحتاج إلى تكوين SSL في ملف إعدادات nginx؟
شكرًا لك
هذا هو ملف الإعدادات الخاص بي هنا، ما الذي أحتاج إلى إضافته؟
server {
listen 80; listen [::]:80;
server_name a1rp.xyz; # ← قم بتغيير هذا
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name a1rp.xyz; # ← قم بتغيير هذا
ssl on;
ssl_certificate /var/discourse/shared/standalone/ssl/a1rp.xyz.cer;
ssl_certificate_key /var/discourse/shared/standalone/ssl/a1rp.xyz.key;
ssl_dhparam /var/discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # تم رفعه من الافتراضي 3m
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
تأكد من:
templates (في app.yml). إذا كنت تستخدم letsencrypt، فستكون لديك قوالبان:# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/web.socketed.template.yml"
# - "80:80" # http
# - "443:443" # https
(أو يمكنك كشف منافذ أخرى مثل 8080:80 و 8443:443، وبدلاً من استخدام socket في الخطوة التالية، يمكنك إعادة التوجيه إلى upstream يشير إلى localhost:80 و/أو localhost:443)
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
أعتقد أنك تحتاج إلى إضافة : في نهاية الـ socket:
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
/var/discourse/shared/standalone/ssl/. هل تملكها؟ أفترض أنك تملك بالفعل النطاق a1rp.xyz وقد قرأت عن كيفية إنشاء شهادات SSL في موقع letsencrypt. كما يرجى الانتباه إلى أن Discourse يتولى تجديد الشهادات تلقائيًا في التثبيت الافتراضي، لكن في حالتك ستضطر إلى إدارة التجديد بنفسك (على سبيل المثال، باستخدام مهمة مجدولة cron)، وإلا فسوف تنتهي صلاحية شهاداتك بعد 3 أشهر.انظر:
نعم، لدي كل ما ذكرته في تكوين التطبيق (بما في ذلك التصحيح لبعض الأمور). أما بالنسبة لـ ‘:’، فلا أعتقد أنه يغير شيئًا. كانت هناك مشاركة تشير إلى أنه لا يجب وجود ‘:’ هناك أيضًا. ملفات SSL موجودة لدي بالفعل.
لذا قمت بإصلاح المشكلة. ذكر شخص ما أن أيقونة الموقع تظهر في HTTP، وهو ما تسبب في ظهور الخطأ. قمت برفع شيء آخر ثم حذفته، والآن الموقع يعمل بالكامل عبر HTTPS ![]()