Pages : 1
#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)
#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
#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
#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.
#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
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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.
#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)
#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
Pages : 1