Ich versuche zu bestätigen, dass php7.0-fpm mit Apache unter Ubuntu 16.04 funktioniert

Ich versuche zu bestätigen, dass php7.0-fpm mit Apache unter Ubuntu 16.04 funktioniert

Ich habe php7.0-fpm für die Verwendung mit Apache unter Ubuntu 16.04 konfiguriert, bin mir jedoch nicht sicher, ob es richtig konfiguriert ist und funktioniert.

So wie ich es verstehe, sollte die Ausgabe der PHP-Infodatei nach der Installation und Konfiguration „Server-API --> FPM/FastCGI“ anzeigen, es wird jedoch weiterhin „Server-API --> Apache 2.0 Handler“ angezeigt.

So habe ich php7.0-fpm installiert und konfiguriert:

sudo apt-get install libapache2-mod-fastcgi php7.0-fpm

sudo a2enmod actions fastcgi alias

sudo a2enconf php7.0-fpm

sudo service php7.0-fpm restart

sudo systemctl status php7.0-fpm

sudo systemctl restart apache2.service

Unten ist die Ausgabe von sudo systemctl status php7.0-fpm:

php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-11-25 11:57:33 UTC; 23h ago
Process: 1149 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 1336 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3
Memory: 37.8M
CPU: 3.089s
CGroup: /system.slice/php7.0-fpm.service
├─1336 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─1340 php-fpm: pool www
└─1341 php-fpm: pool www

Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

Was mache ich falsch? Wäre für Hilfe und Rat dankbar?

Unten ist der Inhalt meiner /etc/apache2/conf-enabled/php7.0-fpm.confDatei:

<Directory /usr/lib/cgi-bin>
    Require all granted
</Directory>
<IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php 
    Action php7-fcgi /php7-fcgi
    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 Authorization
</IfModule>

Antwort1

Sie müssen das proxy_fcgiModul aktivieren und deaktivieren mod_php7, damit die Standardkonfigurationsdatei php7.0-fpmwirksam wird.

Wenn Sie sich ansehen /etc/apache2/conf-enabled/php7.0-fpm.conf, sehen Sie oben Folgendes:

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>

Antwort2

Ich habe es geschafft, dies ohne allzu große Probleme zum Laufen zu bringen, indem ich den Anweisungen unter folgteKoen Reiniers‘ Entwicklerblog. Ich habe die Anweisungen fast genau befolgt und mit einer Ausnahme, die in den Kommentaren zum Blogbeitrag erwähnt wurde, hat es perfekt funktioniert. Sie benötigenmod_fastcgisowie mehrere andere Module. Mit diesem Rezept können Sie mehrere virtuelle Hosts einrichten, von denen jeder eine unabhängige php7-fpm-Konfiguration verwendet. Beachten Sie, dass, sofern nichtphpinfo()eine Server-API von „FPM/FastCGI“ anzeigt, dann haben Sie das Ziel verfehlt. Dies ist der Lackmustest, ob der Stack funktioniert. Zur Kontrolle habe ich auch „<?php touch('/tmp/fpmtest');“ ausgeführt, um zu prüfen, ob die für meinen virtuellen Host gestarteten Prozesse als der angegebene Benutzer/die angegebene Gruppe ausgeführt wurden (was der Fall war).

Dieses Rezept wurde mit einigen Änderungen aus Koens Blog kopiert und ihm gebührt Anerkennung für seine klaren und wirksamen Anweisungen.

Mit Ausnahme der sicherheitsrelevanten Strophen darin,nichtmöchten Sie die Apache-Konfiguration aktivieren fürphp7.0-fpmwenn Sie dieses Rezept verwenden. Der einzige Code, der global ausgeführt werden muss, ist:

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

Wenn Ihre Apache2-Konfiguration dies ermöglichtmod_cgi.cdann wurde dies wahrscheinlich bereits in der Standard-Konfigurationsdatei für das Modul berücksichtigt. Andernfalls, wenn dieses Modul (odermod_cgid.c) nicht bereits aktiviert ist, kann dies zu jeder conf-Datei hinzugefügt werden, die beim Start von Apache2 ausgeführt wird. Abhängig von Ihrer Serverumgebung ist es jedoch möglicherweise sicherer, es nur zu jedem <VirtualHost> hinzuzufügen, für den PHP-FPM aktiviert ist. Sicherheitsrelevanter Code vonphp7.0-fpm.confkönnte auch an denselben Speicherort kopiert oder global aktiviert werden.

Diese Anleitung geht davon aus, dass Sie PHP 7.0.* sowie Apache (mit virtuellen Hosts) auf einem Ubuntu-Server ausführen. Versuchen Sie dies auch nicht in einer Produktionsumgebung, ohne entsprechende Backups vorhanden zu haben.

Stellen Sie zunächst sicherphp7.0-fpmist auf Ihrem System installiert:

$ sudo apt-get install php7.0-fpm

Starten Sie den Dienst nach der Installation (sofern dies nicht automatisch erfolgt ist) und überprüfen Sie, ob er ausgeführt wird:

$ sudo service php7.0-fpm start && ps aux | grep php-fpm

Um PHP-FPM für jeden einzelnen Ihrer virtuellen Hosts zu verwenden, müssen Sie es in mehrere Ressourcenpools aufteilen, einen für jeden einzelnen <VirtualHost>-Benutzer. Das bedeutet, dass Sie, wenn Sie einem Benutzer mehrere Hosts zugewiesen haben, nur einen Ressourcenpool für diesen Benutzer erstellen müssen.

Der Standardspeicherort für die Poolkonfiguration für PHP-FPM ist:

/etc/php/7.0/fpm/pool.d/

Um eine neue Konfiguration für einen Ihrer Benutzer zu erstellen, erstellen Sie einfach eine neue .conf-Datei. Ich habe den Benutzernamen des Benutzers als Namen der Konfigurationsdatei verwendet:

$ sudo vim /etc/php/7.0/fpm/pool.d/username.conf

Und verwenden Sie dies als Ihre Konfiguration (ersetzen Sie „Benutzername“ durch den tatsächlichen Namen Ihres Benutzers):

[username]
    user = username
    group = username
    listen = /run/php/php7.0-fpm.username.sock
    listen.owner = username
    listen.group = username
    listen.mode = 0666

    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3

Die ersten sieben Zeilen sind die wichtigsten. Stellen Sie sicher, dass sie mit dem Apache-Virtualhost-Benutzer identisch sind. Die letzten fünf Zeilen sind die Standardeinstellungen für den Prozessmanager. Lassen Sie sie der Einfachheit halber so, wie sie sind, aber Sie können sie nach Belieben ändern. Weitere Informationen zu diesen Einstellungen finden Sie in der Standardkonfigurationsdatei unter:

/etc/php/7.0/fpm/pool.d/www.conf

Sie müssen Apache nur noch anweisen, PHP-FPM statt mod_php zu verwenden. Stellen Sie zunächst sicher, dass sowohl mod_actions als auch mod_fastcgi aktiviert sind:

$ sudo a2enmod actions fastcgi
$ sudo service apache2 restart

Fügen Sie den PHP-FPM FastCGI-Handler zu Apache hinzu. Sie müssen dies für jeden Benutzer tun, der PHP-FPM verwenden soll. Bearbeiten Sie die Datei pro virtuellem Host für den Benutzernamen, normalerweise unter:

/etc/apache2/sites-available/username.conf

Fügen Sie oben Folgendes hinzu:

<IfModule mod_fastcgi.c>
  AddHandler php7-fcgi-username .php
  Action php7-fcgi-username /php7-fcgi-username
  Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
  FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.0-fpm.username.sock -pass-header Authorization
</IfModule>

Ersetzen Sie „Benutzername“ erneut durch den tatsächlichen Namen des Benutzers des virtuellen Hosts.

Sie müssen Ihrem virtuellen Host mitteilen, dass er es tatsächlich für .php-Dateien verwenden soll. Fügen Sie daher in derselben Datei, aber in der Direktive <VirtualHost>, die folgenden Zeilen hinzu:

<IfModule mod_fastcgi.c>
  <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler php7-fcgi-username
  </FilesMatch>
</IfModule>

Ersetzen Sie „username“ erneut durch den Namen des tatsächlichen vhost-Benutzers und speichern Sie die Datei. Es istsehr wichtigdass die SetHandler-Direktive mit einer Teilmenge der Apache-Tags für bedingte Dateisystemcontainer <Location>, <LocationMatch>, <Files> oder <FilesMatch> umschlossen wird. Wird dies weggelassen, wird SetHandler ignoriert. Das Tag <Directory> reicht anscheinend nicht aus.

Wenn Sie die "Status"- und "Ping"-Funktionen von PHP-FPM nutzen möchten und diese in Ihrer Pooldatei pro vHost im/etc/php/7.0/fpm/pool.dVerzeichnis (siehe/etc/php/7.0/fpm/pool.d/www.conffür Details) müssen Sie zwei zusätzliche Änderungen an Ihrem Apache2-Setup vornehmen. DieAktionDie Direktive am Anfang der .conf-Datei pro virtuellem Host muss mit „virtual“ enden, also:

Action php7-fcgi-username /php7-fcgi-username virtual

Zusätzlich muss Ihr SetHandler-Wrapper einen regulären Ausdruck angeben, der diese virtuellen Dateien einschließt. Ich verwende Folgendes:

<LocationMatch ".+\.ph(p[3457]?|t|tml)|/(ping|status)$">
    SetHandler ....
</LocationMatch>

Jetzt müssen Sie Apache nur noch seine Konfigurationsdateien neu laden lassen:

$ sudo service apache2 reload

Um zu sehen, ob Ihre Änderungen wirksam wurden, erstellen Sie eine phpinfo.php-Datei im öffentlichen Verzeichnis Ihrer Website und besuchen Sie sie in Ihrem Browser:

&lt;?php phpinfo();

Die oben auf der Seite angezeigte Server-API sollte „FPM/FastCGI“ anzeigen.

Um den Vorgang abzuschließen, sollten Sie die Schritte für jeden Ihrer virtuellen Hosts wiederholen. Wenn Sie ganz sicher sindmod_phpnicht mehr verwendet wird, können Sie es wie folgt deaktivieren:

$ sudo a2dismod php7.0

Bis Sie dies getan haben, schließt Apache weiterhin für jede Anfrage einen PHP-Prozess ein, was bedeutet, dass der Speicherverbrauch gleich bleibt und möglicherweise sogar höher ist.

verwandte Informationen