Konfigurieren von Apache 2.4 mit FastCGI unter Ubuntu 16.04 – Was mache ich mit php7.0-fpm.conf?

Konfigurieren von Apache 2.4 mit FastCGI unter Ubuntu 16.04 – Was mache ich mit php7.0-fpm.conf?

Ich habe es geschafft, FastCGI mit Apache 2.4 unter Ubuntu 16.04 zum Laufen zu bringen, indem ich die Anweisungen von angepasst habedieser Askubuntu-Thread,dieses HowtoForge-Dokument, Unddieses Digital Ocean-Tutorial.

Alle diese Quellen sagenerstellen /etc/apache2/conf-available/php7.0-fpm.confund Ihnen sagen, was Sie darin einfügen sollen. Aber nach der Installation php-fpmhabe ich diese Datei bereits mit folgendem Inhalt:

# 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>

Also habe ich stattdessen meine eigene Konfiguration erstellt, den Code aus der Anleitung darin eingefügt und aktiviert.

Wozu dient das Vorhandene php7.0-fpm.conf? Wenn ich es zusätzlich zu meiner Konfiguration aktiviere, funktionieren meine Websites nicht mehr. Ich mache mir Sorgen, dass ich es nicht so mache, wie es gemacht werden soll, und dass es in Zukunft Probleme geben könnte. Es ist wirklich schwierig, gute, aktuelle Dokumentation dazu zu finden.

Als Referenz ist hier mein gesamtes Verfahren:

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

Inhalt von /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>

Befehle, Fortsetzung:

sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm

Vielen Dank im Voraus für Ihre Hilfe.

Antwort1

Ich bin auf die gleiche Verwirrung gestoßen und fühle Ihren Schmerz. Nachdem ich viel gelesen habe, ist mir klar geworden, dass die meisten Artikel veraltet sind und sich auf frühere Methoden (oder manchmal Kombinationen) beziehen.

Wenn Sie PHP-FPM mit der integrierten Konfiguration von Ubuntu 16.04 verwenden,nurmüssen Sie dies tun:

sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi

Ich habe das meiste von dem gemacht, was Sie getan haben, und dann alles entfernt, als die benutzerdefinierte Konfiguration keinen Sinn ergab.

Wofür ist die vorhandene php7.0-fpm.conf?

Die Konfiguration, die Sie im Paket installiert vorgefunden haben, ist für die Verwendung von mod_proxy_fcgi gedacht. Sie bindet .php-Dateien über mod_proxy_fcgi an PHP FPM, wobei mod_proxy über einen Unix Domain Socket verwendet wird. Soweit ich weiß, ist dies das aktuellste „Rezept“ (von den sechs derzeit verfügbaren!)

Sie müssen es nicht installieren, libapache2-mod-fastcgidas ist eine andere, ältere Methode. Sie müssen diese Konfiguration nicht schreiben – das ist für die direkte Verwendung von mod_fastcgi. Sie müssen es nicht installieren, actions fastcgi aliasda es für die Konfiguration von mod_fastcgi vorgesehen ist.

Ich finde es seltsam, dass in keinem der Artikel – nicht einmal in denen für Ubuntu 16 – erwähnt wird, dass das neue Rezept bereits für Sie vorbereitet ist!

Dieser Kommentar hat mir die Geschichte klar gemacht:

Die bevorzugte Methode ist jetzt Fastcgi unter Verwendung eines dieser Rezepte:

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

Darüber hinaus beschreibt dieser Artikel von Apache die drei Unteroptionen zur Konfiguration von mod_proxy_fcgi für die Verbindung mit FPM, entweder mit ProxyPassMatch oder SetHandler + UDS. Beachten Sie, dass UDS seit Apache 2.4.10 perhttps://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.htmlman benötigt also Trusty-Backports oder neuer.

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

Ich bin zu dem Schluss gekommen, dass es nun sechs Möglichkeiten zur Konfiguration gibt:

In ungefähr historischer Reihenfolge:

  1. Apache PHP-Modul: mod_php (der alte Weg)

  2. Über FastCGI – mithilfe der Handler/Action/Alias/FastCgiExternalServer-Konfiguration

    ein. mod_fastcgi

    b. mod_fcgid

  3. Verwenden von PHP-FPM über mod_proxy_fcgi, konfiguriert über eine der folgenden Möglichkeiten:

    a. TCP-Socket (IP und Port) ProxyPassMatch ... fcgi://127.0.0.1:9000/Pfad/

    b. Unix Domain Socket (UDS) ProxyPassMatch … unix:/Pfad/zum/Socket

    c. (UDS) über SetHandler "proxy:unix: ODER SetHandler "proxy:fcgi:

Haftungsausschluss: Das ist alles Neuland für mich, daher habe ich wahrscheinlich noch fünf Dinge falsch gemacht und muss zehn Dinge lernen.

verwandte Informationen