2012-09-05 12 views
7

मैं एक Nginx config कि ठीक काम करता है और स्थिर फ़ाइलों को ठीक से कार्य करता है से स्थिर फ़ाइलों की सेवा के लिए:Nginx हो रही कई स्रोतों

location /static/ { 
    alias /tmp/static/; 
    expires 30d; 
    access_log off; 
} 

लेकिन क्या मैं अब क्या करना चाहते हैं कि यदि स्थिर फ़ाइल मौजूद नहीं है /tmp/static में, Nginx /srv/www/site/static में फ़ाइल को ढूंढता है। मुझे यकीन नहीं है कि इसे कैसे प्राप्त किया जाए, मैंने try_files के साथ कुछ चीजों की कोशिश की है, लेकिन मुझे नहीं पता कि इसका सही तरीके से उपयोग कैसे किया जाए।

उत्तर

8

आप दो रास्ते का उपयोग करना चाहते के आम उपसर्ग के लिए अपने रूट निर्धारित कर सकते हैं (इस मामले में, यह /), तो सिर्फ पथ के बाकी try_files आर्ग में निर्दिष्ट करें:

location /static/ { 
    root /; 
    try_files /tmp$uri /srv/www/site$uri =404; 
    expires 30d; 
    access_log off; 
} 

यह रूट/किसी स्थान पर उपयोग करने के लिए विघटनकारी प्रतीत हो सकता है, लेकिन try_files यह सुनिश्चित करेगा कि/tmp/static या/srv/www/site/static के बाहर कोई भी फाइल नहीं दी जाएगी।

+0

किसी कारण से, यह $ uri के साथ काम नहीं करता है, जब मैं $ request_uri का उपयोग करता हूं, तो कोई विचार क्यों? – Flavien

+0

$ request_uri अनुरोध लाइन से मूल, अप्रसन्न यूरी पथ तक फैलता है। यह किसी भी आंतरिक रीडायरेक्ट से अप्रभावित है। $ uri वर्तमान यूरी पथ संसाधित किया जा रहा है, और यह आंतरिक रीडायरेक्ट द्वारा बदला जाता है। मुझे लगता है कि आप किसी भी तरह आंतरिक रूप से पुनर्निर्देशित कर रहे हैं और यह आपकी समस्या का कारण बन रहा है। – kolbyjack

-1

ऐसा प्रतीत होता है कि आपकी आवश्यकताओं को SlowFS Cache Module का उपयोग करके परोसा जाएगा। यह आपकी स्थैतिक सामग्री को अस्थायी निर्देशिका में कैश करता है जो संभावित रूप से तेज़ डिस्क पर संग्रहीत होता है, और आपके लिए फ़ॉलबैक प्रबंधित करता है।

1

चाल करना चाहिए निम्नलिखित:

location /static/ { 
    expires 30d; 
    access_log off; 
    try_files tmp/static/$uri tmp/static/$uri/ tmp/static2/$uri tmp/static2/$uri/; 
} 

प्रलेखन के लिए http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files देख सकते हैं और try_files का उदाहरण आदेश वापस आने स्थानों की एक श्रृंखला पर कार्रवाई करने के में उपयोग

1

आप "रूट" के साथ एक नामित स्थान का उपयोग कर सकते । ध्यान दें कि आप नामित स्थान के अंदर "उपनाम" का उपयोग नहीं कर सकते हैं।

location/{ 
    root /path/to/primary/html; 
    try_files $uri $uri/ @fallback; 
} 
location @fallback { 
    root /path/to/secondary/html; 
    try_files $uri $uri/ =404; 
}