निगंक्स + एपाचे का उपयोग करके गतिशील उप डोमेन

यह विषय साइट पर गतिशील उप-डोमेन के कार्यान्वयन के बारे में एक और विषय है, जिनमें से इंटरनेट पर कई हैं और हब पर कुछ विषय भी हैं।

समस्या यह है कि यह सवाल हर जगह एक उपडोमेन से एक फ़ोल्डर में पुनर्निर्देशन के दृष्टिकोण से कवर किया गया है, और उपडोमेन की पूरी गतिशीलता यह है कि आपने फ़ोल्डर बनाया - उपडोमेन ने आपके लिए काम किया है।

कभी-कभी एक अन्य समस्या के समाधान की आवश्यकता होती है - उदाहरण के लिए, एक उपयोगकर्ता प्रोफ़ाइल और सभी कार्यक्षमता जो कि इसके साथ एक उपडोमेन से जुड़ी है।

उदाहरण के लिए, हमारे पास एक तैयार साइट है, जिस पर प्रोफाइल इस url पर काम करते हैं: www.example.com/users/username , और सभी प्रकार की अतिरिक्त सुविधाएँ हैं (उदाहरण के लिए, www.example.com/users/username/contact और इससे संबंधित अन्य पृष्ठ यह उपयोगकर्ता)।

और अब हम उपयोगकर्ता से संबंधित सभी चीजों को एक उपडोमेन में स्थानांतरित करना चाहते हैं, उदाहरण के लिए username.example.com , username.example.com/contact , आदि)

इंटरनेट पर मिलने वाले समाधानों ने मुझे 2 कारणों से संतुष्ट नहीं किया:


हमारी साइट में अपाचे के ऊपर (साथ ही कई अन्य) नग्नेक्स हैं, इसलिए मुझे इस गुच्छा (नग्नेक्स + अपाचे) का उपयोग करके खुद को पहिया को फिर से मजबूत करना पड़ा, क्योंकि अब लगभग सभी प्रमुख साइटों में अपाचे के ऊपर प्रॉक्सी नग्नेक्स है)



सामान्य तौर पर, समाधान सरल है - क्योंकि चूंकि साइट www.example.com/users ([a-zA-Z _] +) जैसे लिंक के लिए mod_rewrite के माध्यम से पहले ही ट्यून की जा चुकी है, इसलिए इसे nginx के माध्यम से उप-डोमेन को फिर से लिखने का निर्णय लिया गया था।

एक अतिरिक्त शर्त यह है कि हमारी साइट केवल ww.example.com के रूप में काम करती है, और example.com www पर रीडायरेक्ट करती है।

तदनुसार, यह उप-अवशेषों के पुनर्लेखन के लिए केवल nginx config में एक नियम लिखने के लिए बना हुआ है। यह समाधान निकला नियम - यह सच नहीं है, इसका उपयोग करने की अनुशंसा नहीं की जाती है :
location / { proxy_pass http://11.22.33.44:8080; proxy_redirect http://www.example.com:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; #     www set $uid "www"; #  uid   if ($host ~* "^(([a-z0-9\-]+)\.example\.com)$") { set $uid $2; } #     uid  www,  www    if ($uid !~ "^(www)$") { rewrite ^(.*)$ /users/$uid$1 break; } } 

अपडेट विषय के प्रकाशन के बाद, BlackWizard ने सबसे अच्छा समाधान सुझाया जो सभी प्रारंभिक स्थितियों को पूरा करता है:
 server { server_name www.example.com; location / { proxy_pass 11.22.33.44:8080; } } server { server_name ~^(?<user>[a-z0-9\-]+)\.example.com$; location / { proxy_pass 11.22.33.44:8080/users/$user$uri$is_args$args; } } 


इस प्रकार, यदि कोई आगंतुक उपडोमेन पर जाता है, तो nginx इसे निर्धारित करता है और Apache से www.example.com/users/username के पते का अनुरोध करता है, और Apache पहले से ही अपने mod_rewrite नियमों के अनुसार सब कुछ पार्स कर देता है।

परिणामस्वरूप समाधान के निम्नलिखित फायदे हैं:


विपक्ष:


सामान्य तौर पर, समाधान मुझे बहुत अच्छा लग रहा था, मैं गुरुओं की सिफारिशों और आलोचनाओं को सुनने के लिए तैयार हूं, क्योंकि मैं खुद वेब सर्वर स्थापित करने में एक शुरुआती हूं, और शायद मेरे जैसे शुरुआती लोगों के लिए एक समाधान उपयोगी होगा।

UPD वेब सर्वर कॉन्फिग में सभी संभावित डोमेन को निर्दिष्ट किए बिना username.example.com कैसे काम करें
डायनेमिक सबडोमेन को सही ढंग से प्रोसेस करने के लिए सर्वर के लिए, आपको DNS सेटिंग्स में एक छोटा रिकॉर्ड जोड़ना होगा। यह सर्वर नियंत्रण कक्ष का उपयोग करके किया जा सकता है।
बस निम्नलिखित ए प्रारूप रिकॉर्ड (अंग्रेजी संस्करण में "ए रिकॉर्ड") जोड़ें:
* .example.com

प्रवेश सभी उप डोमेन (मेल, smtp, आदि) के बाद जोड़ा जाना चाहिए

Source: https://habr.com/ru/post/In101585/


All Articles