2011-01-14 13 views
8

मैं auth_basic का उपयोग कर पासवर्ड के साथ अपनी वेबसाइट के एक फ़ोल्डर को सुरक्षित रखना चाहता हूं। इस फ़ोल्डर में PHP-स्क्रिप्ट शामिल हैं जिन्हें अनुरोध किया जाना चाहिए यदि उन्हें अनुरोध किया जाता है।nginx: auth_basic और php

मैं निम्नलिखित की कोशिश की:

location /admin { 
    auth_basic "Admin-Section"; 
    auth_basic_user_file /myfolder/.htpasswd; 
} 

location ~ ^/admin/.*\.php$ { 
    auth_basic "Admin-Section"; 
    auth_basic_user_file /myfolder/.htpasswd; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 

मैं जब कि व्यवस्थापक फ़ोल्डर में php-स्क्रिप्ट का अनुरोध उपयोगकर्ता नाम/पासवर्ड के लिए कहा जाएगा, लेकिन php-स्क्रिप्ट हमेशा के बजाय डाउनलोड किया जाएगा FastCGI के माध्यम से मार डाला ।

मैं क्या गलत कर रहा हूं?

संपादित करें: मेरी स्थानीय मशीन पर सबकुछ इस कॉन्फ़िगरेशन के साथ ठीक काम करता है। o0
संपादित करें: बीटीडब्ल्यू, php व्यवस्थापक-फ़ोल्डर के बाहर एक ही fastcgi-विकल्पों के साथ काम कर रहा है।
संपादित करें: ओएमजी! साइट की कॉन्फ़िगरेशन/etc/nginx/sites-available/mysite और/etc/nginx/साइट-सक्षम/में संग्रहीत किया गया था/mysite-file में एक सिम्लिंक था। चूंकि माइसाइट फ़ाइल को बदलने में कुछ समय नहीं था। जैसे "सभी को अस्वीकार करने" के लिए सभी स्थानों को बदलना कोई प्रभाव नहीं पड़ा। फ़ाइलों को बिना किसी समस्या के भेजा गया था।
इसलिए मैंने सिम्लिंक हटा दिया और सर्वर को पुनरारंभ किया। फिर मैंने फिर से सिम्लिंक बनाया, सर्वर को पुनरारंभ किया और सब कुछ अपेक्षित काम करता है। क्या कोई अजीब व्यवहार समझा सकता है?

Gest संबंध है,
Biggie

उत्तर

-1

आप निम्न पंक्ति को हटाने की जरूरत:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
+1

एक आवश्यक लाइन है कि जब php-एफ पी एम क्रूट जेल में चल रहा है। – Zenexer

1

यह एक पुरानी सवाल है, लेकिन मैं सिर्फ एक ही समस्या थी, इसलिए यहाँ व्याख्या दी गई है।

स्थान ब्लॉक से मेल खाने के लिए Nginx the rules described in the docs का उपयोग करता है। पारंपरिक ब्लॉक के लिए, सबसे लंबा मैच वह होगा जो लागू किया जाएगा, लेकिन नियमित अभिव्यक्तियों के लिए यह हमेशा पहला मिलान ब्लॉक लागू होगा।

आपके उत्पादन सर्वर में, आपके पास आपके व्यवस्थापक ब्लॉक के ऊपर location ~ \.php$ ब्लॉक था, इसलिए आपके द्वारा पोस्ट किए गए श्रवण ब्लॉक को कभी भी लागू नहीं किया गया था।

लंबी छोटी सी कहानी: जब नियमित अभिव्यक्ति से निपटना होता है तो nginx में ब्लॉक सुनें, ऑर्डर मायने रखता है। सामान्य से पहले अधिक विशिष्ट मैच रखो।

12

इस कॉन्फ़िगरेशन के साथ, nginx केवल दो12 ब्लॉकों में से एक से मेल खाता है - उच्चतम प्राथमिकता वाला वाला।

समाधान PHP ब्लॉक को AUTH ब्लॉक में गठबंधन करना है। यह nginx लेखक खुद इगोर Sysoev द्वारा अनुशंसित दृष्टिकोण है।

location /admin/ { 
    auth_basic "Admin-Section"; 
    auth_basic_user_file /myfolder/.htpasswd; 
    location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include  fastcgi_params; 
    } 
} 

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include  fastcgi_params; 
} 
+1

स्पष्ट कोड डुप्लिकेशन से बचने के लिए कोई तरीका है? – peedee

+0

डुप्लिकेट कोड को एक अलग फ़ाइल में रखें और इसे प्रत्येक ब्लॉक से शामिल करें। – fisharebest

-1

हो सकता है कि आप रूट जोड़ने के लिए भूल गया:

location ~ .\php$ { 
    #Lines of code... 
    root /your/document/root; 
    #Lines of code... 
} 

location /admin/ { 
    #Lines of code... 
    root /your/document/root; 
    #Lines of code... 
}