2010-02-12 18 views
6

मेरे पास वर्तमान में मेरे nginx.conf में निम्न (हैकी) पुनः लिखने का नियम है ताकि गतिशील उप-डोमेन को एक Django इंस्टेंस में फिर से निर्देशित किया जा सके।कॉम्प्लेक्स nginx सबडोमेन के लिए नियमों को फिर से लिखना

set $subdomain ""; 
set $subdomain_root ""; 
set $doit ""; 
if ($host ~* "^(.+)\.domain\.com$") { 
    set $subdomain $1; 
    set $subdomain_root "/profile/$subdomain"; 
    set $doit TR; 
} 
if (!-f $request_filename) { 
    set $doit "${doit}UE"; 
} 
if ($doit = TRUE) { 
    rewrite ^(.*)$ $subdomain_root$1; 
    break; 
} 

मुझे यकीन है कि वहाँ यह करने के लिए एक अधिक कुशल तरीका है कर रहा हूँ, लेकिन मैं इस नियम को बदलने के लिए इतना है कि *.domain.com/media/* या *.domain.com/downloads/* लिए किसी भी अनुरोध domain.com/media/* और domain.com/downloads/* करने के लिए जाने की जरूरत है।

उत्तर

8

असल में मुझे लगता है कि यह करने के लिए django के लिए मिडलवेयर लिखने के बजाय nginx पुनः लिखने के नियमों को बदलने के लिए बहुत आसान है। Nginx प्रक्रियाओं के मिलान के तरीके को पढ़ने के बाद (सबसे सटीक -> कम से कम सटीक) मैंने/मीडिया और/डाउनलोड के लिए स्थान बनाए/साथ ही साथ/I के लिए सभी स्थान पकड़ने के बाद फिर से/स्थान के अंतर्गत रीराइट नियम को स्थानांतरित कर दिया और इसे सरल बना दिया - के रूप में मैं अब फ़ाइलों के लिए जाँच क्योंकि इस पूरे स्थान django में भेजा जाता है के बारे में चिंतित हूँ - नियम हो जाता है:

set $subdomain ""; 
set $subdomain_root ""; 
if ($host ~* "^(.+)\.domain\.com$") { 
    set $subdomain $1; 
    set $subdomain_root "/profile/$subdomain"; 
    rewrite ^(.*)$ $subdomain_root$1; 
    break; 
} 

और अगर मेरे nginx \ regex पटकथा बेहतर :)

था शायद और भी आसान हो जाएगा
+0

हैलो @ फ्रोजेंसकीज़ मेरे पास एक प्रश्न है [यहां] (http://stackoverflow.com/questions/18744741/setting-up-nginx-reverse-proxy-for-s3 -होस्टेड-वेबसाइट्स)। मुझे यकीन नहीं है कि मेरे प्रॉक्सी सर्वर को कैसे कॉन्फ़िगर करें। यदि संभव हो तो कृपया अपना इनपुट दें। – KillABug

0

शायद आपके वेबसर्वर में पुनः लिखने के बजाय उपडोमेन को संभालने के लिए django को कॉन्फ़िगर करना बेहतर विचार होगा। यहां बताया गया है कि मैंने यह कैसे किया: http://sharjeel.2scomplement.com/2008/07/24/django-subdomains/

+0

हैलो @ शारजेल मेरे पास एक प्रश्न है [यहां] (http://stackoverflow.com/questions/18744741/setting-up-nginx-reverse-proxy-for-s3-hosted-websites) मुझे यकीन नहीं है मेरे प्रॉक्सी सर्वर को कैसे कॉन्फ़िगर करें। यदि संभव हो तो कृपया अपने इनपुट – KillABug

9

आप नियमित अभिव्यक्ति सर्वर नामों का उपयोग कर सकते हैं (http://nginx.org/en/docs/http/server_names.html#regex_names देखें) और एक मिलान समूह को एक चर $ $ सबडोमेन को असाइन करें:

server { 
    listen 80; 
    listen 443; 
    server_name ~^(?<subdomain>.+)\.domain\.com$ 
    location/{ 
    rewrite^/profile/$subdomain$request_uri; 
    } 
} 
+0

धन्यवाद! यह सबसे अच्छा तरीका है, क्योंकि अगर nginx में अनुशंसा नहीं की जाती है (और पढ़ें: [एनजीआईएनएक्स अगर ईविल है] (https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/)) – antoniOS

+0

का उपयोग करना nginx में तब तक ठीक है जब तक आप समझते हैं कि यह क्या करता है। "यदि निर्देश संदर्भ में उपयोग किया गया है तो निर्देश अगर _ में संदर्भित होता है, तो कुछ मामलों में यह आपके द्वारा अपेक्षित चीज़ों को नहीं करता है बल्कि कुछ अलग-अलग होता है। कुछ मामलों में यह भी segfaults।" - https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ –

संबंधित मुद्दे