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

36

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

De nombreux hôtes avec des options d’administration du panneau de contrôle vous permettent de changer la façon dont PHP est exécuté 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 question la plus proche que j'ai trouvée est cette question , mais la structure de répertoires ne semble pas correspondre pour 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écrire en détail ce processus pour quelque chose qui semble être si courant. Pardonnez-moi si cela existe ... Si oui, veuillez me diriger dans la bonne direction.

Evan Mattson
la source
La chose la plus proche que j'ai trouvée est cette question sur SO Ce site web n'est pas un débordement de pile.
ta.speot.is
1
Ceci sur fastcgi l'explique assez bien.
1
@ ta.speot.is pardon, pleaassuh . . Merci Matt, j'ai bien sûr regardé fastcgi.com, mais j'ai trouvé ces instructions un peu difficiles à suivre.
Evan Mattson
@ ta.speot.is, faute de frappe simple. Il voulait dire "SE" pas "SO".
Pacerier

Réponses:

49

Merci pour les réponses précédentes, ils m’avaient pris le plus gros du chemin, mais pour que les choses fonctionnent, je devais combiner les instructions 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 également trouvé que http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ était très informatif et simple.

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 à la place 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 mot worker par event si vous préférez utiliser celui-ci.

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émarrer 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!

JDawgg
la source
4
Ceci est une bouée de sauvetage. Les instructions pour le plus vieux apache ne fonctionnaient pas sous Ubuntu 14.04 et apache 2.4; mais celui-ci a fonctionné comme un charme. +100 !!
Bhavin Doshi
J'ai suivi exactement cela, mais le message d'erreur suivant s'affiche «Vous n'êtes pas autorisé à accéder à /php5.fcgi/index» ... Et dans le journal des erreurs, le client est refusé par la configuration du serveur: / usr / lib / cgi-bin /php5.fcgi '... Des idées?
Vraiment chanceux vraiment
Je l'ai compris ... J'utilisais l'ancien système "Order Deny, Allow" pour root pour une raison quelconque ... Tout est corrigé maintenant: D
Vraiment chanceux vraiment
J'ai eu l'erreur suivante après l'installation des paquets et la configuration "apache2: erreur de syntaxe à la ligne 216 de /etc/apache2/apache2.conf: erreur de syntaxe à la ligne 9 de /etc/apache2/conf-enabled/php5-fpm.conf: attendu </ Directory> mais a vu </ IfModule> "
Farooq
Fait un GitHub Gist pour ce gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin
20

J'ai enfin trouvé un bon tutoriel 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 se trouve 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, je vais donc documenter mes étapes de cette façon.

Commencer

Première étape: installer Apache Worker MPM (modules de traitement multiple)

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 risquez d'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 n'est pas dans le tutoriel ci-dessus

Pour réconcilier cela, le multiverse référentiel 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

precisedans ce cas, fait 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 d’Apache (donc 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 doit 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/ répertoire.

redémarrez Apache:

sudo service apache2 restart

Maintenant, créez le fichier PHP suivant dans la racine du document /var/www:

sudo nano /var/www/info.php

Ajouter:

<?php phpinfo();

sauvegarder et quitter.

Maintenant, nous appelons 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 la modification du protocole PHP-FPM afin qu'il utilise un socket Unix au lieu du port TCP par défaut ou sur la configuration de celui-ci pour des hôtes virtuels individuels au lieu de chacun d'entre eux, voir le tutoriel source lié en haut.

Evan Mattson
la source
Je devais ajouter ceci auparavant </ IfModule>: <Répertoire / usr / lib / cgi-bin> Exiger que tous soient accordés </ Annuaire>
Rimu Atkinson
@RimuAtkinson est correct, par défaut, tous les répertoires seront interdits dans les versions les plus récentes. Vous devrez donc accorder un accès spécifique au répertoire cgi-bin. Cela devrait être ajouté à la réponse, sans
quoi
Merci pour ce howto! Notez que la Require all grantedchose n'est requise que depuis Apache 2.4. Si je le mets dans le fichier de configuration avec Apache 2.2, cela échoue.
leemes
J'ai ajouté une note. (N'hésitez pas à le modifier; c'est votre message.;)) Pour plus de détails, consultez stackoverflow.com/a/22040167/592323
leemes
1
Cette réponse ne fonctionne pas sur Ubuntu 14.04. Voir la réponse de JDawgg pour le faire en 14.04.
Bhavin Doshi
1

Dans Ubuntu 14.04, après avoir suivi les étapes de la réponse acceptée, éditez le fichier /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
Marcanuy
la source
0

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 :)

Nazq
la source