2012-07-24 16 views
5

को छोड़कर index.php को सभी को फिर से लिखना, सबसे पहले, मैंने समान प्रश्नों की खोज करने का प्रयास किया है, लेकिन उन प्रश्नों के समाधान कोड की विशिष्ट पंक्तियां थीं, जिन्हें मैं अपनी आवश्यकताओं के अनुसार अनुकूलित नहीं कर सका।nginx whitelist

मेरे पास कोडिनेटर इंस्टॉलेशन है, और मैं अपाचे से nginx में माइग्रेट करने का प्रयास कर रहा हूं। हालांकि, अपाचे में .htaccess बहुत सरल था: यह श्वेतसूची लेगा, और index.php पर बाकी सब कुछ फिर से लिख देगा।

RewriteEngine on 
RewriteCond $1 !^(index\.php|css|images|core|uploads|js|robots\.txt|favicon\.ico) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

हालांकि nginx में मुझे पता है, तो और try_files निर्देशों के रूप में अच्छी तरह से स्थानों के साथ चारों ओर खिलवाड़, कोई लाभ नहीं हुआ के रूप में की कोशिश की है,। मैं अभी भी नया हूं कि कैसे nginx सर्वर कॉन्फ़िगरेशन पढ़ता है, और ऑनलाइन ट्यूटोरियल कुछ हद तक भ्रमित करने के लिए उलझन में थे।

अतिरिक्त, index.php वेब रूट में नहीं होगा, लेकिन उपनिर्देशिका server में होगा।

इस वजह से

, मैं भी/सर्वर निर्देशिका के लिए मत जाओ के साथ शुरुआत यकीन है कि यहां तक ​​कि यूआरआई अनुरोध करने के लिए की जरूरत है, लेकिन index.php

के लिए यह अब तक मेरी nginx आभासी मेजबान विन्यास है:

server { 
    listen 80; 
    server_name example.com; 

    root /home/example/public_html; 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 


    location/{ 
     index index.htm index.html index.php; 
    } 

    location ~ \.php$ { 
     fastcgi_pass  unix:/var/run/php-fpm/example.sock; 
     include    fastcgi_params; 
     fastcgi_param  PATH_INFO $fastcgi_script_name; 
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 

    } 

    location ~* ^.*(/|\..*) { 
     try_files $uri $uri/ /server/index.php; 
    } 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

जो अनुरोधों को index.php पर रीडायरेक्ट करने में मदद करता है, लेकिन इसमें श्वेतसूची नहीं है। मैं इसकी सराहना करता हूं अगर कोई भी प्रत्येक भाग के बारे में एक संक्षिप्त विवरण के साथ एक कामकाजी उदाहरण उत्पन्न कर सकता है।

उत्तर

12

मैं इसे प्राप्त करने के लिए location ब्लॉक में $uri चर और if का उपयोग करूंगा।

location/{ 
    if ($uri !~ ^/(index\.php|css|images|core|uploads|js|robots\.txt|favicon\.ico)) { 
     rewrite^/server/index.php last; 
    } 
} 

इसके अलावा, pathinfo security problems, (discussion) के लिए के रूप में यह location ~ \.php$ ब्लॉक करने के लिए

try_files $uri =403; 
fastcgi_split_path_info ^(.+.php)(.*)$; 

जोड़ने के लिए एक अच्छी आदत है।

+0

धन्यवाद, यह चाल है! मैं pathinfo चीज भी देखूँगा, यह दिलचस्प लगता है। – xiankai

+2

http://wiki.nginx.org/IfIsEvil http://wiki.nginx.org/Pitfalls – VBart

+0

IfIsEvild दस्तावेज़ों के अनुसार, पुनः लिखें ... अंतिम; सुरक्षित है, लेकिन सुझाव हैं (बेशक, यह किसी तरह का विकी है) का स्वागत है। – complex857