Etikettarkiv: php-fpm

Bättre prestanda med Unix domain sockets

Ett sätt att öka prestandan när det gäller kommunikation internt inom ditt eget system är att använda Unix domain sockets. Istället för att använda TCP för att kommunicera internt mellan processer på ditt system så bör du med fördel använda Unix-sockets då detta påverkar prestandan positivt.

Några exempel på där du kan använda Unix-sockets är i Redis samt om du använder Nginx och PHP-FPM. För att använda Unix-sockets i Redis behöver du enbart lägga till följande rad i redis.conf:

unixsocket /tmp/redis.sock

Och för att använda denna socket när du ansluter kan variera lite beroende på vilken klient du använder, men på följande sätt gör jag:

$redis->connect(’/tmp/redis.sock’);

Glöm inte att rättigheterna på /tmp/redis.sock måste vara så att både Redis samt klienten kan läsa. Nu över till hur man konfigurerar Nginx och PHP-FPM att använda sockets.

Första steget är att konfigurera FPM att lyssna på en socket, och detta görs i konfigurationsfilen. Min återfinnes här:

/etc/php5/fpm/pool.d/www.conf

Och i denna fil ändrar jag där raden listen återfinnes så det ser ut något i stil med:

listen = /var/run/php5-fpm.sock

Och nästa steg är att ändra så att Nginx vet att vi har en Unix-socket för PHP-exekvering och det kan göras genom att lägga till eller ändra din ”upstream” om du använder en sådan:

upstream php {
        server unix:/var/run/php5-fpm.sock;
}

Och sedan använda fastcgi_pass php på följande sätt till varje server:

     location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include /etc/nginx/fastcgi_params;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }

Vill du fördjupa dig ännu mer gällande Unix sockets kan du läsa här. MySQL och PHP skall enligt manualsidan automatiskt välja Unix sockets om det finns tillgängligt vilket det bör göra standardmässigt.

Så kommer du igång med Nginx + PHP-FPM

Nginx är en supersnabb webbserver/proxy skriven av ryssen Igor Sysoev och används av exempelvis WordPress.com och Loopias höghastighetstjänst Autobahn. I dagsläget så använder ca 8% av världens webbservar just Nginx som webbserver eller front-end proxy.

Nginx är även mitt självklara val vid installation av nya servrar, men dock är installationen inte helt enkel eftersom det inte finns inbyggt PHP-stöd vilket är det primära programmeringsspråk jag använder vid webbutveckling. Nginx är således beroende av exempelvis PHP-FPM (FastCGI Process Manager for PHP).

Installation

Först och främst så ska vi lägga till dotdeb i vår sources.list genom följande kommando:

$ sudo sh -c ’echo ”deb http://php53.dotdeb.org stable all” >> /etc/apt/sources.list’

Lägg sedan till rätt nycklar:

$ gpg –keyserver keys.gnupg.net –recv-key 89DF5277

$ gpg -a –export 89DF5277 | sudo apt-key add –

Nu kan vi synkronisera paketlistorna:

$ sudo apt-get update

Sen måste vi lägga till några paketberoenden:

$ wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb

$ wget http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb

$ sudo dpkg -i *.deb

Och sist men inte minst så installerar vi paketen via apt:

$ sudo apt-get install php5-fpm php5-cgi nginx

Sen måste nginx konfigureras och lättast är att utgå från den standard-konfiguration som medföljer och återfinns i filen /etc/nginx/sites-available/default. Om du vill se hur min konfigg-fil ser ut kan du utgå från denna.

Starta sedan om php-fpm samt nginx om de inte redan startas:

$ sudo sh /etc/init.d/nginx restart

$ sudo sh /etc/init.d/php5-fpm restart

Om php5-fpm klagar om pm.min_spare_servers eller liknande så måste du eventuellt ta bort en kommentering i filen /etc/php5/fpm/php5-fpm.conf

Thats’s it! Återkommer om jag hittar något lättare sätt att komma igång med nginx och php-fpm.