Webserver · 6 min read · Jan 26, 2026

Installation von Nginx mit PHP5 (und PHP-FPM) und MySQL-Unterstützung auf Fedora 19

Nginx (ausgesprochen “engine x”) ist ein kostenloser, Open-Source, leistungsstarker HTTP-Server. Nginx ist bekannt für seine Stabilität, seinen umfangreichen Funktionsumfang, seine einfache Konfiguration und seinen geringen Ressourcenverbrauch. Dieses Tutorial zeigt, wie Sie Nginx auf einem Fedora 19-Server mit PHP5-Unterstützung (über PHP-FPM) und MySQL-Unterstützung installieren können.

Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100. Diese Einstellungen können bei Ihnen abweichen, daher müssen Sie sie gegebenenfalls anpassen.

2 Installation von MySQL/MariaDB 5

Zuerst installieren wir MySQL 5 wie folgt:

yum install mysql mysql-server

Dann erstellen wir die Systemstartlinks für MySQL (damit MySQL automatisch startet, wenn das System bootet) und starten den MySQL-Server:

systemctl enable mysqld.service  
systemctl start mysqld.service

Überprüfen Sie nun, ob das Netzwerk aktiviert ist. Führen Sie aus:

netstat -tap | grep mysql

Es sollte etwas wie folgt angezeigt werden:

[root@server1 ~]# netstat -tap | grep mysql  
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld  
[root@server1 ~]#

Wenn dies nicht der Fall ist, bearbeiten Sie /etc/my.cnf und kommentieren Sie die Option skip-networking aus:

vi /etc/my.cnf
[...]
#skip-networking
[...]

und starten Sie Ihren MySQL-Server neu:

systemctl restart mysqld.service

Führen Sie aus:

mysql_secure_installation

um ein Passwort für den Benutzer root festzulegen (ansonsten kann jeder auf Ihre MySQL-Datenbank zugreifen!):

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

Um sich in MariaDB anzumelden, um es zu sichern, benötigen wir das aktuelle
Passwort für den Benutzer root. Wenn Sie MariaDB gerade installiert haben und
Sie das root-Passwort noch nicht festgelegt haben, ist das Passwort
leer, also sollten Sie hier einfach die Eingabetaste drücken.

Geben Sie das aktuelle Passwort für root ein (drücken Sie die Eingabetaste für keines): <– ENTER
OK, Passwort erfolgreich verwendet, weiter…

Das Festlegen des root-Passworts stellt sicher, dass niemand ohne die
richtige Autorisierung auf den MariaDB-Root-Benutzer zugreifen kann.

Root-Passwort festlegen? [Y/n] <– ENTER
Neues Passwort: <– yourrootsqlpassword
Neues Passwort erneut eingeben: <– yourrootsqlpassword
Passwort erfolgreich aktualisiert!
Aktualisieren der Berechtigungstabellen..
… Erfolg!

Standardmäßig hat eine MariaDB-Installation einen anonymen Benutzer,
was es jedem ermöglicht, sich in MariaDB anzumelden, ohne ein
Benutzerkonto zu haben. Dies ist nur für Tests gedacht und
um die Installation etwas reibungsloser zu gestalten. Sie sollten
sie entfernen, bevor Sie in eine Produktionsumgebung wechseln.

Anonyme Benutzer entfernen? [Y/n] <– ENTER
… Erfolg!

Normalerweise sollte root nur von ‘localhost’ aus zugelassen werden.
Dies stellt sicher, dass jemand das root-Passwort nicht über das
Netzwerk erraten kann.

Root-Login aus der Ferne verweigern? [Y/n] <– ENTER
… Erfolg!

Standardmäßig kommt MariaDB mit einer Datenbank namens ‘test’,
die jeder zugreifen kann. Dies ist ebenfalls nur für Tests gedacht
und sollte entfernt werden, bevor Sie in eine Produktionsumgebung wechseln.

Testdatenbank und Zugriff darauf entfernen? [Y/n] <– ENTER

  • Testdatenbank wird gelöscht…
    … Erfolg!
  • Berechtigungen auf der Testdatenbank werden entfernt…
    … Erfolg!

Das Aktualisieren der Berechtigungstabellen stellt sicher, dass
alle bisher vorgenommenen Änderungen sofort wirksam werden.

Berechtigungstabellen jetzt aktualisieren? [Y/n] <– ENTER
… Erfolg!

Aufräumen…

Alles erledigt! Wenn Sie alle oben genannten Schritte abgeschlossen haben,
sollte Ihre MariaDB-Installation jetzt sicher sein.

Danke, dass Sie MariaDB verwenden!
[root@server1 ~]#

3 Installation von Nginx

Nginx ist als Paket für Fedora 19 verfügbar, das wir wie folgt installieren können:

yum install nginx

Dann erstellen wir die Systemstartlinks für nginx und starten es:

systemctl enable nginx.service  
systemctl start nginx.service

Geben Sie die IP-Adresse oder den Hostnamen Ihres Webservers in einen Browser ein (z.B. http://192.168.0.100), und Sie sollten die Nginx-Startseite sehen:

4 Installation von PHP5

Wir können PHP5 in Nginx über PHP-FPM zum Laufen bringen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe nützlich sind, insbesondere für beschäftigte Websites). Es gibt ein php-fpm-Paket in den offiziellen Fedora 19-Repositories, daher können wir php-fpm zusammen mit php-cli und einigen PHP5-Modulen wie php-mysqlnd installieren, die Sie benötigen, wenn Sie MySQL von Ihren PHP-Skripten aus verwenden möchten:

yum install php-fpm php-cli php-mysqlnd php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

Zend OPcache ist ein kostenloser und offener PHP-Opcode-Cache zum Cachen und Optimieren von PHP-Zwischencode. Es ist ähnlich wie andere PHP-Opcode-Caches, wie APC und Xcache. Es wird dringend empfohlen, einen dieser Caches zu installieren, um Ihre PHP-Seite zu beschleunigen. Da Zend OPcache jetzt offiziell in PHP 5.5 enthalten ist, verwenden wir ihn anstelle anderer Opcode-Caches.

Zend OPcache kann wie folgt installiert werden:

yum install php-opcache

Um Fehler wie

[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen. Sie sind *verpflichtet*, die Einstellung date.timezone oder die Funktion date_default_timezone_set() zu verwenden. Falls Sie eine dieser Methoden verwendet haben und immer noch diese Warnung erhalten, haben Sie wahrscheinlich den Zeitzonenbezeichner falsch geschrieben. Wir haben 'Europe/Berlin' für 'CET/1.0/no DST' stattdessen in /usr/share/nginx/html/info.php in Zeile 2 ausgewählt

… in /var/log/php-fpm/www-error.log zu vermeiden, wenn Sie ein PHP-Skript in Ihrem Browser aufrufen, sollten Sie /etc/php.ini öffnen und date.timezone festlegen:

vi /etc/php.ini
[...]
[Date]
; Definiert die Standardzeitzone, die von den Datumsfunktionen verwendet wird
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"
[...]

Erstellen Sie als Nächstes die Systemstartlinks für php-fpm und starten Sie es:

systemctl enable php-fpm.service  
systemctl start php-fpm.service

PHP-FPM ist ein Daemon-Prozess, der einen FastCGI-Server auf Port 9000 ausführt.

5 Konfiguration von nginx

Die Nginx-Konfiguration befindet sich in /etc/nginx/nginx.conf, die wir jetzt öffnen:

vi /etc/nginx/nginx.conf

Die Konfiguration ist leicht verständlich (Sie können hier mehr darüber erfahren: http://wiki.codemongers.com/NginxFullExample und hier: http://wiki.codemongers.com/NginxFullExample2)

Zuerst (dies ist optional) können Sie die Anzahl der Worker-Prozesse erhöhen und den keepalive_timeout auf einen angemessenen Wert setzen:

[...]
worker_processes  4;
[...]
    keepalive_timeout  2;
[...]

Die virtuellen Hosts sind in server {}-Containern definiert. Der Standard-vhost ist weiter unten in der Datei /etc/nginx/nginx.conf definiert - lassen Sie uns ihn wie folgt ändern:

vi /etc/nginx/nginx.conf
[...]
    server {
        listen       80;
        server_name  _;

        #charset koi8-r;

        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }

        # leitet Serverfehlerseiten zur statischen Seite /40x.html um
        #
        error_page  404              /404.html;
        location = /40x.html {
            root   /usr/share/nginx/html;
        }

        # leitet Serverfehlerseiten zur statischen Seite /50x.html um
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # leitet die PHP-Skripte an Apache weiter, das auf 127.0.0.1:80 hört
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # leitet die PHP-Skripte an den FastCGI-Server weiter, der auf 127.0.0.1:9000 hört
        #
        location ~ \.php$ {
             root           /usr/share/nginx/html;
             try_files $uri =404;
             fastcgi_split_path_info ^(.+\.php)(/.+)$;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }

        # verweigert den Zugriff auf .htaccess-Dateien, wenn das Dokumentenverzeichnis von Apache
        # mit dem von nginx übereinstimmt
        #
        location ~ /\.ht {
            deny  all;
        }
    }
[...]

servername ; macht dies zu einem Standard-Catchall-vhost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).

Im location /-Teil habe ich index.php zur Indexzeile hinzugefügt. root /usr/share/nginx/html; bedeutet, dass das Dokumentenverzeichnis das Verzeichnis /usr/share/nginx/html ist.

Der wichtige Teil für PHP ist die location ~ .php$ {}-Stanza. Kommentieren Sie sie aus, um sie zu aktivieren. Ändern Sie die root-Zeile in das Dokumentenverzeichnis der Website (z.B. root /usr/share/nginx/html;). Bitte stellen Sie sicher, dass Sie die fastcgi_param-Zeile in fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; ändern, da der PHP-Interpreter sonst das PHP-Skript, das Sie in Ihrem Browser aufrufen, nicht finden kann.

Bitte beachten Sie, dass ich die Zeile try_files $uri =404; hinzugefügt habe, um Zero-Day-Exploits zu verhindern (siehe http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP und http://forum.nginx.org/read.php?2,88845,page=3). Alternativ, wenn Sie die Zeile try_files $uri =404; nicht verwenden möchten, können Sie cgi.fix_pathinfo = 0; in /etc/php5/fpm/php.ini festlegen (vergessen Sie nicht, PHP-FPM danach neu zu laden).

Speichern Sie nun die Datei und laden Sie nginx neu:

systemctl reload nginx.service

Erstellen Sie nun die folgende PHP-Datei im Dokumentenverzeichnis /usr/share/nginx/html…

vi /usr/share/nginx/html/info.php

Jetzt rufen wir diese Datei in einem Browser auf (z.B. http://192.168.0.100/info.php):

Wie Sie sehen, funktioniert PHP5, und es funktioniert über FPM/FastCGI, wie in der Server-API-Zeile angezeigt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die bereits in PHP5 aktiviert sind, einschließlich des MySQL-Moduls:

6 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.