रीडायरेक्ट वाइल्डकार्ड सबडोमेन को https (nginx)


20

मुझे एक वाइल्डकार्ड ssl प्रमाणीकरण मिला है और मैं सभी गैर-एसएसएल ट्रैफ़िक को ssl पर पुनर्निर्देशित करना चाह रहा हूं। वर्तमान में मैं गैर-उप-डोमेन url को पुनर्निर्देशित करने के लिए निम्नलिखित का उपयोग कर रहा हूं जो ठीक काम कर रहा है।

server {
listen      80;
server_name mydomain.com;

#Rewrite all nonssl requests to ssl.
rewrite     ^ https://$server_name$request_uri? permanent;
}

जब मैं * .mydomain.com के लिए एक ही काम करता हूं तो यह तार्किक रूप से पुनर्निर्देश करता है

https://%2A.mydomain.com/

आप अपने सबडोमेन को उनके https समतुल्य कैसे पुनर्निर्देशित करते हैं?


2
$ Server_name के बजाय, $ host क्यों नहीं?
cjc

जवाबों:


47

बस इतना ही...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$host$request_uri;
}

2
थोड़ा और स्पष्टीकरण यह एक बेहतर उत्तर दे सकता है।
डेव एम

3
@ dave-m, कि समझाने की जरूरत है? $hostचर? $request_uri?
कैडमी

यह काम नहीं करता है, अभी भी https: //%2A.handy.travel/ मिला
डेमन युआन

2

एनजीआईएनएक्स आधिकारिक दस्तावेज पुनर्निर्देशन को प्रभावित करने के लिए पुनर्लेखन निर्देश का उपयोग करने के बजाय रिटर्न निर्देश का उपयोग करने के लिए प्रोत्साहित करता है। ऐसा इसलिए है, क्योंकि पुनर्लेखन का अनुरोध उस सर्वर के लिए नहीं है, लेकिन यह अभी भी उस सर्वर ब्लॉक में संसाधित होता है। इसलिए पुनर्निर्देशन सही ढंग से बदले निर्देश के साथ किया जाता है, क्योंकि सभी प्रसंस्करण रोक दिए जाते हैं और तुरंत एक प्रतिक्रिया भेजी जाती है। NGINX यहां पुनर्निर्देशन के लिए फिर से लिखता है: http://nginx.org/en/docs/http/converting_rewrite_rules.html

रिटर्न निर्देश के लिए सिंटैक्स है: रिटर्न कोड URL; जैसा कि आप मूल रूप से एक स्थायी पुनर्लेखन कर रहे थे, इसलिए तदनुसार 301 का उपयोग आप कोड के साथ प्रतिक्रिया करने के लिए कर सकते हैं, यह दर्शाता है कि यह एक स्थायी पुनर्निर्देशन है। Url सेक्शन में आपका https एड्रेस पास हो जाएगा। संदर्भ: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

तो आपका सही कॉन्फ़िगरेशन होगा

server {
listen      80;
server_name *.mydomain.com;

#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}

यह संभवतः आपको वाइल्डकार्ड सर्वर ब्लॉक के साथ आपके ssl डोमेन पर सही ढंग से रीडायरेक्ट करने देगा। आप नीचे दिए गए सुझाव के अनुसार अंडरस्कोर जेनेरिक सर्वर नाम '_' या $ होस्ट भी आज़मा सकते हैं। हमें बताऐ!


returnआमतौर पर उपयोग करना बेहतर होता है, सुझाया गया कॉन्फ़िगरेशन सही नहीं है क्योंकि यह अभी भी पुनर्निर्देशन के लिए $ server_name का उपयोग करता है, जो "* .mydomain.com" होगा। उपरोक्त टिप्पणी में @cjc द्वारा सही सुधार पहले ही बता दिया गया था - के $hostबजाय इसका उपयोग किया जाना चाहिए $server_name
मैक्सिम डूनिन

हाँ मान गया। आह लगता है कि मेरा ध्यान एक सनक है '!
अपूर्वा सुकांत

उपरोक्त दोष के बदले में, मैं आपको अपने ssl कॉन्फ़िगरेशन के साथ एक टिप की पेशकश करने की अनुमति देता हूं जिससे प्रदर्शन में काफी सुधार होना चाहिए। SSL सेट अप करने का सबसे प्रभावी तरीका यदि आप वाइल्डकार्ड प्रमाणपत्र का उपयोग कर रहे हैं, तो 'ssl स्टेपलिंग' सेट करना है। यह आपको सभी उप डोमेन के लिए अपने डिफ़ॉल्ट सर्वर पर एक बार SSL सेट करने की अनुमति देता है, और प्रत्येक उप डोमेन के लिए अलग ssl प्रमाणीकरण बचाता है। ssl_stapling पर; रिवाल्वर 8.8.8.8; ssl_stapling_file /ssl_keys/example.com_staple; ssl_stapling_verify पर; संदर्भ- calomel.org/nginx.html
अपूर्वा

2
होना चाहिएreturn 301 https://$host$request_uri;
scarver2

मैं return 301 https://$server_name$request_uri;पोर्ट ४४३ पर https का उपयोग करने के लिए उन्हें to०, AND०1० और 1१ for१ बंदरगाहों के लिए सुन रहा हूं । समस्या यह है कि पुनर्निर्देशित यूआरएल में अभी भी मूल पोर्ट नंबर है। 80 एक समस्या नहीं है, लेकिन 8080 के रूप में बाहर आता हैhttps://example.com:8080
A.Grandt

-1

कुछ इस तरह की कोशिश करो:

server {
  listen 80;
  server_name ~^(.*)\.mydomain\.com$;
  set $servername $1;
  rewrite ^(.*)$ https://$servername.mydomain.com/$1;
}

पकड़ वाइल्डकार्ड सर्वर को परिभाषित करने और उसके नाम के आधार पर पुनर्निर्देशित करना है।


ओवरसीज रेवीज समूह।
Kzqai
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.