Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/02/2020, à 17:06

Titi04

Installation et configuration php-fpm

Salut, comme conseillé je viens de commencer à regarder un peu plus en détails comment mettre en place php-fpm. Je tombe sur des configurations différentes sans que je comprenne suffisamment pour savoir laquelle je dois privilégier.
Pour rappel le serveur est sous ubuntu 18.04.

Ce site donne par exemple cette configuration :

<IfModule proxy_fcgi_module> 
   # Enable http authorization headers 
   <IfModule setenvif_module> 
   SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 
   </IfModule> 
   <FilesMatch ".+\.ph(ar|p|tml)$"> 
       SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" 
   </FilesMatch> 
   <FilesMatch ".+\.phps$"> 
       # Deny access to raw php sources by default 
       # To re-enable it's recommended to enable access to the files 
       # only in specific virtual host or directory 
       Require all denied 
   </FilesMatch> 
   # Deny access to files without filename (e.g. '.php') 
   <FilesMatch "^\.ph(ar|p|ps|tml)$"> 
       Require all denied 
   </FilesMatch> 
</IfModule>

Tandis que celui-ci (donne celle-ci :

<FilesMatch ".php$"> 
         SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/"          
      </FilesMatch>

La version simple me donne : Internal Serveur Error tandis que la version plus complexe ne semble pas donner d'erreur mais le "serveur API" est toujours à "Apache 2.0 Handler"

Je fais le test sur un site dont le fichier de configuration de base est celui-ci :

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName XXX
        ServerAlias XXX
        DocumentRoot "/var/www/site/"
        <Directory "/var/www/site">
                Options +FollowSymLinks
                AllowOverride all
                Require all granted
        </Directory>
        ErrorLog /var/log/apache2/error.site.log
        CustomLog /var/log/apache2/access.site.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/XXX/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/XXXprivkey.pem
</VirtualHost>
</IfModule>

Vous avez une idée de résolution ?

Hors ligne

#2 Le 08/02/2020, à 18:01

bruno

Re : Installation et configuration php-fpm

Bonjour,

Si tu veux utiliser php-fpm, il est préférable de d'abord désactiver le module php d'apache (libapache2-mod-php) (ex. sous 18.04 LTS) :

sudo a2dismod php7.2

Ensuite de manière basique tu actives le fichier de configuration fourni par le paquet php-fpm (/etc/apache2/conf-available/php7.2-fpm.conf):

sudo a2enconf php7.2-fpm

Ce fichier doit être a peu près identique à ton premier exemple.

Relancer les service apache2 et php7.2-fpm

Tu peux ensuite vérifier avec une page contenant une fonction phpinfo()

Si tu veux utiliser les pools avec des utilisateurs différents pour chaque site, il ne faudra pas activer ce fichier de configuration mais s'inspirer de son contenu pour l'inclure ou le coller dans chaque hôte virtuel en précisant un socket différent à chaque fois :
Exemple :

hôte virtuel toto.conf :

<VirtualHost *:80>
    ServerAdmin toto@example.com
    ServerName toto.com
    ServerAlias www.toto.com
    DocumentRoot /srv/web/toto/www
    Include conf-available/php7-fpm_toto.conf
    <Directory /srv/web/toto/www>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride all
        Require all granted
    </Directory>
    #logs
    ErrorLog /srv/web/toto/logs/error.log
    LogLevel warn
    CustomLog /srv/web/toto/logs/access.log combined
</VirtualHost>

fichier /etc/apache2/conf-available/php7-fpm_toto.conf :

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
        SetHandler "proxy:unix:/run/php/php7-fpm_toto.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Note bien le socket : /run/php/php7-fpm_toto.sock

le fichier du pool /etc/php/7.2/fpm/pool.d/toto.conf :

[toto]

user = toto
group = webmasters

listen = /run/php/php7-fpm_toto.sock

listen.owner = www-data
listen.group = www-data

pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 10s

chdir = /

les paramètres pm sont a ajuster en fonction de la charge du site. [url=https://www.php.net/manual/fr/install.fpm.php[]Voir la doc[/url]

Les fichiers du site peuvent appartenir à toto:webmasters car les scripts PHP sont exécutés par toto, les fichiers statiques doivent d'une manière ou d'une autre être accessibles en lecture  www-data.

Dernière modification par bruno (Le 08/02/2020, à 18:07)

Hors ligne

#3 Le 08/02/2020, à 20:42

Titi04

Re : Installation et configuration php-fpm

Merci pour ta réponse détaillée. Je viens de faire un premier essai en copiant-collant ton "php7-fpm_toto.conf " dans directement dans le fichier de configuration du site que j'ai indiqué dans mon premier message. Bien entendu j'ai remplacé toto par mon user.
J'ai bien passé avant de relancer apache :

a2dismod php7.2
a2enconf php7.2-fpm

Le test n'est pas concluant car le php ne s’exécute plus, j'ai une page blanche sur ma page contenant mon phpinfo et les autres site ne tourne plus.

Edit : autant remettre mon fichier de conf.

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName www.SITE
        ServerAlias SITE
        DocumentRoot "/var/www/SITE"

        # Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
        SetHandler "proxy:unix:/run/php/php7-fpm_USER.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>
        <Directory "/var/www/SITE">
                Options +FollowSymLinks
                AllowOverride all
                Require all granted
        </Directory>
        ErrorLog /var/log/apache2/error.SITE.log
        CustomLog /var/log/apache2/access.SITE.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/SITE/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/SITE/privkey.pem
</VirtualHost>
</IfModule>

Dernière modification par Titi04 (Le 08/02/2020, à 20:45)

Hors ligne

#4 Le 08/02/2020, à 20:58

bruno

Re : Installation et configuration php-fpm

Retour de :

systemctl status php7.2-fpm

Hors ligne

#5 Le 08/02/2020, à 21:08

Titi04

Re : Installation et configuration php-fpm

Voici

● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-02-08 16:38:21 CET; 4h 29min ago
     Docs: man:php-fpm7.2(8)
  Process: 3213 ExecReload=/bin/kill -USR2 $MAINPID (code=exited, status=0/SUCCESS)
 Main PID: 27765 (php-fpm7.2)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 4692)
   CGroup: /system.slice/php7.2-fpm.service
           ├─ 3214 php-fpm: pool www
           ├─ 3215 php-fpm: pool www
           └─27765 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)

févr. 08 16:38:21 ns334757 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
févr. 08 16:38:21 ns334757 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
févr. 08 20:36:57 ns334757 systemd[1]: Reloading The PHP 7.2 FastCGI Process Manager.
févr. 08 20:36:57 ns334757 systemd[1]: Reloaded The PHP 7.2 FastCGI Process Manager.
févr. 08 20:37:13 ns334757 systemd[1]: Reloading The PHP 7.2 FastCGI Process Manager.
févr. 08 20:37:13 ns334757 systemd[1]: Reloaded The PHP 7.2 FastCGI Process Manager.

Hors ligne

#6 Le 08/02/2020, à 22:36

bruno

Re : Installation et configuration php-fpm

Ok. Est-ce que le mod proxy fcgi a bien été activé ?

sudo a2enmod proxy_fcgi fcgid

Hors ligne

#7 Le 09/02/2020, à 08:17

Titi04

Re : Installation et configuration php-fpm

Il me manquait le paquet libapache2-mod-fcgid maintenant c'est bon le "server API" est bien a "FPM/FastCGI" merci. Je vais continuer à avancer.

Hors ligne

#8 Le 09/02/2020, à 09:29

Titi04

Re : Installation et configuration php-fpm

Je viens de faire un premier test sur un des sites wordpress. En faisant un chmod 755 sur les fichiers j'arrive bien à faire les mises à jour si le propriétaire est user:groupe_restreint. Je pense que je vais pouvoir généraliser tout ceci, il me restera à faire en sorte que les fichiers uploadé en sftp soit en 755 par défaut.

Hors ligne

#9 Le 09/02/2020, à 09:52

bruno

Re : Installation et configuration php-fpm

Attention, les fichiers n'ont pas à être en « 755 », soit rwxr-xr-x. Je rappelle que x signifie exécutable pour un fichier et droit d'entrée pour un dossier.
Les droits strictement nécessaires sont 644 soit rw-r--r-- pour le fichiers et 755 pour les dossiers.
On peut même avoir 640 et 750 si l'utilisateur www-data est dans le groupe propriétaire des fichiers.

Hors ligne

#10 Le 09/02/2020, à 14:16

Titi04

Re : Installation et configuration php-fpm

Effectivement, j'ai corrigé ça.

Hors ligne

#11 Le 09/02/2020, à 15:51

krodelabestiole

Re : Installation et configuration php-fpm

à ce sujet, chmod +X (majuscule) est bien pratique : il permet de rendre exécutable seulement les répertoires.

voir là en adaptant pour l'user qui exécute php : https://doc.ubuntu-fr.org/apache2#permissions

Hors ligne

#12 Le 10/02/2020, à 20:38

Titi04

Re : Installation et configuration php-fpm

Merci pour le tuyau pour le chmod !

Hors ligne

#13 Le 10/02/2020, à 21:27

Titi04

Re : Installation et configuration php-fpm

Je commence à passer les différents sites et outils sous la configuration de php-fpm qui permet d'utiliser groupe et utilisateur que je souhaite. Je rencontre un soucis avec nextcloud et plus particulièrement avec collabora. Lorsque j'essaie d'ouvrir un document j'obtiens l'erreur suivante :

GuzzleHttp\Exception\ServerException: Server error: `GET https://office.XXXX/hosting/discovery` resulted in a `503 Service Unavailable` response: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>503 Service Unavailable</title> </head><body> <h1 (truncated...) 

Lorsque je l'avais installé j'avais du faire un fichier /etc/apache2/site-enabled/office.XXXXX.conf . Est-il nécessaire que j'ajoute également dans ce fichier :

Include conf-available/php7-fpm_XXX.conf

Hors ligne

#14 Le 14/02/2020, à 15:02

Titi04

Re : Installation et configuration php-fpm

Je me pertes un UP car je n'ai pas trouvé la solution.

Hors ligne

#15 Le 14/02/2020, à 15:20

bruno

Re : Installation et configuration php-fpm

Je n'ai pas répondu parce que cela n'a a a priori pas de rapport avec la question initiale sur PHP-FPM.
Cela indique probablement que le service loolwsd n'est pas lancé. Mais comme on ne saitt pas commet tu as installé Collabrora… paquets deb, docker, autre ?
Quoiqu'il en soit un hôte virtuel, sous un autre nom de domaine que celui qui héberge nextcloud, avec un reverse proxy est indispensable. Et non PHP-FPM n'est pas utilisé pour celui-ci.

Hors ligne

#16 Le 14/02/2020, à 15:29

Titi04

Re : Installation et configuration php-fpm

Ben pour moi le problème est lié au passage à php-fpm car avant ce passage collabora fonctionnait.

J'avais installé collabora via docker. J'ai bien un sous domaine spécifique : cloud.monsite.fr et office.monsite.fr

Hors ligne

#17 Le 14/02/2020, à 16:54

bruno

Re : Installation et configuration php-fpm

C'est peut-être lié aux manipulations que tu as fait mais pas à PHP-FPM. Collabora ne dépend pas de PHP.
Il faut vérifier si docker fonctionne, si le conteneur est actif est fonctionne, si Callobora répond bien sur le port dédié : en principe 9980.

Dernière modification par bruno (Le 14/02/2020, à 16:54)

Hors ligne

#18 Le 19/02/2020, à 17:03

Titi04

Re : Installation et configuration php-fpm

Effectivement ce n'était pas lié à php-fpm. Le service docker était tout simplement arrêté.

Hors ligne