Impossible de faire fonctionner apache avec un pool php-fpm

Tags: #<Tag:0x00007f50a1b40958> #<Tag:0x00007f50a1b40660> #<Tag:0x00007f50a1b40390>

Bonjour,

Voilà des heures que j’essaye de faire fonctionner apache2 avec mon pool php-fpm, mais sans succès. A titre d’information, voici la configuration de mon pool :

[test.bidule.local]
user = www-data
group = www-data

listen = /run/php/test.bidule.local.sock
listen.mode = 0660

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

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Est-ce que l’un d’entre vous saurais quelle est la bonne configuration apache pour utiliser ce pool ? A titre d’information, ce pool fonctionne parfaitement sous nginx et apache2 fonctionne avec le pool par défaut (www).

Mon vhost apache ressemble à ça (pour l’instant, dernier test réalisé) :

<VirtualHost *:80>
  ServerName test.bidule.local
  ServerAlias test2.bidule.local test3.bidule.local test4.bidule.local
  ServerAdmin hostmaster@bidule.local
  DocumentRoot /var/www/html

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log rp_combined

  <Directory /var/www/html>
    RewriteEngine On
    AllowOverride all
    Options +FollowSymLinks -Indexes
    Require all granted

    <IfModule mod_proxy_fcgi.c>
      <FilesMatch "\.(php|html)$">
        SetHandler "proxy:unix:/run/php/test.bidule.local.sock|fcgi://localhost"
      </FilesMatch>		
    </IfModule>
  </Directory>
</VirtualHost>

Les versions des paquets que j’utilise :

  • apache2: 2.4.52-1
  • php8.0-fpm: 8.0.15-1 (en provenance de sury)
  • libapache2-mod-fcgid: 1:2.3.9-4

Voilà, donc si quelqu’un a une idée ou des trucs à me faire essayer, je suis preneur.

Merci d’avance !

Bonsoir,

déjà, regarde les logs et donne les messages d’erreurs, ça pourra aider ceux qui connaissent ces environnements (moi pas).

Aucun log malheureusement, ça serait trop simple.
J’ai par contre omis d’indiquer que la page php consultée n’affichait que son contenu en texte, c’est à dire :

<?php phpinfo(); ?>

Ton socket php il est bien créer, il appartient à qui avec quel droits ?

et ton user apache il a bien droits d’accéder à ton socket php ?

Au mieux pour ton test tu te créer un user test a qui appartiendra les fichiers/dossiers dans le docuemnt root, cet utilisateur appartiendra au groupe www-data et tu utilise cet utilisateur pour gérer ton socket php.
Ainsi tu sera sûr de ton coup.

sk4hrr@test:~$ ls -lah /run/php/
total 4.0K
drwxr-xr-x  2 www-data www-data 100 Feb  4 12:09 .
drwxr-xr-x 17 root     root     500 Feb  4 12:08 ..
-rw-r--r--  1 root     root       5 Feb  4 12:09 php8.0-fpm.pid
lrwxrwxrwx  1 root     root      30 Feb  4 12:07 php-fpm.sock -> /etc/alternatives/php-fpm.sock
srw-rw----  1 www-data www-data   0 Feb  4 12:09 test.bidule.local.sock
sk4hrr@test:/var/www/html$ ls -lah
total 16K
drwxr-xr-x 1 root     root      36 Feb  4 12:12 .
drwxr-xr-x 1 root     root       8 Feb  4 12:08 ..
-rw-r--r-- 1 root     root     11K Feb  4 12:08 index.html
-rw-r--r-- 1 www-data www-data  20 Feb  4 12:12 test.php
sk4hrr@test:/var/www/html$ cat test.php 
<?php phpinfo(); ?>

Hum, mon pool est configuré comme celui par défaut, à la seule différence du listen. Du coup ça devrait être bon de bout en bout. Avant de procéder à l’isolation niveau utilisateur, j’aimerais déjà que ça fonctionne avec celui « de base », à savoir www-data.

En complément, j’ai aussi essayé en adaptant le contenu de /etc/apache2/conf-available/php8.0-fpm.conf dans mon vhost, ce qui donne :

# Ansible managed

<VirtualHost *:80>
  ServerName test.bidule.local
  ServerAlias test2.bidule.local test3.bidule.local test4.bidule.local
  ServerAdmin hostmaster@bidule.local
  DocumentRoot /var/www/html

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log rp_combined

  <Directory /var/www/html>
    RewriteEngine On
    AllowOverride all
    Options +FollowSymLinks -Indexes
    Require all granted
  </Directory>

  <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
  </IfModule>
  <FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler "proxy:unix:/run/php/test.bidule.local.sock|fcgi://localhost"
  </FilesMatch>
  <FilesMatch ".+\.phps$">
      Require all denied
  </FilesMatch>
  <FilesMatch "^\.ph(ar|p|ps|tml)$">
    Require all denied
  </FilesMatch>
</VirtualHost>