خطأ 403 عند تغيير أي إعدادات بعد تمكين force_https مع الوكيل

مرحباً بالجميع، لدي مشكلة حيث أنه عند تفعيل خيار force_https (بعد التأكد من أن كل شيء يعمل عبر HTTPS)، لا يمكنني:

  • تغيير أي إعدادات،
  • تسجيل الخروج (النقر على تسجيل الخروج لا يفعل شيئاً)،
  • أو تسجيل الدخول (إعادة توجيه SSO تؤدي فقط إلى الصفحة الرئيسية بعد تسجيل الخروج).

ظننت في البداية أنها مجرد حادثة عابرة أو شيء أفسدته، لذا قمت بتدمير التطبيق، وحذف جميع البيانات، ثم قمت بإعادة تهيئة وتشغيل التطبيق من جديد.

مع التطبيق الجديد، عمل كل شيء بشكل ممتاز مرة أخرى؛ تمكنت من الاستعادة من النسخ الاحتياطية، وتكوين جميع الشعارات الخاصة بي، وتعديل إعدادات مختلفة (تغيير إعدادات إشعارات البريد الإلكتروني، وتعديل العنوان، وتخصيص CSS للسمة، وما إلى ذلك)، ولم تكن هناك أخطاء في SSL، كما تم تحميل صور العلامة التجارية بنجاح.

ومع ذلك، بمجرد تفعيل خيار force_https مرة أخرى، بدأت في الحصول على أخطاء 403 مرة أخرى.

في هذه المرة، دخلت إلى الحاوية وقمت بتعطيل خيار force_https عبر واجهة سطر الأوامر (CLI) باستخدام:

/var/discourse/launcher enter app
rails c
SiteSetting.force_https = false

بمجرد تعطيل الخيار، عاد كل شيء في الموقع للعمل بشكل طبيعي.

حاولت البحث في السجلات (site_url.com/logs)، لكن لم أجد فيها سوى ما يلي:

Error: Forbidden
Url: https://site_url.com/assets/ember_jquery-1d5617356dd43f27b8adbf60ccb854a1f5992b9b9f9e51e32ea7287fc9eeb25b.js
Line: 1
Column: 262166
Window Location: https://site_url.com/admin/plugins/chat/discord

وهو سجل يعود إلى وقت سابق كنت فيه أقوم بتغيير بعض الإعدادات الخاصة بإضافة discourse-chat-integration.

لا أعرف ما هي الخطوة التالية، وأقدّر أي اقتراحات قد تقدمونها.

هل تقف خلف أي وكلاء غريبين؟

أقوم بتشغيله على خادم مع تطبيق PHP آخر، لذا أستخدم وكيل Nginx؛ إعدادات Nginx الخاصة بي:

server {
  server_name site_url;
  client_max_body_size 500m;

  location / {
      proxy_pass http://127.0.0.1:8080;
  }

    listen 443 ssl; # تم إدارته بواسطة Certbot
    ssl_certificate /etc/letsencrypt/live/site_url/fullchain.pem; # تم إدارته بواسطة Certbot
    ssl_certificate_key /etc/letsencrypt/live/site_url/privkey.pem; # تم إدارته بواسطة Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # تم إدارته بواسطة Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # تم إدارته بواسطة Certbot

}
server {
    if ($host = site_url) {
        return 301 https://$host$request_uri;
    } # تم إدارته بواسطة Certbot


  listen 80;
  server_name site_url;
    return 404; # تم إدارته بواسطة Certbot
}

أعتقد أنك لا تمرر https بشكل صحيح. ابحث هنا عن الحلول.

نسيت تمامًا تعيين رؤوس الوكيل، فأضفت الرؤوس المفقودة وعمل كل شيء بشكل جيد.

شكرًا لك!

في حال واجه شخص ما هذه المشكلة، فإليك رؤوس تمرير الوكيل التي كنت أفتقدها:

proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;