सबफ़ोल्डर्स में नेगनेक्स प्रोजेक्ट्स


11

मैं अपने nginx कॉन्फ़िगरेशन से निराश हो रहा हूं और इसलिए मैं एक ही रूट में उप-निर्देशिकाओं से कई प्रोजेक्ट्स को परोसने के लिए अपनी कॉन्फिग फाइल लिखने में मदद मांग रहा हूं। यह वर्चुअल होस्टिंग नहीं है क्योंकि वे सभी एक ही मेजबान मूल्य का उपयोग कर रहे हैं। शायद एक उदाहरण मेरे प्रयास को स्पष्ट करेगा:

  • अनुरोध से 192.168.1.1/सेवा करनी चाहिएindex.php/var/www/public/
  • अनुरोध से 192.168.1.1/wiki/सेवा करनी चाहिएindex.php/var/www/wiki/public/
  • अनुरोध से 192.168.1.1/blog/सेवा करनी चाहिएindex.php/var/www/blog/public/

ये प्रोजेक्ट PHP का उपयोग कर रहे हैं और fastcgi का उपयोग करते हैं।

मेरा वर्तमान कॉन्फ़िगरेशन बहुत न्यूनतम है।

server {
    listen 80 default;
    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

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

    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

मैंने विभिन्न चीजों के साथ कोशिश की है aliasऔर rewriteफास्टैगी के लिए चीजों को सही ढंग से सेट करने में सक्षम नहीं था। ऐसा लगता है स्थान ब्लॉक लेखन और डुप्लिकेट करने की तुलना में एक अधिक सुवक्ता तरह से होना चाहिए root, index, SCRIPT_FILENAME, आदि

मुझे सही दिशा में ले जाने के लिए किसी भी संकेत की सराहना की जाती है।


जिज्ञासा से बाहर, आप किस URL पर फ़ाइल /var/www/public/wiki/fin.html पर पहुंचने में सक्षम होने की उम्मीद करेंगे?
नाटाकाडो

यह एक अच्छा बिंदु है, natacado। मुख्य सार्वजनिक निर्देशिका बस कुछ विविध फ़ाइलें होगी और वास्तव में कभी भी उपयोग नहीं की जानी चाहिए। यह एक आंतरिक सेट अप है इसलिए मेरा उस पर नियंत्रण होगा। उम्मीद है कि हमें इसका पता नहीं लगाना होगा :)
टिमोथी

जवाबों:


16

चूंकि आपकी परियोजनाएं वास्तव में एक ही मूल में नहीं हैं, इसलिए आपको इसके लिए कई स्थानों का उपयोग करना होगा

location /wiki {
    root /var/www/wiki/public;
}

location ~ /wiki/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
}

location /blog {
    root /var/www/blog/public;
}

location ~ /blog/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/blog/public$fastcgi_script_name;
}

इसके अलावा, fastcgi_index को अपनी fastcgi_params फ़ाइल में रखें और इसे सर्वर स्तर पर शामिल करें, इस तरह से आप अपने php स्थानों को यथासंभव छोटा रख सकते हैं।


1
यह बिल्कुल उसी प्रकार का कॉन्फ़िगरेशन था जिससे मैं बचने की उम्मीद कर रहा था ... दोहराव। काश, अगर यह "उचित" है कि मैं क्या करूँगा। आपकी मदद के लिए धन्यवाद, मार्टिन!
टिमोथी

7

स्थान + उपनाम द्वारा हल:


location / {
   root /var/www/public;
   index index.php;
}
location /blog/ {
   alias /var/www/blog/public/;
   index index.php;
}
location /wiki/ {
   alias /var/www/wiki/public/;
   index index.php;
}

location ~ \.php$ {
   #your fastcgi configuration here 
}


0

यहाँ मैंने क्या कोशिश की, http://programmersjunk.blogspot.com/2013/11/nginx-multiple-sites-in-subdirectories.html पर अधिक जानकारी

    location /Site1/ {
            root /usr/share/nginx/www/Site1;
           try_files $uri $uri/ /index.php?$query_string;
    }

    # the images need a seperate entry as we dont want to concatenate that with index.php      
    location ~ /Site1/.+\.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
            root /usr/share/nginx/www/Site1;
    }
    # pass the PHP scripts to FastCGI server
    location ~ /Site1/.+\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            allow 127.0.0.1;
    #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #       # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
    }

location /Site3/ {
            root    /usr/share/nginx/www/Site3;
    }

    # pass the PHP scripts to FastCGI server
    location ~ /Site3/.+\.php$ {
            allow 127.0.0.1;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            #we are directly using the $request_filename as its a single php script
            fastcgi_param SCRIPT_FILENAME $request_filename;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.