2011-12-08 8 views
10

को छोड़कर मैं वर्तमान में http पर अपनी साइट चला रहा हूं, और इसे https पर ले जाना चाहता हूं जैसे nginx स्वचालित रूप से पुनर्निर्देशन को संभालता है। ऐसा करने के लिए यह काफी छोटा है, मुझे लगता है।nginx में सभी http से https को रीडायरेक्ट करें, एक फ़ाइल

हालांकि, एक फ़ाइल है (कई कारणों से) अन्य साइटों से हॉट-लिंक्ड है, जिनमें से कुछ http से अधिक हैं और कुछ https से अधिक हैं। मैं यह सुनिश्चित करना चाहता हूं कि फ़ाइल http और https दोनों पर उपलब्ध है, ताकि यह सुनिश्चित किया जा सके कि ब्राउज़र "मिश्रित सामग्री" संवाद से शिकायत नहीं करते हैं।

http (s): [some_sha1_hash] //mydomain.com/scripts/ /file.js

तो, nginx नियम कहना चाहिए: फ़ाइल का रास्ता कुछ इस तरह दिखता "अनुरोध करते हैं पहले से ही https से अधिक है, सब कुछ मीठा है, और बस इसे रिवर्स-प्रॉक्सी करें। अन्यथा, सभी अनुरोधों को http से https पर रीडायरेक्ट करें, सिवाय इसके कि अगर यह एक फ़ाइल अनुरोध है, तो इस मामले में ऐसा कोई भी http-> https रीडायरेक्ट नहीं करता है। "

क्या कोई मुझे बता सकता है कि ऐसी कॉन्फ़िगरेशन के बारे में जानने के लिए कहां देखना है, या कॉन्फ़िगरेशन के साथ मेरी सहायता करें? अग्रिम में धन्यवाद। (मैं माफी चाहता हूँ, लेकिन मैं nginx विन्यास में पर्याप्त अभी तक कुशल नहीं हूँ।)

उत्तर

-2
server { 
    listen   80; 
    server_name my.domain.com; 
    rewrite  ^https://$server_name$request_uri? permanent; 
} 

server { 
    listen   443; 
    server_name my.domain.com; 

    ssl   on; 

    [....] 
} 

ऊपर ज्यादातर चाल अगर im गलत नहीं

+3

ऐसा नहीं लगता है कि यह उस फ़ाइल को बाहर कर देगा जिसे मैं बाहर करना चाहता हूं। या मैं गलत हूँ? समाधान के लिए –

+0

+1 जिसमें 'स्थान' ब्लॉक में तर्क शामिल नहीं है। – orokusaki

3

इस प्रयास करें करना चाहिए:

server { 
    listen 80; ssl off; 
    listen 443 ssl; 
    server_name example.com; 

    # <ssl settings> 
    # ... other settings 

    location = /scripts/[some_sha1_hash]/file.js { 
    # Empty block catches the match but does nothing with it 
    } 

    location/{ 
    if ($scheme = "http") { 
     rewrite^https://$http_host$request_uri? permanent; 
    } 

    # ... other settings 
    } 
} 
5

यह मैं क्या किया है, जो काम करता है:

server { 
    listen 80; 
    server_name example.com; 
    charset  utf-8; 
    access_log /var/www/path/logs/nginx_access.log; 
    error_log /var/www/path/logs/nginx_error.log; 

    location /path/to/script.js { 
      # serve the file here 
    } 
    location/{ 
     return 301 https://example.com$request_uri; 
    } 
} 

यह एक केवल http अनुरोधों को प्रबंधित और कहा फ़ाइल में कार्य करता है - अन्यथा लाल https पर अप्रत्यक्ष। अपने एसएसएल सर्वर ब्लॉक को परिभाषित करें, जो सभी https अनुरोधों को पूरा करेगा।

server { 
    listen   443; 
    server_name example.com; 

    ssl   on; 

    # rest of the config 
} 

इस तरह अपनी स्क्रिप्ट फ़ाइल https के साथ ही http पर उपलब्ध हो जाएगा।