web-dev-qa-db-fra.com

Multiple PHP avec Apache sur CentOS 7

Quelqu'un peut-il m'indiquer ici comment installer et configurer Multi PhP avec une instance Apache sur CentOS 7, et la bonne façon de le tester ..

11
Tabish

installer tous les dépôts et packages nécessaires

un grand merci à https://rpms.remirepo.net/wizard/

les commandes suivantes supposent que vous avez déjà Sudo su - ou vous devrez ajouter Sudo à chacune des commandes:

yum install httpd -y
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils -y
yum install php56 -y
yum install php72 -y
yum install php56-php-fpm -y
yum install php72-php-fpm -y

arrêter les deux serveurs fpm

systemctl stop php56-php-fpm
systemctl stop php72-php-fpm

par défaut, il écoute sur le port 9000 de 127.0.0.1, faites-les écouter sur différents ports

sed -i 's/:9000/:9056/' /etc/opt/remi/php56/php-fpm.d/www.conf
sed -i 's/:9000/:9072/' /etc/opt/remi/php72/php-fpm.d/www.conf

maintenant deux versions différentes de fpm peuvent être démarrées sur différents ports

systemctl start php72-php-fpm
systemctl start php56-php-fpm
cat > /var/www/cgi-bin/php56.fcgi << EOF
#!/bin/bash
exec /bin/php56-cgi
EOF

cat > /var/www/cgi-bin/php72.fcgi << EOF
#!/bin/bash
exec /bin/php72-cgi
EOF

les rendre exécutables par Apache

Sudo chmod 755 /var/www/cgi-bin/php56.fcgi
Sudo chmod 755 /var/www/cgi-bin/php72.fcgi

créer une configuration php pour Apache. par défaut, il exécute le gestionnaire php56-fcgi

cat > /etc/httpd/conf.d/php.conf << EOF
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
Action php72-fcgi /cgi-bin/php72.fcgi

<Directory /var/www/html/php56>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
<Directory /var/www/html/php72>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
EOF

créer des pages de test, créer .htaccess pour utiliser php72-fcgi

mkdir -p /var/www/html/php56
mkdir -p /var/www/html/php72
echo "<?php phpinfo(); ?>" > /var/www/html/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/html/php72/index.php
echo "AddHandler php72-fcgi .php" > /var/www/html/php72/.htaccess

Vous devriez maintenant pouvoir le tester

( http://127.0.0.1/php56 )
( http://127.0.0.1/php72 )

Si vous souhaitez démarrer ces instances automatiquement après le redémarrage du serveur

Sudo systemctl enable httpd
Sudo systemctl enable php56-php-fpm
Sudo systemctl enable php72-php-fpm
22
runwuf

Comme expliqué par @runwuf, cela est possible en utilisant les collections de logiciels disponibles dans le référentiel centos-scl ou dans le référentiel remi .

Mais utiliser SetHandler pour le proxy fastcgi semble une manière meilleure et plus moderne, grâce à httpd 2.4:

SetHandler "proxy:fcgi://127.0.0.1:9000"

Ceci est expliqué dans certains articles de blog:

9
Remi Collet

Il semble que ce que vous essayez de faire ressemble à ceci:

exécutant-deux-versions-php-sur-le-même-serveur

Personnellement, je ne voudrais pas essayer deux versions php sur la même instance Apache ... J'installerais une version différente de php par tarball et les exécuterais sur une instance distincte d'Apache qui est également installée par tarball et pointer chaque httpd.conf vers les différents version de php.

0
runwuf

répondre à runwuf

Bonjour, il y a un problème avec votre approche concernant SELinux

soit vous désactivez SELinux (si vous n'êtes pas concerné par la sécurité), soit vous gérez la stratégie de port SELinux

Si vous ne gérez pas le SELinux, le php56-php-fpm ne démarrera pas si SELinux est réglé sur le mode "Enforcing"

Exécutez les commandes suivantes pour que SELinux autorise les ports

  semanage port -a -t http_port_t -p tcp 9072
  semanage port -a -t http_port_t -p tcp 9056

puis enfin essayer de démarrer les modules fpm

J'ai dû ajouter ce qui suit à mon php.conf à l'intérieur de l'instruction d'annuaire pour faire passer l'API Apache Server à FPM/FastCGI au lieu de CGI/FastCGI - votre solution était cependant presque parfaite! Maintenant, si je pouvais juste comprendre comment utiliser un socket au lieu de TCP, je serais un codeur heureux.

# mod_proxy_fcgi options
<IfModule mod_proxy_fcgi.c>
    <FilesMatch \.php$>
       SetHandler "proxy:fcgi://127.0.0.1:9072"
    </FilesMatch>
</IfModule>
0
Morgan