Server Installation · 7 min read · Jan 26, 2026

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

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

Version 1.0
Autor: Falko Timme
Folge mir auf Twitter

Nginx (ausgesprochen “engine x”) ist ein kostenloser, Open-Source, leistungsstarker HTTP-Server. Nginx ist bekannt für seine Stabilität, seinen reichen Funktionsumfang, seine einfache Konfiguration und seinen geringen Ressourcenverbrauch. Dieses Tutorial zeigt, wie Sie Nginx auf einem Fedora 18-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 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

HINWEIS: DAS AUSFÜHREN ALLER TEILE DIESER SCRIPTES WIRD FÜR ALLE MySQL
SERVER IN PRODUKTION EMPFOHLEN! BITTE LESEN SIE JEDEN SCHRITT SORGFÄLTIG!

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

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

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

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

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

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

Normalerweise sollte root nur von ‘localhost’ aus
aufgerufen werden dürfen. Dies stellt sicher, dass
niemand das root-Passwort über das Netzwerk erraten kann.

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

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

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

  • Testdatenbank wird gelöscht…
    … Erfolg!
  • Berechtigungen für die Testdatenbank werden entfernt…
    … Erfolg!

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

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

Aufräumen…

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

Danke, dass Sie MySQL verwenden!

[root@server1 ~]#

3 Installation von Nginx

Nginx ist als Paket für Fedora 18 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 Willkommensseite von nginx 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 18-Repositories, daher können wir php-fpm zusammen mit php-cli und einigen PHP5-Modulen wie php-mysql installieren, die Sie benötigen, wenn Sie MySQL aus Ihren PHP-Skripten verwenden möchten:

yum install php-fpm php-cli php-mysql 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

APC ist ein kostenloser und offener PHP-Opcode-Cache zum Cachen und Optimieren von PHP-Zwischencode. Es ist ähnlich wie andere PHP-Opcode-Caches, wie eAccelerator und Xcache. Es wird dringend empfohlen, einen dieser Caches zu installieren, um Ihre PHP-Seiten zu beschleunigen.

APC kann wie folgt installiert werden:

yum install php-pecl-apc

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" [...] |

Sie können die richtige Zeitzone für Ihr System herausfinden, indem Sie ausführen:

cat /etc/sysconfig/clock
[root@server1 ~]# cat /etc/sysconfig/clock  
ZONE="Europe/Berlin"  
[root@server1 ~]#

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 (das 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 es aus, um es zu aktivieren. Ändern Sie die root-Zeile auf 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 Zeile Server-API angezeigt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die bereits in PHP5 aktiviert sind, einschließlich des MySQL-Moduls:

6 Links

Über den Autor

Falko Timme ist der Eigentümer von Timme Hosting (ultra-schnelles nginx-Webhosting). Er ist der Hauptbetreuer von HowtoForge (seit 2005) und einer der Hauptentwickler von ISPConfig (seit 2000). Er hat auch zum O’Reilly-Buch “Linux System Administration” beigetragen.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.