मेरा नेगनेक्स उर्फ ​​काम क्यों नहीं कर रहा है?


10

मैं एक उपनाम स्थापित करने की कोशिश कर रहा हूं /phpmyadmin/, जब कोई पहुंचता है , तो nginx इसे /home/phpmyadmin/सामान्य दस्तावेज़ रूट के बजाय से खींच लेगा । हालाँकि, हर बार जब मैं URL को खींचता हूँ, तो यह मुझे सभी आइटमों पर 404 देता है जो fastcgi के माध्यम से नहीं खींचे जाते हैं। Fastcgi ठीक काम कर रही है, जबकि बाकी नहीं है। straceमुझे बता रहा है कि यह सामान्य दस्तावेज़ रूट से और सब कुछ खींचने की कोशिश कर रहा है, फिर भी मैं यह पता नहीं लगा सकता कि क्यों। किसी को कुछ जानकारी प्रदान कर सकते हैं?

यहाँ मेरे विन्यास का प्रासंगिक हिस्सा है:

            location ~ ^/phpmyadmin/(.+\.php)$
            {
                    include fcgi.conf;
                    fastcgi_index index.php;
                    fastcgi_pass  unix:/tmp/php-cgi.sock;
                    fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
            }

            location /phpmyadmin
            {
                    alias /home/phpmyadmin/;
            }

एक लंबे समय से अपाचे उपयोगकर्ता nginx के रूप में, मुझे यह वास्तव में अजीब और अनावश्यक रूप से जटिल लगता है। मैंने यह समझने की कोशिश करने के लिए प्रलेखन के माध्यम से कई घंटे बिताए कि क्यों। क्या कोई इस व्यवहार की व्याख्या कर सकता है? उपनाम बस इतना होना चाहिए - एक स्थान के लिए एक उपनाम।
टू-रिइंस्टेट मोनिका-डोर डुह

जहाँ तक मुझे यह समझ के रूप में, उपनाम "सिर्फ इतना है कि", हालांकि ध्यान दें कि यदि आप पीछे छोड़ रहे हैं /उर्फ में औरlocation निर्देश, का अनुरोध /phpmyadminfileवास्तव में आप मिल जाएगा /home/phpmyadminfile। इस सवाल के लिए कि प्रश्न में विन्यास क्यों काम नहीं करता है, यह मेरे लिए सही लगता है, इसलिए मुझे संदेह है कि कोई अन्य locationनिर्देश नहीं दिखाया गया है जो कि इच्छित नहीं होने पर मेल खा रहा है। इस मामले में, जैसा कि उपसर्ग के aliasसाथ समाप्त होता है location, nginx डॉक्स root /home;इसके बजाय का उपयोग करने का सुझाव देते हैं
स्कॉट स्टीवंस

जवाबों:


12

एक रास्ता निकाला। मुझे यकीन नहीं है कि यह सबसे अच्छा है, लेकिन यह निश्चित रूप से अभी काम कर रहा है।

यहाँ मैंने क्या किया है:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }

2

मुझे यकीन नहीं है लेकिन क्या आपने इसे इस तरह लिखने की कोशिश की है:

location /phpmyadmin/
        {
                alias /home/phpmyadmin/;
        }

इसके अलावा, URI क्या है जिससे आप इसे एक्सेस करने का प्रयास कर रहे हैं?

जहां तक ​​मैं इसे समझता हूं, आपको यूआरआई का उपयोग करना होगा

/home/phpmyadmin/

और बस नहीं

/phpmyadmin/

आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: http://wiki.nginx.org/HttpCoreModule


उत्तर के लिए धन्यवाद, कम से कम। लेकिन हाँ। मैंने वह कोशिश की है। वही चीज।
राब

हो सकता है कि आपको अन्य स्थान पर उपनाम जोड़ना होगा। आप अपने कॉन्फिग को वहां मौजूद लोगों से तुलना कर सकते हैं: serverfault.com/questions/223028/…
ब्लैक-पिक्सेल

1

प्रयत्न

location ^~ /phpMyAdmin/
{
    alias /home/phpmyadmin/;

    location ~ \.php$
    {
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
    }
}

1

सर्वर के काम न करने का कारण यह है कि रेगेक्स आधारित स्थान का चयन किया जा रहा है, न कि उपसर्ग आधारित स्थान का, जिसमें उसका उपनाम है।

यह केवल एक का चयन करेगा। एक ऑपरेटर है जिसका उपयोग आप रीफ़ैक्स एक को पछाड़ने के लिए एक उपसर्ग आधारित स्थान प्राप्त करने के लिए कर सकते हैं, लेकिन फिर आप पाएंगे कि php काम नहीं करेगा। समाधान kervin के उत्तर की तरह एक होगा जहां PHP रेगेक्स उर्फ ​​निर्देश के साथ स्थान के अंदर नेस्टेड है।

मुझे संदेह है कि उसकी SCRIPT_FILENAME सेटिंग वहां काम नहीं कर सकती क्योंकि URL और उपनाम निर्देशिका पर अलग-अलग कैपिटलाइज़ेशन है।

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