Nginx (pronunciato "engine x") è un server HTTP gratuito, open source e ad alte prestazioni. Nginx è noto per la sua stabilità, il ricco set di funzionalità, la configurazione semplice e il basso consumo di risorse. Questo tutorial mostra come installare Nginx su un server Ubuntu 8.10 con supporto PHP5 (tramite FastCGI) e supporto MySQL.
1 Nota preliminare
In questo tutorial utilizzo l'hostname server1.example.com con l'indirizzo IP 192.168.0.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.
2 Installazione di MySQL 5.0
Per installare MySQL, eseguiamo
apt-get install mysql-server mysql-client
Ti verrà chiesto di fornire una password per l'utente root di MySQL:questa password è valida per l'utente [protetto tramite posta elettronica] e [protetto tramite posta elettronica], quindi non è necessario specificare manualmente una password di root MySQL in seguito:
Nuova password per l'utente "root" di MySQL:<-- yourrootsqlpassword
Ripeti la password per l'utente "root" di MySQL:<-- yourrootsqlpassword
3 Installazione di Nginx
Nginx è disponibile come pacchetto per Ubuntu 8.10 che possiamo installare come segue:
apt-get install nginx
Avvia nginx in seguito:
/etc/init.d/nginx start
Digita l'indirizzo IP o il nome host del tuo server web in un browser (ad es. http://192.168.0.100) e dovresti vedere la pagina di benvenuto di nginx:
Per avviare nginx all'avvio, esegui
update-rc.d nginx defaults
4 Installazione di PHP5
Possiamo far funzionare PHP5 in nginx tramite FastCGI. Fortunatamente, Ubuntu fornisce un pacchetto PHP5 abilitato per FastCGI che installiamo in questo modo (insieme ad alcuni moduli PHP5 come php5-mysql di cui hai bisogno se vuoi usare MySQL dai tuoi script PHP):
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
Quindi apri /etc/php5/cgi/php.ini e aggiungi la riga cgi.fix_pathinfo =1 proprio alla fine del file:
vi /etc/php5/cgi/php.ini
[...] cgi.fix_pathinfo = 1
Non esiste un pacchetto demone FastCGI autonomo per Ubuntu, quindi utilizziamo il programma spawn-fcgi di lighttpd. Installiamo lighttpd come segue:
apt-get install lighttpd
Verrà visualizzato un messaggio di errore che dice che non è stato possibile avviare lighttpd perché la porta 80 è già in uso. È così che dovrebbe essere perché nginx è già in ascolto sulla porta 80. Esegui
update-rc.d -f lighttpd remove
in modo che lighttpd non si avvii all'avvio.
Abbiamo installato lighttpd perché abbiamo bisogno di un solo programma fornito con il pacchetto, /usr/bin/spawn-fcgi, che possiamo usare per avviare i processi FastCGI. Dai un'occhiata a
spawn-fcgi --help
per saperne di più.
Per avviare un demone PHP FastCGI in ascolto sulla porta 9000 su localhost e in esecuzione come utente e gruppo www-data, eseguiamo il seguente comando:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Ovviamente, non vuoi digitare quel comando manualmente ogni volta che avvii il sistema, quindi per fare in modo che il sistema esegua il comando automaticamente all'avvio, apri /etc/rc.local...
vi /etc/rc.local
... e aggiungi il comando alla fine del file (prima della riga di uscita):
[...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...]
5 Configurazione di nginx
La configurazione di nginx è in /etc/nginx/nginx.conf che apriamo ora:
vi /etc/nginx/nginx.conf
La configurazione è di facile comprensione (puoi saperne di più qui:http://wiki.codemongers.com/NginxFullExample e qui:http://wiki.codemongers.com/NginxFullExample2)
Innanzitutto (questo è facoltativo) aumenta il numero di processi di lavoro e imposta keepalive_timeout su un valore ragionevole:
[...] worker_processes 5; [...] keepalive_timeout 2; [...]
Gli host virtuali sono definiti nei contenitori del server {}. Il vhost predefinito è definito nel file /etc/nginx/sites-available/default - modifichiamolo come segue:
vi /etc/nginx/sites-available/default
[...] server { listen 80; server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...]
nome del server _; lo rende un vhost catchall predefinito (ovviamente puoi anche specificare un nome host qui come www.example.com).
Nella posizione / parte, ho aggiunto index.php alla riga dell'indice. root /var/www/nginx-default; significa che la radice del documento è la directory /var/www/nginx-default.
La parte importante per PHP è la stanza posizione ~ \.php$ {}. Decommentalo per abilitarlo. Assicurati di cambiare la riga fastcgi_param in fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; (sostituisci /var/www/nginx-default con la root del tuo vhost) perché altrimenti l'interprete PHP non troverà lo script PHP che chiami nel tuo browser.
Assicurati che ci siano degli spazi tra include e fastcgi_params; - nel file di default questa è scritta come una parola che è un bug.
Ora salva il file e riavvia nginx:
/etc/init.d/nginx restart
Ora crea il seguente file PHP nella radice del documento /var/www/nginx-default:
vi /var/www/nginx-default/info.php
<?php phpinfo(); ?>
Ora chiamiamo quel file in un browser (es. http://192.168.0.100/info.php):
Come vedi, PHP5 funziona e funziona tramite FastCGI, come mostrato nella riga dell'API del server. Se scorri più in basso, vedrai tutti i moduli che sono già abilitati in PHP5, incluso il modulo MySQL:
6 link
- nginx:http://nginx.net/
- Wiki di nginx:http://wiki.codemongers.com/Main
- PHP:http://www.php.net
- MySQL:http://www.mysql.com
- Ubuntu:http://www.ubuntu.com/