Logo NginxNell'ultima reinstallazione del PC che uso per sviluppare ho voluto fare il passaggio da Apache2 a Nginx, il proxy diventato uno dei webserver più popolari, per i suoi effettivi vantaggi in termini di prestazioni.

Insomma è giunto il momento per fare l'upgrade, entrare in contatto stretto con questo nuovo prodotto, studiarlo, odiarlo ed amarlo come facciamo sempre con tutti i prodotti open.

Come ho scritto recentemente ci appoggiamo al framework PHP Yii per lo sviluppo delle nostre webapp, quindi la questione in questo caso è: la mia vecchia webapp, nella posizione in cui sta (~/work/), funzionerà ancora?

 La risposta ovviamente è: non al primo colpo! Altrimenti non ci sarebbe nemmeno gusto... Un po' di background...

Come detto sopra sviluppo in una sottodirectory della mia home, dove ci sono vari progetti. Nel caso di Yii uso quella funzionalità per cui posso creare un index file personalizzato che punta ad un config diverso da quello di produzione, in modo da vedere ovviamente il mio DB locale. 
Nel progetto ho abilitato l'url rewriting, il che significa che il file index.php è nascosto. Cosa comporta? Che esiste una regola del webserver che fa puntare un url ad un file PHP in grado di gestire la richiesta. In Apache2 avevo queste direttive:

<Directory /var/www/work/management_site/>
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order allow,deny
allow from all
DirectoryIndex index-maxxer.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index-maxxer.php/$1 [L,QSA]
</Directory>

 Il mio nginx è già in grado di interpretare le pagine PHP usando PHP-FPM, ma di default legge il file index.php. Ed effettivamente questo comportamento va bene per tutti gli altri progetti, ma non per questo. Dopo alcuni tentativi e l'aiuto della mailing list, ecco il risultato:

server {
 
    [...]

    location /work/management_site/ {
        location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
        }   
        set $yii_bootstrap "index-maxxer.php";
        index index-maxxer.php;
        try_files $uri $uri/ /work/management_site/index-maxxer.php?$args;
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }   

        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index-maxxer.php;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;
    }   
}

 Ed ecco che per l'url http://localhost/work/management_site/ Nginx punterà a index-maxxer.php invece che a index.php.

We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information