Rulare VirtualHosts ca useri separati (pool-uri separate) in Nginx cu php5-FPM si Ubuntu 12.04 LTS

nginx_logoIn tutorialul anterior am prezentat instalarea Nginx cu php5-FPM in Ubuntu 12.04 LTS. Procedura instalarii este destul de simpla, insa ceva mai complicata este rularea Virtualhost-urilor ca si useri separati, mai precis pentru fiecare user un pool in care va rula php-ul. Totusi fata de Apache, procedura este mai simpla, intrucat Nginx din start a fost gandit sa functioneze usor ca si proxy & load balancing server si sa ruleze la fel de usor php-ul ca si useri separati pentru ca dupa cum stim, este destul de outdated sa rulam toate siteurile de pe un server ca si userul www-data.

Astfel, configurarile pentru php-fpm se afla in folderul /etc/php5/fpm/pool.d. Daca ne uitam acolo avem deja creat www.conf care este atribuit sa ruleze cu userul www-data, respectiv 127.0.0.1:9000.

Daca vrem ca un alt VirtualHost sa ruleze ca si alt user afla tin alt grup, prima data trebuie sa creem userul si grupul. Voi creea grupul web si userul web_test ca si parte din grupul web:

groupadd web
useradd -s /bin/false -d /home/web_test -m -g web web_test

Acum trebuie sa creem virtualhost pentru siteul care va rula cu userul web_test.

vim /etc/nginx/sites-available/web_test

care trebuie sa arate cam asa:

server {
listen 80; ## listen for ipv4; this line is default and implied
# listen [::]:80 default ipv6only=on; ## listen for ipv6

root /home/web_test/www;
index index.html index.htm;

# Make site accessible from http://localhost/
server_name webtest.com www.web_test.com;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9001
#
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# try_files $uri =404;
# # NOTE: You should have „cgi.fix_pathinfo = 0;” in php.ini
#
# # With php5-cgi alone:
fastcgi_pass 127.0.0.1:9001;
# With php5-fpm:
#fastcgi_pass unix:/var/run/php5-fpm/web_test.sock;
fastcgi_index index.php;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}

Acum trebuie sa creem folderul php5-fpm unde se va crea socketul pentru siteul respectiv:

mkdir -p /var/run/php5-fpm

Urmeaza sa creem pool-ul pentru siteul web_test:

vim /etc/php5/fpm/pool.d/web_test.conf

unde adaugam:

[web_test]
listen = 127.0.0.1:9001
user = web_test
group = web
;request_slowlog_timeout = 5s
;slowlog = /var/log/php-fpm/slowlog-blog.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

este important aici sa fie definit un port diferit fata de cel implicit, mai precis pentru fiecare VirtualHost sa existe un port separat pe care fcgi sa asculte. Cel default, dupa cum se vede ruleaza fcgi cu 127.0.0.1:9000, iar pentru acesta web_test am alocat: 9001. Portul trebuie sa fie definit atat in pool cat si in VirtualHost.

Odata finalizate configurarile trebuie restartat atat nginx cat si php5-fpm:

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

Testarea:

O putem face fie din phpinfo, sau ruland whoami.

Pentru phpinfo: vim /home/web_test/www/info.php unde adaugam:

<?php phpinfo(); ?>

Pentru whoami: vim /home/web_test/www/whoami.php unde adaugam:

<?php
echo exec('whoami');
?>

Leave a Reply

srv StandDuPp
Articole recente