web-dev-qa-db-fra.com

Comment configurer Apache pour exécuter PHP en tant que FastCGI sur Ubuntu 12.04 via un terminal?

Je suis relativement nouveau dans le monde de la gestion/administration de serveurs Web en ligne de commande unix.

De nombreux hôtes dotés d'options d'administration sur le panneau de configuration vous permettent de modifier le mode d'exécution de PHP avec une simple option.

Les options les plus courantes étant:

  • Module Apache
  • Application CGI
  • Application FastCGI

Ma question est simplement, comment changez-vous cela via la ligne de commande? Je sais qu'il existe de nombreux fichiers de configuration pour Apache.

La chose la plus proche que j'ai trouvée est cette question , cependant, la structure des répertoires ne semble pas correspondre à celle de mon système d'exploitation (Ubuntu 12.04).

Je suis assez déconcerté par le fait qu'il ne semble pas y avoir de guide clair pour détailler ce processus pour quelque chose qui semble être si courant. Pardonnez-moi si cela existe ... Si oui, veuillez me diriger dans la bonne direction.

35
Evan Mattson

J'ai enfin trouvé un tutoriel de Nice destiné à cela. Je vais décrire les étapes que j’ai suivies car j’avais déjà ma pile LAMP installée mais le tutoriel complet est disponible ici .

Note pour le nouveau:

Dans le tutoriel, il commence par basculer sur l'utilisateur root avec:

Sudo su

Dans mon cas, j'ai simplement préfixé ces commandes Sudo au lieu de changer d'utilisateur, alors je vais documenter mes étapes de cette façon.

Début

Première étape: installer Apache Worker MPM (Multi-Procesing Modules)

Sudo apt-get install Apache2-mpm-worker

Cela remplace le prefork que j'avais installé, qui est la valeur par défaut lors de l'installation d'Apache.

Étape 2: Installez PHP5 et les modules nécessaires

Sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

À ce stade, vous pouvez obtenir une erreur lors de l'installation de 'libapache2-mod-fastcgi':

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

Cette partie ne fait pas partie du tutoriel ci-dessus

Pour réconcilier cela, le référentiel multiverse doit être ajouté aux sources apt.

Pour faire ça:

Sudo nano /etc/apt/sources.list

A quoi j'ai ajouté les lignes suivantes:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

precise fait ici référence à ma version d’Ubuntu " Precise Pangolin ".

Alors maintenant, enregistrez ces modifications et revenez au terminal:

Sudo apt-get update

et encore:

Sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

qui va (devrait) maintenant fonctionner.

Activez maintenant ces modules Apache:

Sudo a2enmod actions fastcgi alias

redémarrer Apache

Sudo service Apache2 restart

Étape 3: configuration Apache

Pour que Apache fonctionne avec PHP-FPM, nous avons besoin de la configuration suivante:

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -Host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

Remarque:

Si vous utilisez une version antérieure d’Apache (2.3.x ou antérieure), laissez la ligne

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

Vous pouvez vérifier votre version installée avec la commande

Apache2 -version

Vous pouvez le mettre dans la configuration globale Apache (pour qu'il soit activé pour tous les vhosts), par exemple dans /etc/Apache2/conf.d/php5-fpm.conf (ce fichier n'existe pas, vous devez donc le créer), ou vous pouvez le placer dans chaque hôte qui devrait utiliser PHP-FPM. .

J'ai choisi la voie mondiale, donc:

Sudo nano /etc/Apache2/conf.d/php5-fpm.conf

coller dans le bloc de code ci-dessus, et sauvegarder, quitter. Ce nouveau fichier sera automatiquement chargé par la configuration par défaut d'Apache qui charge tous les fichiers du répertoire /etc/Apache2/conf.d/.

redémarrez Apache:

Sudo service Apache2 restart

Créez maintenant le fichier PHP suivant dans la racine du document /var/www:

Sudo nano /var/www/info.php

Ajouter:

<?php phpinfo();

sauvegarder et quitter.

Nous appelons maintenant ce fichier dans un navigateur (par exemple, http://your-server-ip/info.php)

Sous API du serveur en haut, vous devriez voir FPM/FastCGI.

Succès!

Pour plus d'informations sur le changement de PHP-FPM afin qu'il utilise un socket Unix au lieu du port par défaut TCP ou sur la configuration de celui-ci pour des hôtes virtuels individuels au lieu de tous, voir le tutoriel source lié en haut. .

20
Evan Mattson

Merci pour les réponses précédentes, ils m’ont eu l’essentiel du chemin, mais pour que les choses fonctionnent, je devais combiner les instructions à partir de plusieurs endroits, alors j’ai pensé écrire un ensemble complet de commandes.

Pour info, je suis sous Ubuntu 14.04, Apache 2.4, et modphp fonctionnait par défaut, les instructions précédentes excluaient également la nécessité de désactiver modphp.

J'ai aussi trouvé que http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ était très informatif et direct.

Il suffit d’exécuter les commandes suivantes dans un terminal les unes après les autres.

Commencez par installer les paquets nécessaires (je laisse de côté php5 car cela suppose qu’il est déjà installé, rajoutez-le pour une première installation). Notez également qu'à partir d'Apache 2.4, vous pouvez utiliser event-mpm au lieu de worker voir http://www.vps.net/blog/2013/04/08/Apache-mpms-prefork-worker-and-event / . Mon exemple montre worker, mais remplacez simplement le worker Word par event si vous préférez l'utiliser.

Sudo apt-get install Apache2-mpm-worker

Sudo apt-get install libapache2-mod-fastcgi php5-fpm

Activez maintenant les mods dont vous avez besoin et désactivez ceux dont vous n'avez pas besoin.

Sudo a2dismod php5 mpm_prefork

Sudo a2enmod actions fastcgi alias mpm_worker

Créez le fichier php5.fcgi et donnez au serveur Web l'autorisation de l'utiliser.

Sudo touch /usr/lib/cgi-bin/php5.fcgi

Sudo chown -R www-data:www-data /usr/lib/cgi-bin

Créer une configuration globale pour php5-fpm

Sudo nano /etc/Apache2/conf-available/php5-fpm.conf

collez ce qui suit (nous utiliserons un socket au lieu d'une adresse IP)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Activer la conf php5-fpm

Sudo a2enconf php5-fpm

Redémarrez Apache et fpm

Sudo service Apache2 restart && Sudo service php5-fpm restart

Selon d’autres instructions, collez ce qui suit dans un nouveau fichier php navigable sur votre serveur Web.

<?php phpinfo();

Ouvrez le fichier que vous venez de modifier dans un navigateur Web. Si vous voyez "FPM/FastCGI" à côté de Server API, vous fournissez maintenant PHP avec FastCGI!

49
JDawgg

Dans Ubuntu 14.04, après avoir suivi les étapes de la réponse acceptée, éditez / etc/Apache2/conf-available/php5-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

Puis exécuter

#Sudo a2enconf php5-fpm
#Sudo Apache2 restart
1
marcanuy

Si quelqu'un le fait sur Ubuntu 16.04 et passe de PHP 7 à PHP 5.6 (Ondrej), vous devez remplacer certaines lignes (sur la base de la réponse de JDawgg):

Sudo apt-get installez libapache2-mod-fastcgi php5-fpm sur:

Sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

Sudo a2dismod php5 mpm_prefork à:

Sudo a2dismod php5.6 mpm_prefork

Sudo nano /etc/Apache2/conf-available/php5-fpm.conf à:

Sudo vim /etc/Apache2/conf-available/php5.6-fpm.conf

Le processus d'installation de php5.6-fpm a déjà créé le fichier, il n'est donc pas nécessaire de le créer. Cependant, j'ai supprimé tout le texte existant sur ce fichier car il était destiné à mod_php5.

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

J'ai changé le chemin d'accès de /var/run/php5-fpm.sock à /var/run/php/php5.6-fpm.sock car le fichier s'y trouvait.

Sudo a2enconf php5-fpm à:

Sudo a2enconf php5.6-fpm

Sudo service Apache2 redémarrer && Sudo service php5-fpm redémarrer à:

Sudo service Apache2 restart && Sudo service php5.6-fpm restart

J'espère que cela aide d'autres débutants comme moi :)

0
Nazq