सर्वोत्तम अभ्यास: अलग serverw / हार्डकोडserver_name
नगीनक्स के साथ सबसे अच्छा अभ्यास serverइस तरह एक रीडायरेक्ट के लिए एक अलग का उपयोग करना है ( serverअपने मुख्य कॉन्फ़िगरेशन के साथ साझा नहीं किया गया है), सब कुछ हार्डकोड करने के लिए, और बिल्कुल भी नियमित अभिव्यक्ति का उपयोग न करें।
यदि आप HTTPS का उपयोग कर रहे हैं तो डोमेन को हार्डकोड करना भी आवश्यक हो सकता है, क्योंकि आपको यह जानना होगा कि आप कौन से प्रमाणपत्र प्रदान कर रहे हैं।
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name www.example.org;
return 301 $scheme://example.org$request_uri;
}
server {
server_name example.com example.org;
# real configuration goes here
}
के भीतर नियमित भाव का उपयोग करना server_name
यदि आपके पास कई साइटें हैं, और सबसे अंतिम प्रदर्शन की परवाह नहीं करते हैं, लेकिन चाहते हैं कि उनमें से हर एक www.उपसर्ग के संबंध में समान नीति रखे, तो आप नियमित अभिव्यक्तियों का उपयोग कर सकते हैं। एक अलग का उपयोग करने का सबसे अच्छा अभ्यास serverअभी भी खड़ा होगा।
ध्यान दें कि यदि आप https का उपयोग करते हैं तो यह समाधान मुश्किल हो जाता है, क्योंकि आपके पास अपने सभी डोमेन नामों को कवर करने के लिए एक एकल प्रमाणपत्र होना चाहिए यदि आप चाहते हैं कि यह ठीक से काम करे।
सभी साइटों के लिए एक समर्पित एकल में गैर- wwwसे wwww / regex server:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
wwwसभी साइटों के लिए wwwएक समर्पित एकल में गैर- w / regex के serverलिए:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
wwwwwwसमर्पित में गैर- w / regex कोserverकेवल कुछ साइटों के लिए :
केवल दो-दो डोमेन को कवर करने के लिए रेगेक्स को प्रतिबंधित करना आवश्यक हो सकता है, फिर आप केवल मैच के लिए कुछ इस तरह का उपयोग कर सकते हैं www.example.org; www.example.comऔर www.subdomain.example.net:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
नियमित एक्सप्रेशन w / nginx का परीक्षण करना
आप परीक्षण कर सकते हैं कि रेगेक्स pcretestआपके सिस्टम पर अपेक्षित रूप से काम करता है, जो कि ठीक उसी pcreलाइब्रेरी है जिसे आपका नग्नेक्स नियमित अभिव्यक्ति के लिए उपयोग कर रहा होगा:
% pcretest
PCRE version 8.35 2014-04-04
re> #^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$#
data> test
No match
data> www.example.org
0: www.example.org
1: example.org
data> www.test.example.org
No match
data> www.example.com
0: www.example.com
1: example.com
data> www.subdomain.example.net
0: www.subdomain.example.net
1: subdomain.example.net
data> subdomain.example.net
No match
data> www.subdomain.example.net.
No match
data>
ध्यान दें कि आपको डॉटिंग या केस के बारे में चिंता करने की कोई आवश्यकता नहीं है, क्योंकि nginx सर्वर नाम regex के अनुसार nginx पहले से ही इसका ख्याल रखता है, जब "Host" हेडर में ट्रेलिंग डॉट होता है ।
ifमौजूदा server/ HTTPS के भीतर छिड़के :
इस अंतिम समाधान को आमतौर पर सबसे अच्छा अभ्यास नहीं माना जाता है, हालांकि, यह अभी भी काम करता है और काम करता है।
वास्तव में, यदि आप HTTPS का उपयोग कर रहे हैं, तो यह अंतिम समाधान बनाए रखने में आसान हो सकता है, क्योंकि आपको अलग-अलग serverपरिभाषाओं के बीच ssl निर्देशों का एक पूरा गुच्छा कॉपी-पेस्ट नहीं करना होगा , और इसके बजाय केवल स्निपेट को ही जगह दे सकता है आवश्यक सर्वर, इसे डीबग करना और अपनी साइट्स को बनाए रखना आसान है।
गैर wwwसे www:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
wwwगैर- www:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
हार्डकोडिंग एक एकल पसंदीदा डोमेन
यदि आप थोड़ा और अधिक प्रदर्शन चाहते हैं, साथ ही कई डोमेन के बीच एक एकल serverका उपयोग कर सकते हैं, तो यह अभी भी एक ही पसंदीदा डोमेन को स्पष्ट रूप से हार्डकोड करने के लिए समझ में आ सकता है:
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
संदर्भ:
Dashboard > Settings > General Settingsपड़ता है कि यदि आप एक वर्डप्रेस वेबसाइट के साथ काम कर रहे हैं, तो यह जांचें और सुनिश्चित करें किwwwवर्डप्रेस एड्रेस / साइट एड्रेस साइट में कोई भी नहीं है। कोई फर्क नहीं पड़ता कि आप अपने nginx को कैसे कॉन्फ़िगर करते हैं, यदि आपके पास इन URL में www है तो यह उस में www के साथ पुनर्निर्देशित हो जाएगा।