LNMP: Nginx con PHP e MySQL su Ubuntu

In questo articolo vedremo come installare il web server Nginx col supporto al database MySQL e a PHP. In un articolo precedente è stato descritto come installare Nginx dai sorgenti, mentre in questo verrà esposto il modo più semplice e più sicuro, almeno per i meno esperti, di installare il web server assieme a MySQL e PHP.

La distribuzione scelta è Ubuntu 10.04 Server. Essa mette a disposizione una versione molto aggiornata di Nginx e soprattutto permette di non dover installare compilatori o strumenti di configurazione come make sul sistema.

La prima cosa da fare è aggiornare il sistema operativo utilizzando il classico comando:

sudo apt-get update && apt-get upgrade

Poi si può passare all’installazione di MySQL:

sudo apt-get install mysql-server

Verranno mostrati dei pacchetti aggiuntivi da installare. Ad un certo punto viene chiesto di inserire la password di root per MySQL, inserirne una differente dalla password di root di Debian e annotarla da qualche parte.

[ad#midarticlequadr]Ora installare anche PHP5:

sudo nginx php5-cli php5-cgi spawn-fcgi

sudo echo “console output” >> /etc/init.d/nginx

sudo update-rc.d nginx defaults

sudo /etc/init.d/nginx start

Puntando col browser all’indirizzo del server sarà possibile vedere una semplice pagina che mostra la scritta: Welcome To Nginx!

Tuttavia non è possibile ancora utilizzare PHP, bisogna configurare spawn-fcgi. Aprire il file php-fastcgi

sudo nano /usr/bin/php-fastcgi

e inserire all’interno le due righe:

#!/bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -f /usr/bin/php5-cgi

Rendere lo script eseguibile mediante il comando:

sudo chmod a+x /usr/bin/php-fastcgi

Creare un file che possa essere eseguito all’avvio del sistema operativo:

sudo nano /etc/init.d/php-fastcgi

Inserire nel file il seguente codice:

#!/bin/bash
PHP_SCRIPT=/usr/bin/php-fastcgi
FASTCGI_USER=www-data
RETVAL=0
case "$1" in
start)
su - $FASTCGI_USER -c $PHP_SCRIPT
RETVAL=$?
;;
stop)
killall -9 php5-cgi
RETVAL=$?
;;
restart)
killall -9 php5-cgi
su - $FASTCGI_USER -c $PHP_SCRIPT
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
console output

Il codice serve per permettere di gestire php5. Ora è necessario rendere eseguibile lo script e lanciarlo ad ogni avvio:

chmod 755 /etc/init.d/php-fastcgi
sudo update-rc.d php-fastcgi defaults
sudo /etc/init.d/php-fastcgi start

Fortunatamente MySql non necessita di modifiche ma adesso è possibile creare il proprio sito come normalmente si fa avendo però cura di inserire nel file di configurazione alcune righe che abilitino php:

sudo nano /etc/nginx/site-availables/miosito

e inserire (sostituire misito.xz con il proprio dominio):

server {
listen   80;
server_name www.miosito.xz miosito.xz;
access_log /srv/www/www.miosito.xz/logs/access.log;
error_log /srv/www/www.miosito.xz/logs/error.log;
location / {
root   /srv/www/www.miosito.xz/public_html;
index  index.html index.htm;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param  SCRIPT_FILENAME  /srv/www/www.miosito.xz/public_html$fastcgi_script_name;
}
}

8 pensieri riguardo “LNMP: Nginx con PHP e MySQL su Ubuntu

  1. Alga ha detto:

    Ciao! sai dirmi cosa hanno di diverso apache e Nginx? o perlomeno per quale motivo preferirlo ad apache ?

    grazie!

  2. valent ha detto:

    Occupa vistosamente meno RAM dopo parecchie ore di uso.
    Questo significa che se devi noleggiare un vps puoi risparmiare un po’ di soldi prendendo una soluzione che è dotata di minor ram.
    Poi alcuni test hanno mostrato che è molto più rapido a soddisfare le richieste degli utenti come puoi vedere da quest’immagine: http://farm4.static.flickr.com/3241/2298693485_df1606c495.jpg?v=0

  3. sadrac ha detto:

    Io ho già apache2 installato,solo che in seguito all’installazione di una piattaforma (che in automatico mi ha installato anche nginx) mi ritrovo ad avere come web server di default ( o localhost ) proprio nginx, e i file php non mi funzionano più. Come posso riconfigurare apache2 per farlo divenire server web principale e farlo convivere sulla stessa macchina con nginx?

  4. Stefano ha detto:

    Si, ma la configurazione è semplicemente disastrosa.
    Devi inserire un entry per il php ogni qualvolta hai un alias dove ci possono essere file php o vengono serviti in chiaro.
    In più configurarlo per gestire i file php chiamati con nome.php/parametro/parametro (che non hanno bisogno del mod_rewrite, normalmente) è un incubo (anche perchè, con una location come quella che hai messo tu, i file php chiamati con /parametro non vengono passati al php).
    Sinceramente trovo migliori cherokee o lighttpd.
    A meno che non offri contenuti statici, ovviamente.

  5. valent ha detto:

    L’importante che configuri nginx in modo che sia in ascolto su una porta diversa dalla 80. Quando fai una richiesta per una pagina web il tuo browser si collega all’ip del server e alla porta 80 (default). Tuttavia può essere un solo “programma” in ascolto su una porta quindi o c’è apache o nginx. Nel file di configurazione di Nginx c’è una riga
    listen 80;
    devi cambiare80 con un altro numero per esempio 8080. Il problema è che se ositi dei siti con nginx dovrai digitare un indirizzo tipo http://192.168.1.1:8080/index.html per poterli visualizzare

  6. valent ha detto:

    Hai ragione. Non è molto comodo.
    Grazie per aver riportato il tuo punto di vista.

  7. Daniele ha detto:

    @valent: buon articolo, potresti spiegare più in dettaglio gli script che inserisci per php-cgi?

    inoltre volevo puntualizzare che Nginx è molto più veloce di apache per quel che riguarda i file statici, ma per l’esecuzione del PHP risult invece un pò (anche se di poco) più lento di apache stesso…

  8. valent ha detto:

    Allora il primo script serve ad avviare in automatico php-fastcgi.
    Quando si usa il comando /usr/bin/php-fastcgi start, il programma parte quando si usa stop si ferma e restart lo riavvia.
    L’ultimo script non è uno script eseguibile ma il file di configurazione di nginx per abilitare un virtual host.
    Per index si intende il nome della pagina indice.

    La location php contiene delle configurazioni necessarie per collegare fastcgi-php con nginx
    Il server sta in ascolto sulla porta 80 e risponde per i domini http://www.miosito.xz miosito.xz.
    access_log e error_log sono i file dove sono salvati gli eventi (i log) che capitano.
    In location c’è il percorso dove sono posizionati le pagine html e php del sito. E’ più semplice lasciarla così come è, ma va modificata se si è fatta un’installazione personalizzata di php-fastcgi.

    Per l’ultima considerazione, sì forse è più lento di apache nel gestire php (se non si ottimizza) ma occupa meno memoria.

I commenti sono chiusi.

editoriale

Articolo precedente

Cercasi campioni omaggio
linux

Articolo successivo

Backup di un sito web