سؤال

لدي خادم Nginx/Gunicorn/Django منتشر على جهاز Centos 6 مع منفذ SSL (443) فقط المرئي للعالم الخارجي.لذلك ما لم يتم استدعاء الخادم باستخدام ملف https://, ، فلن تحصل على أي رد.إذا اتصلت به مع http://domain:443, ، ستتلقى فقط 400 رسالة طلب غير صالح.المنفذ 443 هو الطريقة الوحيدة للوصول إلى الخادم.

أنا أستخدم Nginx لخدمة ملفاتي الثابتة (CSS، وما إلى ذلك) ويتم التعامل مع جميع الطلبات الأخرى بواسطة Gunicorn، الذي يقوم بتشغيل Django في http://localhost:8000.لذلك، انتقل إلى https://domain.com يعمل بشكل جيد، كما هو الحال مع الروابط الموجودة داخل موقع الإدارة، ولكن عندما أقوم بإرسال نموذج في إدارة Django، يتم فقدان https في عملية إعادة التوجيه ويتم إرسالي إلى http://domain.com/request_uri الذي فشل في الوصول إلى الخادم.يعمل إجراء POST بشكل صحيح ويتم تحديث قاعدة البيانات.

ملف التكوين الخاص بي مدرج أدناه.الموقع location / القسم هو المكان الذي أشعر أنه يجب العثور على الحل.ولكن لا يبدو أن proxy_set_header X-* التوجيهات لها أي تأثير.هل أفتقد وحدة نمطية أو شيء من هذا؟أنا أقوم بتشغيل nginx/1.0.15.

كل ما يمكنني العثور عليه على الإنترنت يشير إلى X-Forwarded-Protocol https كما لو كان ينبغي أن تفعل شيئا، ولكن لم أحصل على أي تغيير.أنا أيضًا غير قادر على تشغيل تصحيح الأخطاء على الخادم البعيد، على الرغم من أن خطوتي التالية قد تكون التجميع محليًا مع تمكين تصحيح الأخطاء للحصول على المزيد من الأدلة.الملاذ الأخير هو الكشف عن المنفذ 80 وإعادة توجيه كل شيء...ولكن هذا يتطلب بعض الأوراق.

[http://pastebin.com/Rcg3p6vQ](وسائط تكوين nginx الخاصة بي)

server {
    listen       443 ssl;

    ssl on;
    ssl_certificate /path/to/cert.crt;
    ssl_certificate_key /path/to/key.key;
    ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    server_name  example.com;

    root /home/gunicorn/project/app;
    access_log /home/gunicorn/logs/access.log;
    error_log /home/gunicorn/logs/error.log debug;

    location /static/ {
        autoindex on;
        root /home/gunicorn;
    }

    location / {
        proxy_pass http://localhost:8000/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Protocol https; 
    }

}
هل كانت مفيدة؟

المحلول

لم يتح لي الوقت حتى الآن لفهم ما يفعله هذان الخطان بالضبط، لكن إزالتهما حلت مشاكلي:

    proxy_redirect off;
    proxy_set_header Host $host;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top