2016-04-08 11 views
6

सभी पुन: निर्देशित मैं निम्नलिखित http config है:Nginx: लेकिन एक

server { 
    listen    80; 
    server_name   example.com; 

    # Necessary for Let's Encrypt Domain Name ownership validation 
    location /.well-known/acme-challenge/ { 
    root /home/vagrant/.well-known/acme-challenge/; 
    } 

    return 301 https://$host$request_uri; 
} 

मैं http://example.com/.well-known/acme-challenge/filename चाहते /home/vagrant/.well-known/acme-challenge/filename सेवा करने के लिए है, जबकि हर दूसरे http अनुरोध https पर रीडायरेक्ट कर दिया जाना चाहिए होगा।

मैंने सोचा कि Nginx उनके आदेश में नियमों को संसाधित करेगा, अगर मैचों का उपयोग करता है, अन्यथा जारी रहता है। लेकिन स्पष्ट रूप से नहीं। मैं जो चाहता हूं उसे कैसे प्राप्त कर सकता हूं?

+1

कि हो नहीं करना चाहिए' जड़/घर/आवारा:

कुछ संघर्ष के बाद, यहाँ मेरे कार्य config है? – equaeghe

उत्तर

10

आप इस रीडायरेक्ट बढ़ना चाहिए "/" ब्लॉक में होना:

location/{ 
    return 301 https://$host$request_uri; 
} 

वे क्रम में प्रक्रिया करते हैं, लेकिन तुम्हारा बाहर किसी भी स्थान ब्लॉक के है, इसलिए संभावना पूर्वता ले जा रहा है।

1

nginx के अनुसार, एक स्थान ब्लॉक में root xxx डालने pitfall है। ; `

server { 
    listen    80; 
    server_name   example.com; 
    root /vagrant/www/current/public; 

    # Necessary for Let's Encrypt Domain Name ownership validation 
    location /.well-known/acme-challenge/ { 
    try_files $uri /dev/null =404; 
    } 
    location/{ 
    return 301 https://$host$request_uri; 
    } 
} 
+0

यह वह कॉन्फ़िगरेशन है जो मेरे लिए भी काम करता है। चलो एन्क्रिप्ट चुनौती को पूरा करने का तरीका जानने का प्रयास कर रहे हैं लेकिन फिर भी बाकी सब कुछ एनजीआईएन पर https पर रीडायरेक्ट करें। – Joey

+1

डाउनवोट के लिए औचित्य: गड़बड़ी हर ब्लॉक के लिए एक ही रूट दोहराना है। इस प्रश्न के लिए, यह एक स्थान ब्लॉक में रूट डालने के लिए पूरी तरह उपयुक्त (और सुरुचिपूर्ण!) है। आपका समाधान चीजों को अनावश्यक रूप से जटिल बना रहा है। – equaeghe