Nginx: कई पथों के लिए स्थान regex


30

मेरे पास nginx config में दो स्थान हैं जो काम करते हैं:

location ^~ /media/ {
  proxy_pass http://backend.example.com;
}

location ^~ /static/ {
  proxy_pass http://backend.example.com;
}

मैं इन दोनों को एक स्थान पर कैसे जोड़ सकता हूं?

मैंने पहले से ही क्या किया है:

मैंने इस सुझाव की कोशिश की

location ~ ^/(static|media)/ {
  proxy_pass http://backend.example.com;
}

लेकिन यह मेरे लिए काम नहीं करता है।

इसके अलावा, जब मैं बैकएंड का उपयोग नहीं करता हूं, तो निम्न कॉन्फ़िगरेशन ठीक से काम कर रहा है:

location ~ ^/(static|media)/ {
  root /home/project_root;
}

अद्यतन (लॉग से कुछ तार)

xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /content/11160/ HTTP/1.1" 200 5310 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/css/custom.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/53$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/colorbox.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Sa$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/jquery.colorbox-min.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/js/scripts.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537$

समाधान

वास्तव में मेरा समाधान ठीक काम करता है:

location ~ ^/(static|media)/ {
  root /home/project_root;
}

और इस मुद्दे का बैकएंड से कोई लेना-देना नहीं है। जैसा कि Guido Vaccarella ने सही ढंग से देखा location ~ ...कि इसके बाद एक और मेल खाता है, जिससे मुझे location ~ ...दौड़ने का कोई मौका नहीं मिला।


मैं नहीं देखता कि आपका रेक्सएक्स प्रॉक्सी पास क्यों काम नहीं करता है। जब आप इसे आज़माते हैं तो क्या होता है?
क्रोधी

जब मैं इसे करने की कोशिश करता हूँ तो दृश्यपटल nginx 404 त्रुटि फेंकता है।
व्लाद टी।

क्या) स्थान कथन के अंत में आपके प्रश्न में केवल एक त्रुटि है या यह आपके पास कॉन्फ़िगरेशन फ़ाइल में भी है?
गुइडो वैकेटरला

आपको त्रुटियों के लिए अपने कॉन्फ़िगरेशन के बाकी हिस्सों की दोबारा जांच करनी चाहिए। इसके अतिरिक्त, यह जांचना चाह सकता है कि यह 404 को क्यों फेंक रहा है, यह देखकर कि यह कहाँ दिख रहा है, क्या गायब था। यह भी संभव है कि यह त्रुटि दस्तावेज पर 404 फेंकता है जो नहीं मिल रहा है और इस तरह फेंकी गई पहले की त्रुटि को देखने की जरूरत है।
क्रोधी

कृपया त्रुटि लॉग से त्रुटि प्रदान करें
मोहम्मद अबूशै

जवाबों:


30

Nginx प्रलेखन के अनुसार :

फिर कॉन्फ़िगरेशन फ़ाइल में उनकी उपस्थिति के क्रम में नियमित अभिव्यक्ति की जांच की जाती है। नियमित अभिव्यक्तियों की खोज पहले मैच पर समाप्त होती है, और संबंधित कॉन्फ़िगरेशन का उपयोग किया जाता है।

आपके विन्यास में, निम्न स्थान proxy_pass के साथ एक से पहले परिभाषित किया गया है और इसके तहत js और सीएसएस फ़ाइलों के अनुरोध से मेल खाता स्थिर :

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
  }

दुर्भाग्य से "log_not_found off" क्लॉज इस स्थान से संबंधित किसी भी फ़ाइल-नहीं-पाया त्रुटि के लिए लॉगिंग को अक्षम कर देता है, इसीलिए आपकी error_log खाली है!

आप इस स्थान के बारे में टिप्पणी करने का प्रयास कर सकते हैं या प्रॉक्सी_पास के साथ स्थान के बाद इसे स्थानांतरित कर सकते हैं (यदि आपको स्थिर या मीडिया में नहीं अन्य फ़ाइलों के लिए इसकी आवश्यकता है )।


13
location ~ ^/(static|media)/ {
  proxy_pass http://backend.example.com;
)     <-----------

होना चाहिए...

location ~ ^/(static|media)/ {
  proxy_pass http://backend.example.com;
}     <-----------

समापन के लिए ब्रेस {} होना चाहिए, न कि कोष्ठक कोष्ठक ()।

विश्वास नहीं कर सकता कि यह देखने में कितना समय लगा। Guido टिप्पणियों से सही था।


ओह, गलतफहमी के लिए खेद है, मुझे लगा |media)कि स्ट्रिंग में "मीडिया" के बाद ब्रैकेट "स्थान" के साथ शुरू हुआ था। लेकिन यहां गलत ब्रेस सिर्फ एक टाइपो (प्रश्न में सही) है। अन्यथा यह नग्नेक्स कॉन्फिगर लोड नहीं होगा और unexpected ")"...सॉरी जैसी किसी त्रुटि को फिर से फेंक देगा ।
व्लाड टी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.