nginx

2012-05-01 17 views
6

में पता लगाए गए स्थान ब्लॉक नहीं प्राप्त कर सकते हैं nginx कॉन्फ़िगरेशन में स्थान ब्लॉक को निकालने का प्रयास करने में कठिनाई हो रही है। यह मैं क्या है:nginx

server { 
    listen   80; 
    server_name  _; 

    access_log  /var/log/nginx/example.com.access_log; 
    error_log  /var/log/nginx/example.com.error_log warn; 

    root    /var/www/root; 
    index    index.php index.htm index.html; 
    fastcgi_index  index.php; 

    location /wp/ { 
     root    /var/www/wordpress; 
     index    index.php index.htm index.html; 
     fastcgi_index  index.php; 
    } 

    location ~* \.php$ { 
     try_files   $uri =404; 
     keepalive_timeout 0; 
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_pass   127.0.0.1:9000; 
    } 
} 

ब्राउजिंग करने के लिए/उम्मीद और/var/www/जड़ में वेबसाइट से पता चलता है, लेकिन काम करता है स्थानों काम करता है, तो के रूप में मुझे लगता है कि उनके द्वारा ब्राउज़ करना चाहिए करने के लिए/WP मुझे वर्डप्रेस के लिए ले जाना चाहिए/var/www/वर्डप्रेस में स्थापना। सभी मैं हो रही है:

404 नहीं मिला

nginx/0.7.67

अगर मैं/var/www/वर्डप्रेस निर्देशिका स्थानांतरित/var/www/जड़/वर्डप्रेस के लिए और सभी/वर्डप्रेस ब्राउज़ करें बिल्कुल सही है।

मैं स्थान ब्लॉक के साथ क्या गलत कर रहा हूं ??

मैंने पहले कभी भी nginx को कॉन्फ़िगर नहीं किया है और फिर भी एक पूर्ण वेब न्यूब का कुछ भी नहीं किया है।

मैं अन्य अनुप्रयोगों के लिए भी अधिक स्थान ब्लॉक प्राप्त करने में सक्षम होना चाहता हूं। यहां पोस्ट करने के लिए यह वास्तव में एक बुनियादी उदाहरण है।

डेबियन निचोड़ बैकपोर्ट में संस्करण के लिए nginx अद्यतन किया गया। कोई सुधार नहीं:

404 Not Found

nginx/1.1.19

+0

क्या आपने इसके बजाय/wp/करने की कोशिश की है? –

+0

आप कल्पना नहीं करना चाहते कि कैसे nginx/0.7.67 है। – Dayo

+0

मैंने कोशिश की है/wp/साथ ही। यह डेबियन 6 भंडारों से nginx है। मुझे लगता है कि डेबियन थोड़ा पीछे हो जाता है। मैं रिपो में क्या है के साथ रहना पसंद करते हैं। – goji

उत्तर

7

कारण है कि यह काम नहीं कर रहा है कि ...

सर्वर स्तर पर है, आपके पास "रूट/var/www/रूट"। तो मूल रूप से, प्रत्येक स्थान ब्लॉक इसका उपयोग तब तक करेगा जब तक विशेष रूप से ओवरराइड नहीं किया जाता है। यह अच्छा अभ्यास है।

आपने इसे "wp" स्थान ब्लॉक में "/ var/www/wordpress" में ओवरराइड कर दिया है। हालांकि, PHP स्थान ब्लॉक अभी भी डिफ़ॉल्ट का उपयोग कर रहा है।

अब जब आप "/wp/folder_a/file_a.php" का अनुरोध करते हैं जो भौतिक रूप से "/var/www/wordpress/folder_a/file_a.php" पर स्थित है, तो अनुरोध php लोकेशन ब्लॉक को हिट करता है और उस ब्लॉक के लिए सक्रिय रूट फ़ोल्डर को "/var/www/root/folder_a/file_a.php" में फ़ाइल देखने के लिए दिया गया है। नतीजतन, आपको "404 नहीं मिला" मिलता है।

आप सर्वर स्तर रूट निर्देश को "/ var/www/wordpress" में बदल सकते हैं और wp स्थान में ओवरराइड को हटा सकते हैं। यह उस समस्या को हल करेगा लेकिन "/ var/www/root" के अंतर्गत PHP स्क्रिप्ट्स अब काम नहीं करेंगे। सुनिश्चित नहीं है कि आपके पास कोई है या नहीं।

तुम दोनों "/ var/www/जड़" और "/ var/www/वर्डप्रेस 'के तहत php चलाने की आवश्यकता है, तो आप ऐसा करने की जरूरत:

server { 
    ... 
    root    /var/www/root; 
    index    index.php index.htm index.html; 
    # Keep fastcgi directives together under location 
    # so removed fastcgi_index 

    # Put keepalive_timeout under 'http' section if possible 

    location /wp/ { 
     root    /var/www/wordpress; 
     # One appearance of 'index' under server block is sufficient 
     location ~* \.php$ { 
      try_files   $uri =404; 
      fastcgi_index  index.php; 
      fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_pass   127.0.0.1:9000; 
     } 
    } 

    location ~* \.php$ { 
     try_files   $uri =404; 
     fastcgi_index  index.php; 
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_pass   127.0.0.1:9000; 
    } 
} 

है, घोंसला डुप्लिकेट php डब्ल्यूपी लोकेशन ब्लॉक के नीचे स्थान ब्लॉक। यह डब्ल्यूपी के लिए मूल निर्देश का वारिस होगा।

चीजों को सुदृढ़ रखने और संपादन आदि को कम करने में मदद के लिए, आप फास्टसी निर्देशों को एक अलग फ़ाइल में डाल सकते हैं और इसे आवश्यकतानुसार शामिल कर सकते हैं।

तो/पथ/fastcgi में।पैरामीटर, आपके पास:

fastcgi_index  index.php; 
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass   127.0.0.1:9000; 

आपका conf तो हो सकता है:

server { 
    ... 
    root    /var/www/root; 
    ... 
    location /wp/ { 
     root    /var/www/wordpress; 
     location ~* \.php$ { 
      try_files   $uri =404; 
      include /path/fastcgi.params; 
     } 
    } 

    location ~* \.php$ { 
     try_files   $uri =404; 
     include /path/fastcgi.params; 
    } 
} 

इस तरह, अगर आप किसी भी FastCGI परम संपादित करने की जरूरत है, तो आप सिर्फ एक ही स्थान पर इसे संपादित करें।

पीएस। अपने nginx को अपडेट करना इसे हल नहीं करेगा क्योंकि यह संस्करण समस्या नहीं है .. लेकिन फिर भी अपडेट करें!

+0

धन्यवाद। मुझे संदेह था कि यह गलत document_root का उपयोग कर रहा था, लेकिन यह नहीं पता था कि आप इस तरह के स्थान ब्लॉक को ढेर कर सकते हैं! जब मेरी सफलता हो तो मैं वापस पोस्ट करूंगा। – goji

+0

क्या कोई तरीका यह देखने का कोई तरीका है कि एससीआरआईपीT_FILENAME का मूल्य क्या है जब एक php स्क्रिप्ट निष्पादित की जा रही है? बाहरी PHP स्थान को ओवरराइड करने से रोकने के लिए – goji

+0

'स्थान/wp /' को 'location^~/wp /' होना चाहिए। [दस्तावेज़ीकरण] देखें (http://wiki.nginx.org/HttpCoreModule#location) – kolbyjack