मैं ज्यादातर gunicon / mod_wsgi अनुप्रयोगों और निश्चित रूप से सर्वर स्टैटिक फ़ाइलों के सामने nginx का उपयोग रिवर्स कैचिंग प्रॉक्सी के रूप में कर रहा हूँ।
मुझे लगता है कि जल्दी से मेरे नगनेक्स को बनाए रखना असंभव हो जाता है; मुद्दा यह है कि मेरे पास कुछ पैटर्न हैं जो समान (या समरूप) हैं लेकिन मैं इसे साफ करने का प्रबंधन नहीं कर सकता।
मेरे पास सबसे बड़ी समस्याओं में से एक यह है कि मैं नामित स्थानों को एक सेट के रूप में उपयोग करना पसंद करूंगा, जैसे कि सेट्स ऑफ़ सेट्स।
location @django_modwsgi {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
location @django_gunicorn {
include proxy.conf; # this could also be included directly in the server {} block?
proxy_pass http://gunicorn_builder;
}
एनबी। इस मुद्दे पर gunicorn और wsgi दोनों नहीं हैं । वह सिर्फ एक उदाहरण है। एक और है:
location @namedlocation_1 {
some cache settings;
some cache_key settings;
ignore some headers;
expires;
proxy_pass
}
location @namedlocation_2 {
other cache settings;
other cache_key settings;
ignore some headers;
expires;
proxy_pass
}
लेकिन एक नामित स्थान को कॉल करने का एकमात्र तरीका मुझे मिल गया है:
location /somelocation {
try_files $uri @named_location;
}
यह पहले से ही सही नहीं लगता है, मैं नहीं चाहता कि नाज़िनक्स स्थिर फ़ाइलों की तलाश में जाए, मैं चाहता हूं कि यह सीधे नामित स्थान पर जाए! वहाँ सीधे एक नामित स्थान "कॉल" करने के लिए एक रास्ता है ?!
एक और तरीका मुझे लगा कि मैं सूखे के लिए जा सकता हूं include
...
location /somelocation {
include django_unicorn.conf;
}
लेकिन क्या यह एक अच्छा तरीका है? यह बहुत सामान्य सेटिंग्स के लिए ठीक लगता है (उदाहरण के लिए प्रॉक्सी वाले), लेकिन पूर्ण जानकारी प्राप्त करने के लिए विभिन्न फ़ाइलों को खोलने के लिए जाना बहुत ही पठनीय नहीं है।
इसके अलावा, कुछ मामलों में मैं कुछ स्थानों को एक regexp के साथ समूहीकृत कर सकता हूं, लेकिन मुझे केवल ऐसा करना पसंद है जब वे तार्किक रूप से संबंधित होते हैं न कि एक ही ब्लॉक में सामान्य सेटिंग्स को सक्षम करने के लिए।
प्रश्न
क्या एक "आधिकारिक" सबसे अच्छा अभ्यास लिखने के लिए अच्छा है, DRY nginx विन्यास?
मैं एक पैटर्न ढूंढना पसंद करूंगा:
location / {
common confs
try_files $uri @name_location
}
** लेकिन मैं विभिन्न स्थानों के लिए विशिष्ट मामले कैसे लिख सकता हूं? **
क्या मैं बस इस पते के असामान्य भाग के साथ कई स्थानों को जोड़ सकता हूं और जो @ an_location में आम है?
location /1/ {
some cache expire settings;
NOTHING ELSE;
}
location /2/ {
some other cache expire settings;
NOTHING ELSE;
}
location / {
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
जब मेरे पास एक ही संसाधन की ओर इशारा करने वाले अलग-अलग यूआरएल होते हैं तो क्या मैं बस फिर से लिख सकता हूं?
location /1/ {
rewrite ^ /3/ last;
}
location /2/ {
rewrite ^ /4/ last;
}
location / {
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
या उन सभी को एक स्थान पर समूहीकृत किया जाना चाहिए?
location / {
rewrite ^/1/$ /3/ last;
rewrite ^/2/$ /4/ last;
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
सम्बंधित
मैं मेलिंग सूची में बहुत कम नहीं मिला, यहां तक कि विकी में भी कम।
कृपया ध्यान दें कि यह प्रश्न / NGIx बेस्ट प्रैक्टिस के समान है / नहीं - यह एक बहुत ही सामान्य प्रश्न है।
यह एक और अधिक प्रासंगिक है: मैं इस Nginx कॉन्फ़िगरेशन को कैसे तैयार कर सकता हूं?
map
- या कम से कम मैंने कभी गौर नहीं किया था और सोचा था कि मैं इसे इस तरह से इस्तेमाल कर सकता हूं ... मुझे इस बारे में थोड़ा और सोचने दें और देखें कि क्या मेरे पास अतिरिक्त प्रश्न / टिप्पणियां हैं!