Posts Tagged ‘php-fpm’

Rularea VirtualHosts ca useri separati (pool-uri separate) in Apache cu php5-FPM si Ubuntu/Debian

phpapcIn acest tutorial voi prezenta modul de rulare a php-ului cu FastCGI si a VirtualHosturilor folosind pool-uri separate cu useri separati.

Pentru ca este un server pe care vor rula si baze de date, eu am instalat si MySQL. Asadar:

apt-get install mysql-server mysql-client

unde se urmeaza procedura instalarii alocand parola pentru contul root la MySQL.

Acum incepe instalarea propriu-zisa pentru apache, php5, mysql si php5-fpm.

apt-get install apache2-mpm-worker
apt-get install libapache2-mod-fastcgi php5-fpm php5 php5-mysql

, iar dupa finalizarea instalarii trebuie dat enable la modulele instalate; actions, fastcgi si alias.

a2enmod actions fastcgi alias

Inainte de a incepe configurarile trebuie precizat ca voi rula un VirtualHost folsind grupul web si userul web_test evident ca parte din acest grup. Prima data creez grupul si userul si apoi voi trece la partea de configurare:

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

Acum mai treuie sa modificam in VirtualHost unde adaugam urmatoarele linii intre <VirtualHost> si </VirtualHost>:

<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9001 -pass-header Authorization
</IfModule>

astfel incat sa arate in felul urmator:

<VirtualHost *:80>
ServerName web_test

DocumentRoot /home/web_test
DirectoryIndex index.php index.html

ErrorLog „/var/log/apache2/web_test_error_log”
CustomLog „/var/log/apache2/web_test_access_log” combined

<Directory „/home/web_test/”>
AllowOverride All
</Directory>

<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9001 -pass-header Authorization
</IfModule>
ServerSignature Off
</VirtualHost>

De asemenea trebuie configurat php-fpm:

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

unde am adaugat:

[web_test]
listen = 127.0.0.1:9001
user = web_test
group = web
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

Aici se observa ca fastCGi face diferenta intre useri folosind hostnameul si portul pe care asculta, deci fiecare pool care ruleaza ca user separat trebuie sa aiba si un port diferit. Testarea se face ruland phpinfo(); si accesandu-l din browser. In cazul meu nu a functionat corect pentru ca nu gasea fisierul php5-fcgi asa ca a trebuit sa il creez manual ruland:

touch /usr/lib/cgi-bin/php5-fcgi

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');
?>

Optional am instalat si php-apc ca si accelerator al aplicatiilor care ruleaza cu php.

Instalare Nginx cu php5-FPM in Ubuntu 12.04 LTS

Instalarea Nginx:

apt-get install nginx

Instalarea php5-FPM:

apt-get install php5-common php5-cli php5-fpm

Pornirea Nginx:

/etc/init.d/nginx start

Enable php-FPM:

vim /etc/nginx/sites-available/default

unde trebuie sa decomentam liniile referitoare la „location ~ \.php$ {” astfel incat sa arate asa:

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}

La final restartam nginx si php-fpm ruland:

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

Testarea se face cu un info.php sau ruland whoami din php.

In ubuntu 12.10 sau o distributie mai noua trebuie inlocuita linia: fastcgi_pass 127.0.0.1:9000; cu fastcgi_pass unix:/var/run/php5-fpm.sock;

srv StandDuPp
Articole recente