Ceci est une ancienne révision du document !
Serveurs Web PHP
De nombreux serveurs utilisent le langage php pour créer des pages dynamiquement.
Ceci se fait par le biais d'un canal fastcgi de votre serveur web: php-fpm
.
Comme souvent, nous allons en isoler les mécanismes dans une jail. C'est dans celle-ci que vous installerez vos clients, comme ce dokuwiki.
Jail
Sa configuration est simple, mais comme la plupart des clients php réclame /dev/null
our dev/random
, intallez le devfs
.
- /etc/jail.conf
php { host.hostname = php; # Hostname # ip4 = disable; # update/install ended: lock out the jail ip4.addr = "lo1|192.168.0.12"; # IP address of the jail path ="/jails/php"; # Path to the jail mount.devfs; # /dev/random pour ssl exec.start = "/bin/sh /etc/rc"; # Start command exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command }
Installez ici la version de php
que vous désirez:
root@popeye:# jail -c php root@popeye:# pkg -j php install lang/php72 root@popeye:# sysrc -j php php_fpm_enable=yes
Vous aurez probablement besoin de ceux-là pour vos clients:
root@popeye:# pkg -j php install graphics/php72-gd security/php72-hash devel/php72-json converters/php72-mbstring security/php72-openssl www/php72-session textproc/php72-xml archivers/php72-zlib
Si vous installez un port ce sera fait automatiquement, mais vous pouvez souvent vous contenter de cloner un dépôt.
Configurez php-fpm
pour qu'il écoute soit sur un port TCP, sur l'adresse de votre jail
, soit sur une socket unix
.
- /usr/local/etc/php-fpm.d/www.conf
; listen = 192.168.0.12:9000 listen = /var/run/php-fpm.sock listen.owner = www listen.group = www listen.mode = 0660
- supprimer la ligne
ip4.addr
de la configuration de lajail
- et préciser
ip4=disable
.
Démarrez:
root@popeye:# service -j php php-fpm start
Serveur Web
Il suffit de transférer les requêtes via fastcgi
, avec un piège, les scripts ne seront pas situé au même endroit, selon qu'ils soient vu du serveur web ou de la jail
.
Prenons le classique nginx,
- /usr/local/etc/nginx/nginx.conf
server { listen [::]:80; listen 80; server_name popeye.lapinbilly.eu; # Replace with your hostname root /jails/php/usr/local/www/<site php>; index <site php>.php; client_max_body_size 15M; client_body_buffer_size 128K; location / { try_files $uri $uri/ @<site_php>; } location @<site_php> { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/(.*) /<truc php>.php?id=$1&$args last; } location ~ \.php$ { try_files $uri $uri/ /<site php>.php; # fastcgi_pass 192.168.0.12:9000; fastcgi_pass unix:/jails/php/var/run/php-fpm.sock; fastcgi_param REDIRECT_STATUS 200; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/local/www/<site php>/$fastcgi_script_name; }
Ceci est tiré de l'exemple de ce wiki, les directives sont en général données par les notices d'installation de l'outil web que vous voulez installer.
C'est bien souvent le fastcgi_param
qu'il faut adapter à la jail
au lieu d'utiliser un $document_root
.
Par exemple,ce dokuwiki:
- /usr/local/etc/nginx/dokuwi.conf
include drop.conf; client_max_body_size 15M; client_body_buffer_size 128k; location / { try_files $uri $uri/ @dokuwiki; } location ~ \.php$ { try_files $uri $uri/ /doku.php; fastcgi_pass unix:/jails/php/var/run/php-fpm.sock; fastcgi_param REDIRECT_STATUS 200; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/local/www/dokuwiki/$fastcgi_script_name; } location @dokuwiki { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; rewrite ^/(.*) /doku.php?id=$1&$args last; } # Block access to data folders location ~ /(data|conf|bin|inc)/ { deny all; } # Block access to .htaccess files location ~ /\.ht { deny all; }