2012-07-27 18 views
5

मुझे एक सेंटोज़ 6 मशीन पर तैनात एक Nginx/Gunicorn/Django सर्वर मिला है जिसमें केवल बाहरी पोर्ट के लिए दृश्यमान SSL पोर्ट (443) दिखाई देता है। इसलिए जब तक कि https:// के साथ सर्वर को कॉल नहीं किया जाता है, तो आपको कोई प्रतिक्रिया नहीं मिलेगी। यदि आप इसे http://domain:443 के साथ कॉल करते हैं, तो आपको केवल 400 खराब अनुरोध संदेश मिलेगा। पोर्ट 443 सर्वर को हिट करने का एकमात्र तरीका है।Nginx/Django Admin POST https केवल

मैं अपनी स्थिर फाइलों (सीएसएस, आदि) की सेवा के लिए Nginx का उपयोग कर रहा हूं और अन्य सभी अनुरोधों को गनिकोर्न द्वारा नियंत्रित किया जाता है, जो http://localhost:8000 पर Django चला रहा है। तो, 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](My 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; 
    } 

} 

उत्तर

2

समय अभी तक समझने के लिए वास्तव में क्या इन दो पंक्तियों करना पड़ा नहीं है, लेकिन उन्हें अपनी समस्याओं के दूर करने का हल:

proxy_redirect off; 
    proxy_set_header Host $host;