उप डोमेन पर अलग-अलग रूट फ़ोल्डर के साथ कई स्थानों के साथ nginx कॉन्फ़िगर करें


202

मैं अपने सर्वर पर दो अलग-अलग फ़ोल्डरों में एक उपडोमेन और एक उपडोमेन की निर्देशिका के रूट यूआरएल की सेवा करना चाहता हूं। यहाँ सरल सेट अप है जो मेरे पास है और काम नहीं कर रहा है ...

server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
            root /web/test.example.com/www;
    }

    location /static {
            root /web/test.example.com/static;
    }
}

इस उदाहरण test.example.com/में इंडेक्स फाइल को लाया जाएगा/web/test.example.com/www

और में जा रहा है test.example.com/staticसूचकांक फ़ाइल में लाना होगा/web/test.example.com/static

जवाबों:


238

आपको इसके लिए aliasनिर्देश का उपयोग करने की आवश्यकता है location /static:

server {

  index index.html;
  server_name test.example.com;

  root /web/test.example.com/www;

  location /static/ {
    alias /web/test.example.com/static/;
  }

}

Nginx विकि की तुलना में मैं कर सकते हैं जड़ और उर्फ बेहतर के बीच का अंतर बताते हैं:

ध्यान दें कि यह पहली नज़र में मूल निर्देश के समान लग सकता है, लेकिन दस्तावेज़ रूट नहीं बदलता है, बस अनुरोध के लिए उपयोग किया जाने वाला फ़ाइल सिस्टम पथ। अनुरोध का स्थान हिस्सा अनुरोध में गिरा दिया गया है Nginx मुद्दे।

ध्यान दें कि rootऔर aliasअलग-अलग स्लैशिंग को संभालना।


67
उसकी जरूरत नहीं है alias। कृपया, आधिकारिक डॉक्स पढ़ें , न कि उपयोगकर्ताओं द्वारा भरी गई सामुदायिक विकि। उद्धरण: जब स्थान निर्देश के मूल्य के अंतिम भाग से मेल खाता है तो रूट निर्देश का उपयोग करना बेहतर होता है
VBart

9
यह मेरे लिए काम करता है सिवाय इसके कि यह एक अनुगामी स्लेश को याद कर रहा है। उपनाम को पढ़ना चाहिए: उपनाम /web/test.example.com/static/;
अंजाम

8
@ वीबोर्ट डॉक्स वही कहते हैं जो आप उन्हें कहते हुए उद्धृत करते हैं, लेकिन वे उस निर्देश को बिल्कुल भी सही नहीं ठहराते हैं - यह एक मनमाना स्टाइल पसंद है। क्या आपको इसके पीछे कोई तार्किक कारण दिखाई देता है?
मार्क ऐमी

104

स्थान निर्देशन प्रणाली है

जैसे आप सभी अनुरोधों को अग्रेषित करना चाहते हैं जो शुरू होते हैं /staticऔर आपके डेटा में मौजूद हैं/var/www/static

तो एक सरल विधि को अंतिम फ़ोल्डर को पूर्ण पथ से अलग किया जाता है, जिसका अर्थ है

पूरा रास्ता : /var/www/static

अंतिम रास्ता: /static और पहला रास्ता:/var/www

location <lastPath> {
    root <FirstPath>;
}

तो देखते हैं कि आपने क्या गलती की और आपके समाधान क्या हैं

तुम्हारी गलती :

location /static {
    root /web/test.example.com/static;
}

आपके समाधान:

location /static {
    root /web/test.example.com;
}

2
इससे मुझे मदद मिली: मुझे एहसास हुआ कि मुझे या तो अपने फ़ोल्डर का नाम बदलने की जरूरत है या चीजों को काम करने के लिए सिम्लिंक स्थापित करने की।
cjm

3
बहुत बहुत धन्यवाद, मैं बिल्कुल इस तरह से विफल रहा था :)
bobmoff

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

48
server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
        root /web/test.example.com/www;
    }

    location /static {
        root /web/test.example.com;
    }
}

http://nginx.org/r/root


2
पूछा के साथ अलग क्या है?
तांगमोंक

5
@ अंतर देखें: के root /web/test.example.com;बजाय root /web/test.example.com/static;। nginx diretory ट्री के लिए स्थान द्वारा निर्दिष्ट पथ को मैप करता है और चूंकि पथ और स्रोत निर्देशिका एक ही नाम साझा करते हैं, यह साथ काम करता है root
rmoestl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.