Howto: Debian Squeeze+Nginx+WordPress

Nginx è uno tra i webserver open source che si sta diffondendo di più tra i sistemisti che ricerchino performance elevate e un consumo di risorse inferiore rispetto ad Apache (ma anche ad alternative “minimaliste” con Lighttpd). Il grosso neo di nginx è la poca documentazione, sul sito ufficiale c’è davvero poco, la cosa sarebbe in parte compensata da diversi articoli che però sono tutti più o meno imprecisi nella descrizione delle giuste configurazioni da apportare al webserver, soprattutto quando si vuole far funzionare WordPress. Quello che riporto è un howto, frutto dell’esperienza che ho avuto installando nginx su un VPS (sull’ottimo Quickweb), che spero sia di aiuto a quanti vogliano installare nginx su Debian Squeeze e servire pagine generate da WordPress.

La prima cosa da fare su Debian Squeeze è aggiungere il repository dotdeb al file “sources.list” per poter installare la versione 1.0 di nginx. Per farlo basterà dare da terminale come utente root i seguenti comandi:

nano /etc/apt/sources.list

aggiungiamo la seguente riga:

deb http://packages.dotdeb.org stable all

a questo punto dobbiamo aggiungere la chiave GnuPG così:

wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | sudo apt-key add -
rm dotdeb.gpg

aggiorniamo il tutto con APT:

apt-get update

Adesso possiamo installare php5, php5-fpm, cioè il FastCGI Process Manager che ci consentirà di servire pagine PHP attraverso nginx, e ovviamente nginx stesso:

apt-get install php-apc php-auth php-net-smtp php-net-socket php-pear php5 php5-cgi php5-cli php5-common php5-curl php5-dev php5-gd php5-imagick php5-imap php5-mcrypt php5-mysql php5-pspell php5-sqlite php5-suhosin php5-xmlrpc php5-xsl php5-fpm nginx

fatto questo potremo installare anche MySQL server e client (in fase di installazione di MySQL server dovremo scegliere una password da impostare per l’utente root)

apt-get install mysql-server mysql-client

Impostiamo delle configurazioni personalizzate a nginx andando a modificare alcuni valori nel file di configurazione nginx.conf:

nano /etc/nginx/nginx.conf

client_max_body_size 20M;
client_body_buffer_size 128k;

a questo punto possiamo rimuovere il virtual host di default di nginx e crearne uno nuovo per il sito che dovremo servire:

cd /etc/nginx/sites-enabled
rm default

creiamo un file per il nostro sito

nano /etc/nginx/sites-available/www.bufferoverflow.it

Incolliamoci la seguente configurazione:

server {
listen 80;
server_name www.bufferoverflow.it bufferoverflow.it;

access_log /var/log/bof.access_log;
error_log /var/log/bof.error_log;

root /var/www/htdocs/www.bufferoverflow.it;
index index.php index.htm index.html;

try_files $uri $uri/ /index.php?q=$uri&$args;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/htdocs/www.bufferoverflow.it$fastcgi_script_name;
include fastcgi_params;
}
}

La riga “try_files $uri $uri/ /index.php?q=$uri&$args;” è fondamentale per il funzionamento di WordPress come anche le righe da “location ~ .php$ {” a “include fastcgi_params;” basilari per il funzionamento di php5-fpm.

Creiamo a questo punto un nuovo link simbolico per il virtual host creato sotto “sites-enabled“:

ln -s /etc/nginx/sites-available/www.bufferoverflow.it /etc/nginx/sites-enabled/www.bufferoverflow.it

Configuriamo php5-fpm andando a modificare il file “/etc/php5/fpm/pool.d/www.conf”, qui la scelta fondamentale da fare è se rendere FastCGI dinamico o statico, personalmente dovendo agire su un VPS con solo 300 MB di RAM ho preferito impostare come statico php5-fpm in modo tale da non trovarmi con un consumo di RAM eccessivo, inoltre ho limitato il numero di processi generati, questo è il valore da variare:

; Choose how the process manager will control the number of child processes.
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; Note: This value is mandatory.
pm = static

inoltre ho variato il numero massimo di processi figli generati impostando “5”:

pm.max_children = 5

Molto importante è decidere se php5-fpm ascolterà su una porta o su un socket, personalmente ho optato al momento per farlo ascoltare sulla porta 9000, quella di default, su localhost, la riga è questa:

listen = 127.0.0.1:9000
;listen = /dev/shm/php-fastcgi.socket #l'ascolto su un socket dovrebbe migliorare le performance ma ancora non ho provato

Potete vedere il mio file di configurazione su Pastebin.

Apportate le dovute configurazioni dovrete riavviare sia nginx che php5-fpm.

Restart di nginx:

/etc/init.d/nginx restart

Restart php5-fpm:

/etc/init.d/php5-fpm restart

A questo punto dovremo installare WordPress, tralascio le operazioni da fare per l’installazione ma segnalo la procedura di creazione del database da linea di comando con MySQL client. La cosa importante per far funzionare adeguatamente i pretty permalink è ricorrere all’installazione di un plugin che consente di eliminare “index.php” dalle URL consentendo di lasciare la struttura di permalink scelta da noi, il plugin è nginx compatibility.

In conclusione, consiglio qualche link che mi ha aiutato notevolmente nell’installazione e configurazione di nginx:

  1. nginx + php-fpm + debian squeeze tutorial – the fastest way to host php!
  2. Howto nginx + wordpress + ubuntu shortest setup
  3. nginx wiki
  4. How To: Install NginX, PHP-FPM, MySQL, PHP 5.3.3 & WordPress on Ubuntu (Part 2)
  5. Installing Nginx With PHP5 And MySQL Support On Debian Lenny

Un commento su “Howto: Debian Squeeze+Nginx+WordPress

I commenti sono chiusi.