Habilitar PHP para um subdomínio em NGINX

Lá vou eu de novo – principalmente com um lembrete para mim mesmo.

Estamos usando principalmente aplicativos Rails e para isso a configuração NGINX / Unicorn. Recentemente, tive que instalar a plataforma analítica Piwik, que é um aplicativo PHP. Eu só quero suporte a PHP para seu subdomínio.

(Para o que segue, presumo que o NGINX e o PHP (e o PHP-FPM, o FastCGI Process Manager para PHP, é claro) já estão instalados no sistema.

A configuração mais básica para um vhost NGINX usando PHP é:

server {
listen
80;
server_name piwik
.example.de;
root
/home/brewster/web/piwik;
index index
.php;
location
~ .php$ {
fastcgi_pass
127.0.0.1:9000;
fastcgi_index index
.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
;
include fastcgi_params
;
}
}

Eu tive alguns problemas com

fastcgi_pass 127.0.0.1:9000;

então eu verifiquei se algo acontece na porta 9000

lsof -i tcp:9000

Nada acontece aqui, então eu tive que mudar o arquivo de configuração PHP-FPM, que está localizado (se você estiver usando Ubuntu Linux) em

/etc/php5/fpm/php-fpm.conf 

No final, adiciono essas linhas

[piwik]

listen
= 127.0.0.1:9000
listen
.backlog = -1
listen
.allowed_clients = 127.0.0.1

; Unix user/group of processes
user
= www-data

; Choose how the process manager will control the number of child processes.
pm
= dynamic
pm
.max_children = 50
pm
.start_servers = 10
pm
.min_spare_servers = 5
pm
.max_spare_servers = 10
pm
.max_requests = 100

; Pass environment variables
env
[HOSTNAME] = $HOSTNAME
env
[PATH] = /usr/local/bin:/usr/bin:/bin
env
[TMP] = /tmp
env
[TMPDIR] = /tmp
env
[TEMP] = /tmp

Depois de reiniciar NGINX e PHP-FPM

/etc/init.d/php5-fpm start
/etc/init.d/nginx restart

Eu tinha Piwik instalado e funcionando.