مشاكل مع فرض HTTPS والوكيل والدعوات

مثال Discourse الخاص بي خلف وكيل:

server {
    server_name forum.[...];

    location / {
        proxy_pass http://IP_ADDRESS;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;

    }

    client_max_body_size 10m;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = forum.[...]) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name forum.smbcn.org;

    listen 80;
    return 404; # managed by Certbot

}

مما يؤدي إلى الخادم الذي تم تثبيت Discourse عليه (تثبيت Docker قياسي):

server {
        listen 80; listen [::]:80;
        server_name forum.[...];

        client_max_body_size 10m;

        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 $scheme;
                proxy_set_header X-Real-IP $remote_addr;
        }
}

عند إجبار HTTPS، لا يمكن للمستخدمين المدعوين المتابعة إلى التسجيل. تُظهر سجلات المتصفح خطأ 403 (CSRF سيئ)، على الرغم من أن رمز CSRF تم إنشاؤه بنجاح. تعمل الدعوات بشكل جيد عندما لا يتم إجبار HTTPS.

أعتقد أن هناك خطأ في طريقة توجيهي لطلبات HTTPS إلى HTTP، ربما بعض الرؤوس المفقودة؟

إعجاب واحد (1)

يبدو أنني أفتقد شيئًا مهمًا حقًا. عدم القدرة على فرض HTTPS يعني أن الشعار لا يمكن عرضه (وهو أمر غير خطير حاليًا). لقد اكتشفت اليوم أيضًا أنني أحصل على خطأ متعلق بـ CSRF (“ممنوع”) عند محاولة حذف مهمة في Sidekiq. هذا ما وجدته في /var/discourse/shared/standalone/log/rails/unicorn.stderr.log:

WARN – : attack prevented by Rack::Protection::HttpOrigin

أشعر بالعجز تمامًا، وأي مساعدة ستكون ممتنة للغاية.

إعجاب واحد (1)

ربما تحتاج فقط إلى تمكين froce HTTPS على الوكيل الأمامي الخاص بك، وتعطيله على discourse.

@hawm أعتقد أن هذا هو تكويني الحالي.

كيف تقوم بتعيين متغير $scheme؟

3 إعجابات

أنا لا أفعل ذلك، أعتقد أنني أعتمد على القيمة الافتراضية، هل هذا خطأ؟

إذا كنت تستخدم وكيلًا، فقد يحدث خطأ في ذلك. وفقًا لخبرتي، هذا هو السبب الأول للمشكلات التي تصفها. حاول تعيينه على “https” بدلاً من ذلك (ربما تتجاوز المتغير وتضع “https” مباشرة).

إعجابَين (2)

@michaeld نعم! لقد أصبت تمامًا! شكرًا جزيلاً لك!

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.