2012-10-09 18 views
41

मेरे पास मेरे सर्वर पर स्थिर .html फ़ाइलों के कई सेट हैं, और मैं सीधे उनकी सेवा करने के लिए nginx का उपयोग करना चाहता हूं। .html फ़ाइल कि /home/www-data/mysite/public/doc/foo/bar.html पर स्थित है के साथकिसी दिए गए निर्देशिका की उपनिर्देशिका से स्थिर फ़ाइलों को सेवा देने के लिए nginx का उपयोग करें

www.mysite.com/public/doc/foo/bar.html 

: उदाहरण के लिए, nginx निम्नलिखित पैटर्न के एक यूआरआई कार्य करना चाहिए। आप सेट नाम के रूप में foo और फ़ाइल नाम के रूप में bar के बारे में सोच सकते हैं।

मुझे आश्चर्य है कि nginx config का निम्न भाग काम करना होगा या नहीं:

server { 
    listen  8080; 
    server_name www.mysite.com mysite.com; 
    error_log  /home/www-data/logs/nginx_www.error.log; 
    error_page 404 /404.html; 

    location /public/doc/ { 
     autoindex   on; 
     alias    /home/www-data/mysite/public/doc/; 
    } 

    location = /404.html { 
     alias    /home/www-data/mysite/static/html/404.html; 
    } 
} 

दूसरे शब्दों में, पैटर्न /public/doc/.../....html nginx द्वारा नियंत्रित किया जा करने के लिए जा रहे हैं के सभी अनुरोधों, और अगर किसी भी यूआरआई नहीं है मिला, एक डिफ़ॉल्ट www.mysite.com/404.html वापस आ गया है।

उत्तर

61

यह काम करना चाहिए, लेकिन http://nginx.org/en/docs/http/ngx_http_core_module.html#alias का कहना है:

स्थान के निर्देश के मूल्य के अंतिम भाग से मेल खाता है: यह बजाय जड़ निर्देश उपयोग करने के लिए बेहतर है:

जो प्राप्त होते हैं:

server { 
    listen  8080; 
    server_name www.mysite.com mysite.com; 
    error_log  /home/www-data/logs/nginx_www.error.log; 
    error_page 404 /404.html; 

    location /public/doc/ { 
    autoindex on; 
    root /home/www-data/mysite; 
    } 

    location = /404.html { 
    root /home/www-data/mysite/static/html; 
    }  
} 
+0

टिप के लिए धन्यवाद! एक सवाल हालांकि, क्या मुझे यहां '^ (/ public/doc /) 'जैसे regex का उपयोग करने की आवश्यकता है? या '/ public/doc /' ठीक है? – MLister

+0

बस/सार्वजनिक/डॉक्टर/इस मामले में पर्याप्त है, और वास्तव में थोड़ा बेहतर है क्योंकि यह रेगेक्स मिलान के (छोटे) अतिरिक्त बोझ नहीं करता है – cobaco