Contenu | Rechercher | Menus

Annonce

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 17/09/2021, à 10:39

Dom911

Ubuntu 20.04 (AWS) - PHP ne fonctionne pas

Bonjour,

Avant tout
Je ne suis pas un pro du monde UNIX/Linux. J'ai quelques bases et plus de 20 ans d'expérience dans l'IT, mais pas sur Linux.
Je tente d'installer Apache + mariadb + PHP avec de nombreux pré-requis (NTFS, Watchdog, Firewall, ...)  sur AWS sur plusieurs serveurs et de les faire communiquer.
Je remercie donc ceux qui auront la patience d'expliquer. Merci pour votre aide.

Le problème
Lorsque je veux tester mon fichier PHP de test qui contient phphinfo(), la page du serveur me renvoie :

Not Found
The requested URL was not found on this server.
Apache/2.4.41 (Ubuntu) Server at XX.XX.XX.XX Port 80

De la dernière ligne j'en déduis que PHP n'est pas monté.

Le log d'erreur d'Apache indique

sudo cat /var/log/apache2/error.log

donne les informations suivantes

[Fri Sep 17 08:57:20.834843 2021] [http2:warn] [pid 127525] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Fri Sep 17 08:57:20.853566 2021] [mpm_prefork:notice] [pid 127525] AH00163: Apache/2.4.48 (Ubuntu) OpenSSL/1.1.1f configured -- resuming normal operations
[Fri Sep 17 08:57:20.853585 2021] [core:notice] [pid 127525] AH00094: Command line: '/usr/sbin/apache2'

La commande

sudo apache2 -M

montrait que le module PHP n'était pas monté (php7.4).

La commande

sudo a2enmod php7.4

me donne les erreurs suivantes :

Considering dependency mpm_prefork for php7.4:
Considering conflict mpm_event for mpm_prefork:
ERROR: Module mpm_event is enabled - cannot proceed due to conflicts. It needs to be disabled first!
Considering conflict mpm_worker for mpm_prefork:
ERROR: Could not enable dependency mpm_prefork for php7.4, aborting

J'ai suivi les informations du forum indiquées sur cette page : https://forum.ubuntu-fr.org/viewtopic.php?id=2025856
Le problème reste le même. Il y a un conflit entre mpm_prefork, mpm_event et mpm_worker
J'ai beau chercher sur Google, j'ai toujours la même procédure qui ne fonctionne pas...

Ma configuration
Version Ubuntu
La commande

lsb_release -a

renvoie

Distributor ID:    Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:    focal

Version d'Apache 2
La commande

apache2 -v

renvoie

Server version: Apache/2.4.48 (Ubuntu)
Server built:   2021-07-01T19:16:08

Version de PHP
La commande

php --version

renvoie

PHP 7.4.23 (cli) (built: Aug 26 2021 15:51:37) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
   with Zend OPcache v7.4.23, Copyright (c), by Zend Technologies

Modules activés dans Apache
La commande

apache2 -M

renvoie

actions alias asis auth_basic auth_digest authn_anon authn_dbd authn_dbm authn_file authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex
 cache cgid cgi charset_lite dav_fs dav dav_lock dbd deflate dir dump_io env expires ext_filter file_cache filter headers http2 ident include info ldap
 mem_cache mime mime_magic negotiation reqtimeout rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack vhost_alias
 mpm_itk mpm_prefork php7.4

       
       PS: mem_cache a retourné une erreur

Dernière modification par Dom911 (Le 17/09/2021, à 13:27)

Hors ligne

#2 Le 17/09/2021, à 12:31

bruno

Re : Ubuntu 20.04 (AWS) - PHP ne fonctionne pas

Bonjour,

Merci de modifier ton message en utilisant les balises [ code ] (icône < >) pour les retours de commandes, extraits de logs et de fichiers. Voir ici

---

Il faut savoir ce que tu veux. Si tu veux utiliser le module PHP d'apache, le mpm_prefork est obligatoire et http2 ne fonctionnera pas.

Si tu veux utiliser un autre MPM (et http2) : mpm_event, tu ne pourras pas utiliser le module PHP d'apache, il faudra utiliser php-fpm.

D'après le dernier retour mpm_prefork et php7.4 sont activés. Cela devrait donc fonctionner.

Je déconseille fortement le mpm_itk qui n'est pas un module officiel Apache, n'est sans doute plus maintenu, plombe les performances, etc. Attention aussi au modules cgi / cgid qu'il ne faut activer que si on a réellement besoin et au modules dav qui sont sources de conflits potentiels avec certaines applications web.

Dernière modification par bruno (Le 17/09/2021, à 12:32)

#3 Le 17/09/2021, à 13:52

Dom911

Re : Ubuntu 20.04 (AWS) - PHP ne fonctionne pas

Bonjour,

Merci pour ce premier retour.
J'ai mis à jour le message avec les balises [ code ].

L'objectif est le suivant :  que chaque vhost est un uid et gid séparé

La documentation fournie note : activer les modules apache pour fonctionner en MPM_PREFORK et MPM_ITK.
MPM_ITK répond au besoin. Par contre, il n'est en effet plus maintenu.
La dernière mise à jour date de du 14.02.2016 !
Que me conseillez vous ?

Merci pour les précautions à prendre vis à vis des modules cgi / cgid et dav.

Hors ligne

#4 Le 17/09/2021, à 15:15

bruno

Re : Ubuntu 20.04 (AWS) - PHP ne fonctionne pas

L'objectif est le suivant :  que chaque vhost est un uid et gid séparé

Dans ce cas il faut utiliser PHP-FPM et non le module php d'Apache et définir un utilisateur par hôte virtuels via les « pools » php-fpm. Tu devrais trouver la documentation nécessaire sur le web, sinon il y a un vieux fil de discussion ici https://forum.ubuntu-fr.org/viewtopic.p … #p21591459 où j'indiquais un exemple de configuration basique.
Dans les grandes lignes :
- il faut virer le module php d'Apache (voire désinstaller les paquets libapache2-mod-php et libapache2-mod-php7.4) ;
- remplacer le mpm_prefork par le mpm-event et virer le mpm_itk ;
- installer et activer le mod proxy_fcgi d'Apache ;
- installer le paquet php-fpm ;
- créer un utilisateur sans login pour chaque hôte virtuel ;
- configurer un pool php⁻fpm pour chaque hôte virtuel avec son propre socket et son utilisateur correspondant ;
- configurer chaque hôte virtuel Apache pour utiliser le socket php-fpm correspondant (cf. lien plus haut);
- j'oublie sûrement des choses…


C'est une configuration plus complexe mais c'est le seul moyen propre (et beaucoup plus performant que le module php d'Apache) d'avoir des utilisateurs différents pour exécuter les scripts de chaque hôte virtuel.

Attention aux tutos que tu peux trouver et qui indiquent d'utiliser un dépôt tiers (ppa:ondrej) pour PHP, c'est inutile et très risqué.