web-dev-qa-db-fra.com

Configuration d'Apache 2.4 avec FastCGI sur Ubuntu 16.04 - Que dois-je faire avec php7.0-fpm.conf?

J'ai réussi à faire fonctionner FastCGI avec Apache 2.4 sur Ubuntu 16.04 en adaptant les instructions de ce fil askubunt , ce document HowtoForge , et ce tutoriel de Digital Ocean =.

Toutes ces sources disent de créer /etc/Apache2/conf-available/php7.0-fpm.conf et de vous indiquer quoi y mettre. Mais après avoir installé php-fpm, j'ai déjà ce fichier avec le contenu suivant:

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual Host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>

Donc, au lieu de cela, j'ai créé ma propre conf et ai mis le code à partir des instructions et l'a activé.

A quoi sert le php7.0-fpm.conf existant? Si je l’active en plus de ma conf, mes sites Web cessent de fonctionner. Je crains de ne pas faire cela comme prévu et d’avoir des problèmes à l’avenir. Il est vraiment difficile de trouver une bonne documentation actuelle sur ce sujet.

Pour référence, voici toute ma procédure:

Sudo apt install libapache2-mod-fastcgi php-fpm
Sudo a2dismod php7.0 mpm_prefork
Sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/Apache2/conf-available/custom-fpm.conf

Contenu de /etc/Apache2/conf-available/custom-fpm.conf:

<IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php
    Action php7-fcgi /php7-fcgi virtual
    Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
    <Directory /usr/lib/cgi-bin>
            Require all granted
    </Directory>
</IfModule>

Commandes continuées:

Sudo a2enconf custom-fpm
Sudo systemctl restart Apache2 && Sudo systemctl restart php7.0-fpm

Merci d'avance pour votre aide.

5
Keen Mouse

Je rencontre la même confusion, je ressens votre douleur. Après de nombreuses lectures, il est devenu évident pour moi que la plupart des articles sont obsolètes et font référence à des méthodes précédentes (ou parfois à des combinaisons).

En utilisant PHP-FPM avec la configuration intégrée de Ubuntu 16.04, vous seulement devez faire ceci:

Sudo a2enconf php7.0-fpm
Sudo a2enmod proxy proxy_fcgi

J'ai fait la plupart de ce que vous avez fait, puis tout supprimé, lorsque cette configuration personnalisée n'avait aucun sens.

A quoi sert le php7.0-fpm.conf existant?

La configuration que vous avez trouvée installée par le paquet est destinée à l'utilisation de mod_proxy_fcgi. Il lie les fichiers .php via mod_proxy_fcgi à PHP FPM, en utilisant mod_proxy, via un socket de domaine Unix. Pour autant que je sache, il s'agit de la "recette" la plus récente (sur les six maintenant disponibles!)

Vous n'avez pas besoin d'installer libapache2-mod-fastcgi qui est une méthode différente et plus ancienne. Vous n'avez pas besoin d'écrire cette configuration, c'est pour utiliser directement mod_fastcgi. Vous n'avez pas besoin d'installer actions fastcgi alias car ils doivent configurer mod_fastcgi.

Je trouve étrange qu’aucun des articles - même ceux d’Ubuntu 16 - ne mentionne la nouvelle recette mise en place pour vous!

Ce commentaire m'a clarifié l'histoire:

La méthode préférée est maintenant fastcgi, en utilisant l'une de ces recettes:

(mod_fastcgi, httpd 2.2) http://wiki.Apache.org/httpd/php-fastcgi

(mod_fcgid, httpd 2.2) http://wiki.Apache.org/httpd/php-fcgid

(mod_proxy_fcgi, httpd 2.4) http://wiki.Apache.org/httpd/PHP-FPM

http://php.net/manual/en/install.unix.debian.php#112544 (2013)

En outre, cet article d’Apache détaille les trois sous-options permettant de configurer mod_proxy_fcgi pour se connecter à FPM, à l’aide de ProxyPassMatch ou de SetHandler + UDS. Notez que UDS est depuis Apache 2.4.10 par https://httpd.Apache.org/docs/2.4/mod/mod_proxy_fcgi.html il faut donc des backports de confiance ou plus récents.

https://wiki.Apache.org/httpd/PHP-FPM

Je viens donc de visualiser qu'il y a maintenant six façons de le configurer:

En gros ordre historique:

  1. Apache PHP module: mod_php (à l'ancienne)

  2. Via FastCGI - en utilisant la configuration Handler/Action/Alias ​​/ FastCgiExternalServer

    une. mod_fastcgi

    b. mod_fcgid

  3. Utiliser PHP-FPM via mod_proxy_fcgi, configuré via:

    une. TCP socket (IP et port) ProxyPassMatch ... fcgi: //127.0.0.1: 9000/path /

    b. Prise de domaine Unix (UDS) ProxyPassMatch… unix:/chemin/vers/socket

    c. (UDS) via SetHandler "proxy: unix: OR SetHandler" proxy: fcgi:

Avertissement: tout cela est nouveau pour moi, donc j'ai probablement encore cinq choses qui ne vont pas et dix choses à apprendre.

12
scipilot