CentOS 7 – NGINX und php-fpm

Diese Tutorial bezieht sich auf CentOS 7. Voraussetzung ist ein aktiviertes Epel Repository. Die Einrichtung unterscheidet sich nicht großartig von denen anderer Distributionen und kann auch dort als Beispiel dienen.

Die Einrichtung wird am Beispiel der Domain tutorial.der-linux-admin.de erklärt. Diese muss dann natürlich durch die passende Domain ersetze werden.

Installation von NGINX

Zuerst installieren wir den Webserver NGINX. Falls wir den aktuellen NGINX aus den NGINX-Repository installieren wollen gibt es eine passende Anleitung im meinem Artikel NGINX aus dem NGINX-Repository installieren.

Nun aktivieren wir NGINX für den automatischen Start und Starten den Dienst.

Falls firewalld auf unserem System läuft können wir mit folgenden Befehlen die Ports 80 und 443 in der Firewall freischalten.

NGINX sollte nun von extern erreichbar sein und eine Default-Webseite ausliefern.

Pool-User für php-fpm anlegen

Prozessübersicht mit Usern von php-fpm
Prozessübersicht mit Usern von php-fpm

Dann erstellen wir einen User unterdem die PHP-Prozesse bzw der php-fpm-Pool ausgeführt wird. Dazu erstellen wir eine Verzeichnis für das Documentroot und stecken den User auch gleich in die Gruppe nginx.

Anschliessend passen wir die Berechtigungen des Verzeichnisses an.

Php-fpm installieren und konfigurieren

Nun installieren wir php-fpm und CLI für PHP mit yum.

Dann kopieren wie die Konfiguration für den default Pool in unsere Konfiguration. Diese werden wir dann späte anpassen.

Um zu verhindern, dass der default Pool nach einem Update wieder angelegt wird fügen wir in jeder Zeile ein „;“ ein. Damit bleibt die Datei erhalten ist aber komplett wirkungslos da nun alle Zeilen Kommentare sind. Wenn wir diese Datei einfach löschen kann es passieren das ein Update wieder die default Konfiguration für den [www] – Pool aktiviert.

Nun können wie unsere fpm-Pool Konfiguration anpassen.

Als erstes setzen wir den Namen des Pools.

Anschliessend definieren wie ob der Pool per Port oder per Socket abgesprochen werden soll. In diese Konfiguration geschieht dies über den Socket unter /var/run/php-fpm/tutorial.der-linux-admin.de.sock.

Als User wählen wir unsere dafür angelegten Benutzer und die passende Gruppe. So laufen alle php-Prozesse dieses Pools unter diesem User.  Alle von PHP erzeugten Dateien werden dann auch mit dieser Berechtigung angelegt.

Anschliessend editieren wie noch die php.ini.

Dort setzen wir cgi.fix_pathinfo = 0.

Zum Schluss starten wir php-fpm neu um unsere Einstellungen zu aktivieren. Php-fpm fügen wir dabei noch dem automatischen Systemstart hinzu.

NGINX vHost für php-fpm erstellen

Nun müssen wir noch den passende vHost in der Konfiguration von NGINX anlegen. Dazu erstellen wir eine Datei.

In diesem vHost weisen wir NGINX an alle .php Dateien per fastcgi an den php-fpm Pool weiterzugeben.

Nachdem wir die Datei gespeichert haben führen wir einen Konfigurationstest durch,

Wenn dabei keine Fehler gemeldet wurden können wir NGINX neu starten.

Nun legen wir im Documentroot eine kleine Testdatei an.

Wir rufen die Infoseite zu php auf.

Anpassen der Rechte nicht vergessen.

Testseite für php-fpm mit nginx
Testseite für php-fpm mit NGINX

Wenn alles richtig konfiguriert ist sollte eine solche Ausgabe beim Aufruf der URL erfolgen.

Nach diesem Muster kann man für weitere Domains verfahren. Es ist sicher, auch aus Sicherheitsgründen, sinnvoll für jede Domain einen extra Pool mit einem extra User zu definieren. So können die verschiedenen Pools getrennt konfiguriert werden. Dazu lassen wir die einfach auf verschiednen Sockets laufen und weisen diese im vHost zu. Auch verschiedene php-Versionen sind so möglich. Eventuell behandle ich dies in einen nachfolgenden Tutorial.

Wie immer lohnt ein Blich in die Dokumentation von php-fpm und NGINX.

Eine Antwort auf „CentOS 7 – NGINX und php-fpm“

  1. Hi dear colleague!!
    Thanks a lot for your your post, it have been for me very useful!!
    I am trying to follow it but I have a question. After I create the config for php-fpm and when I want to start php-fpm (systemctl restart php-fpm), I get:
    May 29 09:28:56 cmps-jr.flx.bn systemd[1]: Starting The PHP FastCGI Process Manager…
    May 29 09:28:56 cmps-jr.flx.bn php-fpm[9802]: [29-May-2019 09:28:56] ALERT: [pool cmps-jr.flx.bn] user has not been defined
    May 29 09:28:56 cmps-jr.flx.bn php-fpm[9802]: [29-May-2019 09:28:56] ERROR: failed to post process the configuration
    May 29 09:28:56 cmps-jr.flx.bn php-fpm[9802]: [29-May-2019 09:28:56] ERROR: FPM initialization failed
    May 29 09:28:56 cmps-jr.flx.bn systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a
    May 29 09:28:56 cmps-jr.flx.bn systemd[1]: Failed to start The PHP FastCGI Process Manager.
    May 29 09:28:56 cmps-jr.flx.bn systemd[1]: Unit php-fpm.service entered failed state.
    May 29 09:28:56 cmps-jr.flx.bn systemd[1]: php-fpm.service failed.

    This is part of the config file:
    ; The address on which to accept FastCGI requests.
    ; Valid syntaxes are:
    ; ‚ip.add.re.ss:port‘ – to listen on a TCP socket to a specific IPv4 address on
    ; a specific port;
    ; ‚[ip:6:addr:ess]:port‘ – to listen on a TCP socket to a specific IPv6 address on
    ; a specific port;
    ; ‚port‘ – to listen on a TCP socket to all addresses
    ; (IPv6 and IPv4-mapped) on a specific port;
    ; ‚/path/to/unix/socket‘ – to listen on a unix socket.
    ; Note: This value is mandatory.
    ;listen = 127.0.0.1:9000
    listen = /var/run/php-fpm/cmpowersite.socket

    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user’s group
    ; will be used.
    ; RPM: apache user chosen to provide access to the same directories as httpd
    ;;user = apache
    user = tcdeveloper
    ; RPM: Keep a group allowed to write in log dir.
    ;group = apache
    group = tcdeveloper

    Thanks a lot for your support!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.