Nginx et PHP-FPM en chroot : Différence entre versions
De wikiGite
(Page créée avec « NGINX, PHP-FPM chrootés, sur Debian Squeeze Liens : http://publications.jbfavre.org/web/php-fpm-apps-server-nginx.fr = Installation = Ajouter le dépôt EPEL (Extra Packa... ») |
(Aucune différence)
|
Version du 27 octobre 2011 à 14:37
NGINX, PHP-FPM chrootés, sur Debian Squeeze
Liens : http://publications.jbfavre.org/web/php-fpm-apps-server-nginx.fr
Installation
Ajouter le dépôt EPEL (Extra Packages for Enterprise Linux) :
wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm rpm -ivH epel-release-5-4.noarch.rpm vi /etc/yum.repos.d/epel.repo, mettre enabled à 0
yum install --enablerepo=epel nginx yum install --enablerepo=remi php-fpm yum install --enablerepo=rpmforge mod_fastcgi
La configuration de PHP-FPM se trouve dans /etc/php-fpm.conf et /etc/php-fpm.d/* et celle de NGINX dans /etc/nginx et /usr/share/nginx.
dans /etc/nginx/nginx.conf, décommenter
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
Modifier éventuellement le port, au cas ou Apache est lancé aussi, et utilise déjà le port 80. Pour l'exemple nous utiliserons :
server { listen 8080; ....
et vérifier que nginx ne se lancera pas en tant que root
user nginx;
Lancer nginx et php-fpm.
Tester :
echo "<?php phpinfo();" > /usr/share/nginx/html/phpinfo.php
et afficher phpinfo.php dans un navigateur.
Si APC est installé, copier la page de stats
cp /usr/share/doc/php-pecl-apc-3.1.7/apc.php /usr/share/nginx/html/
et afficher apc.php dans un navigateur.
Chroot
Si nginx et php-fpm fonctionnent, on peut maintenant chrooter php-fpm. Créer un répertoire, par exemple /home/chroot, puis :
chown nginx.nginx /home/chroot
1.NGINX Dans /etc/nginx/nginx.conf, re-commenter le bloc "location ~ \.php$ { ..... }", le vhost par défaut n'en aura pas besoin.
On crée un virtualhost dans /etc/nginx/conf.d/virtual.conf :
server { listen 8080; server_name monvhost.domaine.fr; location / { root /home/chroot/monvhost/; index index.php; } location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ { access_log off; expires 30d; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } fastcgi_intercept_errors on; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; } }
Note : au passage, on a ajouté un peu de cache sur les objet statiques, images, css, etc...
2. FPM Un fichier d'exemple /etc/php-fpm.d/www.conf a du être créé au moment de l'installation. Garder ce fichier pour références futures (il est bien documenté) en le renommant www.conf.sample (il ne sera donc pas interprété au lancement de php-fpm, ça évitera de consommer des ressources inutilement). Dupliquer ce fichier pour créer un "pool" correspondant au virtualhost de nginx :
mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.sample cp /etc/php-fpm.d/www.conf.sample /etc/php-fpm.d/monvhost.conf
On vérifie que
listen = 127.0.0.1:9000
est décommenté (nginx cherchera ce port d'après sa configuration faxtcgi_pass) On modifie :
listen.owner = nginx listen.group = nginx
et
user = nginx group = nginx
on ajoute : chroot = /home/chroot/monvhost
PHP sur Debian requiert quelques répertoires, et les fichiers de timezone du système. Comme il est chrooté, il faut les copier :
mkdir -p /home/chroot/monvhost/{etc,usr/share,var/lib/php/session,tmp} cp /etc/localtime /home/chroot/monvhost/etc cp -r /usr/share/zoneinfo /home/chroot/monvhost/usr/share/ chown -R nginx.nginx /home/chroot/monvhost
Déplacer les fichiers phpinfo.php et apc.php de /home/chroot vers monvhost. Tester.
Virtualhosts
Pour créer d'autres virtualhosts, dupliquer /etc/php-fpm.d/monvhost.conf. Dans le nouveau fichier (qui créera donc un nouveau "pool" FPM), modifier le port (incrémenter par exemple à 9001, puis 9002,...) et la ligne chroot.
Dupliquer ensuite le bloc "server { ...... } " dans /etc/nginx/conf.d/virtual.conf, apporter les modifications nécessaires au nom du serveur, ai chemin root, et au port de "fastcgi_pass".
SSL
Pour autoriser le SSL (https://...) dans nginx, créer des certificats : cd /usr/share/nginx/ mkdir ssl cd ssl openssl req -new -x509 -nodes -out nginx.crt -keyout nginx.key
Ajouter dans /etc/nginx/conf.d/virtual.conf, dans le bloc "server {..." du virtualhost qui doit supporter le SSL :
listen 8080 default_server ssl; ... ssl_certificate /usr/share/nginx/ssl/nginx.crt; ssl_certificate_key /usr/share/nginx/ssl/nginx.key; ssl_protocols SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_timeout 5m;
Noter la modification de la ligne "listen" pour activer le ssl. Cette syntaxe est obligatoire depuis Nginx v0.7, la précédente option "ssl on;" n'est plus reconnue
Le port peut être celui qu'on veut, le 443 n'est pas une obligation, juste une valeur par défaut pour les navigateurs.
Modifications paramètres PHP
Pour modifier des paramètres PHP spécifiquement pour chaque virtualhost, éditer /etc/php-fpm.d/monvhost.conf, ajouter des lignes du type : php_admin_value[upload_max_filesize] = 8M