alt klasörlerde nginx projeleri


11

Ben nginx yapılandırma ile sinirli alıyorum ve bu yüzden aynı kök alt dizinlerden birden fazla proje sunmak için benim yapılandırma dosyası yazma yardım istiyorum. Hepsi aynı ana bilgisayar değerini kullandıkları için bu sanal barındırma değildir. Belki bir örnek girişimimi netleştirecek:

  • istek şu adresten 192.168.1.1/sunulmalıdır index.php:/var/www/public/
  • istek şu adresten 192.168.1.1/wiki/sunulmalıdır index.php:/var/www/wiki/public/
  • istek şu adresten 192.168.1.1/blog/sunulmalıdır index.php:/var/www/blog/public/

Bu projeler PHP kullanıyor ve fastcgi kullanıyor.

Mevcut yapılandırmam çok az.

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;
    }
}

Ben çeşitli şeyler denedim aliasve rewritefastcgi için şeyler doğru ayarlanamadı. Konum blokları yazma ve çoğaltma daha anlamlı bir şekilde olmalıdır görünüyor root, index, SCRIPT_FILENAMEvb

Beni doğru yöne yönlendirmek için herhangi bir işaretçi takdir edilmektedir.


Merak ettikten sonra, /var/www/public/wiki/foo.html adresindeki bir dosyaya hangi URL'ye erişmeyi beklersiniz?
natacado

Bu iyi bir nokta, natacado. ana ortak dizin sadece birkaç çeşitli dosya olacak ve asla gerçekten kullanılmamalıdır. Bu dahili bir kurulum, bu yüzden onu kontrol edeceğim. Umarım bulmak zorunda kalmayacağız :)
Timothy

Yanıtlar:


16

Projeleriniz aslında aynı kökte olmadığından, bunun için birden fazla konum kullanmalısınız .

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;
}

Ayrıca, fastcgi_index dosyasını fastcgi_params dosyanıza koyun ve sunucu düzeyinde ekleyin, böylece php konumlarınızı mümkün olduğunca küçük tutun.


1
Bu tam olarak yinelemeyi umduğum yapılandırma türüydü. Ne yazık ki, eğer bu benim yapacağımdan daha uygunsa. Yardımın için teşekkürler Martin!
Timothy

7

Konuma + takma ada göre çözer:


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

İşte denedim, daha fazla bilgi 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;
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.