मैं हमेशा एक फाइल को nginx में वापस करने के लिए किसी लोकेशन ब्लॉक को कैसे कॉन्फ़िगर करूं?


12

मेरे आवेदन में मुझे स्थैतिक index.html फ़ाइल वापस करने के लिए स्थान "/" चाहिए, मैं एक फ़ोल्डर से स्थैतिक फ़ाइलों की सेवा के लिए "/ static" चाहता हूं और मैं चाहता हूं कि अन्य सभी अनुरोध 404 न लौटें। बाद में मैं एक WSGI सर्वर के लिए अन्य सभी अनुरोधों को पुनर्निर्देशित करने जा रहा हूं।

यह वर्तमान में मेरा कॉन्फ़िगरेशन है:

# Dev server.
server {
    listen 1337;
    charset UTF-8;

    location / {
        rewrite ^ static/index_debug.html break;
    }

    location /static {
        alias /home/tomas/projects/streamcore/static;
    }
}

स्थिर फ़ोल्डर पूरी तरह से काम कर रहा है, लेकिन "/" 404 NOT FOUND लौट रहा है। मैंने भी कोशिश की है:

alias /home/tomas/projects/streamcore/static/index_debug.html;

स्थान ब्लॉक में, लेकिन वह 500 आंतरिक सर्वर त्रुटि लौटाता है। ऐसा लगता aliasहै कि सिंगल फाइल पसंद नहीं है। इसके अतिरिक्त मैंने कोशिश की है:

try_files static/index_debug.html;

लेकिन यह सर्वर को "try_files निर्देश में अमान्य संख्या तर्क" से शुरू होने से रोकता है। जाहिरा तौर पर try_filesवास्तव में आपको एक से अधिक फ़ाइल आज़माने की आवश्यकता होती है, जो कि वह व्यवहार नहीं है जिसकी मुझे तलाश है।

तो मेरा सवाल यह है: मैं हमेशा एक स्थिर फ़ाइल वापस करने के लिए एक स्थान ब्लॉक को कैसे कॉन्फ़िगर करूं?


संपादित करें: मैंने अन्य उत्तरों से देखा है जो aliasवास्तव में एकल फ़ाइल को तर्क के रूप में स्वीकार करना चाहिए, इसलिए मैंने कोशिश की:

location = / {
    alias /home/tomas/projects/streamcore/static/index_debug.html;
}

लेकिन मैं अभी भी केवल 500 आंतरिक सर्वर त्रुटि प्राप्त करता हूं। "/" अनुरोध के लिए त्रुटि लॉग कहता है:

[अलर्ट] २ome११२ # ०: * / "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" निर्देशिका नहीं है

यह "index_debug.htmlindex.html" खोलने का प्रयास क्यों कर रहा है? मैं indexकहीं भी निर्देश का उपयोग नहीं कर रहा हूं ।


आप कर सकते हैंtry_files static/index_debug.html static/index_debug.html;
ceejayoz

@ceejayoz: location =/मेरे सुझाव की कोशिश कर रहा हूं कि मुझे 404 NOT FOUND मिले, साथ ही location /मुझे 500 INTERNAL SERVER ERROR मिले।
हब्रो

अगर मैं गलत नहीं हूं, तो आप इंडेक्स डायरेक्शन को याद कर रहे हैं ... कोई भी वेबसर्वर हमेशा इंडेक्स फाइल की तलाश करेगा, रूट यूआरआई (/) प्रदान करता है, मुझे लगता है कि आप इसे जोड़कर ओवरराइड कर सकते हैं:location / { return 404; }
मार्टिनो डीनो

@MartinoDino: मुझे इसकी आवश्यकता क्यों है? और कहाँ?
हब्रो

location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
मार्टिनो डिनो

जवाबों:


10

बस यह परीक्षण किया है और यह मेरे लिए काम करता है:

server {
    root /tmp/root;
    server {
        listen 8080;
        location /static {
            try_files $uri =404;
        }
        location / {
            rewrite ^ /static/index_debug.html break;
        }
    }
}

फ़ाइल /tmp/root/static/index_debug.htmlनिश्चित रूप से मौजूद है :)

मैं किसी भी यूआरएल को हिट कर सकता हूं और मुझे सिर्फ स्टैटिक पेज मिलेगा।


0

आप try_files और पुनर्निर्देशित नाम वाले स्थान पर पुनर्निर्देशित कर सकते हैं। ऐशे ही:

server {
    root /tmp/root;
    server {
        listen 8080;

        location / {
            try_files $uri $uri/ @index;
        }

        location @index {
            rewrite ^ static/index_debug.html break;
        }
    }
}

यदि फ़ाइल मौजूद है /tmp/rootतो उसे परोसा जाएगा, अन्यथा uri को फिर से लिखा static/index_debug.htmlजाएगा और इसे परोसा जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.