luni, 23 februarie 2009

Configurare PHP si lighttpd in FastCGI

Articolul următor face parte dintr-o colecție de articole menită să ofere o soluție de hosting web bazată pe vsftpd, lighttpd, PHP și MySQL.

Pentru a rula PHP cu lighttpd, trebuie ca PHP-ul să fie compilat cu suport de CGI/FastCGI. Vom avea nevoie de lang/php5 alături de lang/php5-extensions. Flag-urile de compilare pentru php5 sunt:
CGI
SUHOIN
MULTIBYTE
REDIRECT
DISCARD
FASTCGI
PATHINFO

După compilare, binarul php-cgi ar trebui să se găsească în /usr/local/bin/. Acesta este binarul pe care îl vă apela lighttpd-ul pentru a crea o conexiune de tip socket unix. Extensiile se instalează după bunul plac, ținând cont că nu foarte mulți useri vor folosi Interbase sau cine știe ce altă bază de date.

Într-un articol anterior, explicam modul de configurare a lighttpd-ului pentru a servi pagini pentru domenii virtuale. În vom folosi ca bază pentru acest articol. De asemenea, fiecare user va avea în homedir-ul lor (ex: /home/myuser/), un fișier cu numele php.ini care să conțină următoarele linii:
[PHP]
open_basedir = /home/myuser/pages/
expose_php = Off
error_reporting = E_ALL
log_errors = On
error_log = /home/myuser/logs/php.log

Aceste linii limitează PHP-ul user-ului myuser la directorul /home/myuser/pages/, încearcă să ascundă urmele de PHP, activează logarea de erori în fișierul /home/myuser/logs/php.log. Asigurați-vă că acesta are drepturi de scriere pentru utilizatorul www sub care ruleaza lighttpd-ul.
mkdir -p /home/myuser/logs
touch /home/myuser/logs/php.log
chown www:www /home/myuser/logs/php.log

Acum ce a rămas de făcut este să adăugăm o intrare în fiecare vhost care să facă lighttpd-ul care pentru fiecare fișier .php să execute php-cgi dându-i ca parametru, fișierul php.ini al domeniului respectiv.

Tot ce trebuie să mai facem este să definim un vhost pentru mydomain.com și să activăm un server fastcgi, care să pornească php-cgi cu un fișier php.ini specific acestui user. De ce dorim un php.ini specific fiecărui user? Pentru că dorim să-i setăm fiecărui user variabila open_basedir la directorul lui (ex: /home/myuser/pages/). De asemenea, mai tărziu, vă voi arăta cum se pornește mysql-ul astfel încât, fiecare user să aibă cluster-ul lui. În vhost-ul mydomain.com adăugați următoarele directive, după directiva accesslog.filename deja existentă:
fastcgi.server = ( "php" => ((
"bin-path" => "/usr/local/bin/php-cgi -c /home/myuser/php.ini",
"socket" => "/var/run/php/myuser.socket"
))

0 comentarii: