progetti nginx in sottocartelle


10

Sono frustrato dalla mia configurazione di nginx e quindi sto chiedendo aiuto per scrivere il mio file di configurazione per servire più progetti da sottodirectory nella stessa radice. Questo non è hosting virtuale in quanto utilizzano tutti lo stesso valore host. Forse un esempio chiarirà il mio tentativo:

  • la richiesta 192.168.1.1/dovrebbe servire index.phpda/var/www/public/
  • la richiesta 192.168.1.1/wiki/dovrebbe servire index.phpda/var/www/wiki/public/
  • la richiesta 192.168.1.1/blog/dovrebbe servire index.phpda/var/www/blog/public/

Questi progetti usano PHP e usano fastcgi.

La mia configurazione attuale è molto minimale.

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

Ho provato varie cose con aliase rewritema non sono stato in grado di impostare le cose correttamente per FastCGI. Sembra che ci dovrebbe essere un modo più eloquente di scrivere blocchi di posizione e la duplicazione root, index, SCRIPT_FILENAME, etc.

Sono apprezzati tutti i suggerimenti per farmi andare nella giusta direzione.


Per curiosità, quale URL ti aspetteresti di poter accedere a un file /var/www/public/wiki/foo.html?
Natacado,

È un buon punto, Natacado. la directory pubblica principale sarà solo un paio di file vari e non dovrebbe mai essere realmente usata comunque. È un sistema interno quindi ne avrò il controllo. Speriamo di non doverlo scoprire :)
Timothy,

Risposte:


16

Poiché i tuoi progetti non sono effettivamente nella stessa radice, devi utilizzare più posizioni per questo.

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

Inoltre, inserisci fastcgi_index nel tuo file fastcgi_params e includilo a livello di server, in questo modo mantieni le tue posizioni php il più piccole possibile.


1
Questo era esattamente il tipo di configurazione che speravo di evitare ... duplicazione. Ahimè, se questo è "corretto" di quello che dovrei fare. Grazie per il tuo aiuto, Martin!
Timothy,

7

Risolve per posizione + alias:


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

Ecco cosa ho provato, maggiori dettagli su 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;
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.