ports:web:php

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.

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
Dans ce cas, on utilise une socket unix. Il est alors inutile de donner une ip à la jail, vous pouvez
  1. supprimer la ligne ip4.addr de la configuration de la jail
  2. et préciser ip4=disable.

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;
}
Vous trouverez des explications sur le site de nginx.
  • ports/web/php.1587724140.txt.gz
  • Dernière modification : 2020/04/24 10:29
  • de david