Webserver Installation · 5 min read · Dec 31, 2025

Installation von Nginx mit PHP5 und MySQL-Unterstützung auf Debian Squeeze

Installation von Nginx mit PHP5 und MySQL-Unterstützung auf Debian Squeeze

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 umfangreichen Funktionsumfang, seine einfache Konfiguration und seinen geringen Ressourcenverbrauch. Dieses Tutorial zeigt, wie Sie Nginx auf einem Debian Squeeze-Server mit PHP5-Unterstützung (über FastCGI) 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

Um MySQL zu installieren, führen wir aus

apt-get install mysql-server mysql-client

Sie werden aufgefordert, ein Passwort für den MySQL-Root-Benutzer anzugeben - dieses Passwort gilt für den Benutzer root@localhost sowie [email protected], sodass wir später kein MySQL-Root-Passwort manuell angeben müssen:

Neues Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Wiederholen Sie das Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword

3 Installation von Nginx

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

apt-get install nginx

Starten Sie nginx anschließend:

/etc/init.d/nginx start

Das Standard-Nginx-Dokumentenverzeichnis ist /var/www, das noch nicht existiert; daher müssen wir es wie folgt erstellen:

mkdir /var/www  
 chown www-data:www-data /var/www

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 folgende Seite sehen:

Sie erhalten einen 403-Fehler, da keine Indexseite in /var/www vorhanden ist.

4 Installation von PHP5

Wir können PHP5 über FastCGI in nginx zum Laufen bringen. Glücklicherweise bietet Debian Squeeze ein FastCGI-fähiges PHP5-Paket, das wir wie folgt installieren (zusammen mit einigen PHP5-Modulen wie php5-mysql, die Sie benötigen, wenn Sie MySQL von Ihren PHP-Skripten aus verwenden möchten):

apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Öffnen Sie dann /etc/php5/cgi/php.ini und entfernen Sie das Kommentarzeichen bei der Zeile cgi.fix_pathinfo=1:

vi /etc/php5/cgi/php.ini

| [...] ; cgi.fix_pathinfo bietet *echte* PATH_INFO/PATH_TRANSLATED-Unterstützung für CGI. PHP's ; vorheriges Verhalten war, PATH_TRANSLATED auf SCRIPT_FILENAME zu setzen und nicht zu verstehen, ; was PATH_INFO ist. Für weitere Informationen zu PATH_INFO siehe die CGI-Spezifikationen. Das Setzen ; dieses Wertes auf 1 bewirkt, dass PHP CGI seine Pfade an die Spezifikation anpasst. Ein Wert ; von null bewirkt, dass PHP sich wie zuvor verhält. Standard ist 1. Sie sollten Ihre Skripte ; so anpassen, dass sie SCRIPT_FILENAME anstelle von PATH_TRANSLATED verwenden. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=1 [...] |

Es gibt kein eigenständiges FastCGI-Daemon-Paket für Debian Squeeze, daher verwenden wir das Programm spawn-fcgi von lighttpd. Wir installieren lighttpd wie folgt:

apt-get install lighttpd

Sie werden eine Fehlermeldung sehen, die besagt, dass lighttpd nicht starten kann, da Port 80 bereits verwendet wird:

Starting web server: lighttpd2011-02-24 01:43:18: (network.c.358) can't bind to port:  80 Address already in use  
  failed!  
 invoke-rc.d: initscript lighttpd, action "start" failed.

So sollte es sein, da nginx bereits auf Port 80 lauscht. Führen Sie aus

update-rc.d -f lighttpd remove

damit lighttpd beim Booten nicht gestartet wird.

Wir haben lighttpd installiert, weil wir nur ein Programm benötigen, das mit dem Paket geliefert wird, /usr/bin/spawn-fcgi, das wir verwenden können, um FastCGI-Prozesse zu starten. Werfen Sie einen Blick auf

spawn-fcgi --help

um mehr darüber zu erfahren.

Um einen PHP-FastCGI-Daemon zu starten, der auf Port 9000 auf localhost lauscht und als Benutzer und Gruppe www-data ausgeführt wird, führen wir den folgenden Befehl aus:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

Natürlich möchten Sie diesen Befehl nicht jedes Mal manuell eingeben, wenn Sie das System starten. Um den Befehl automatisch beim Booten auszuführen, öffnen Sie /etc/rc.local…

vi /etc/rc.local

… und fügen Sie den Befehl am Ende der Datei (vor der exit-Zeile) hinzu:

| [...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...] |

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) erhöhen Sie die Anzahl der Worker-Prozesse und setzen Sie den keepalive_timeout auf einen angemessenen Wert:

| [...] worker_processes 5; [...] keepalive_timeout 2; [...] |

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

vi /etc/nginx/sites-available/default

| [...] server { listen 80; ## lauschen für ipv4 listen [::]:80 default ipv6only=on; ## lauschen für ipv6 server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # leiten Sie Serverfehlerseiten zur statischen Seite /50x.html um # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /var/www/nginx-default; #} # leiten Sie die PHP-Skripte an Apache weiter, das auf 127.0.0.1:80 lauscht # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # leiten Sie die PHP-Skripte an den FastCGI-Server weiter, der auf 127.0.0.1:9000 lauscht # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } # verweigern Sie 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 /var/www; bedeutet, dass das Dokumentenverzeichnis das Verzeichnis /var/www ist.

Der wichtige Teil für PHP ist die location ~ .php$ {}-Strophe. Kommentieren Sie sie aus, um sie zu aktivieren. Bitte stellen Sie sicher, dass Sie die fastcgi_param-Zeile in fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; ändern (ersetzen Sie /var/www durch das Dokumentenverzeichnis Ihres vhosts), da der PHP-Interpreter sonst das PHP-Skript, das Sie in Ihrem Browser aufrufen, nicht finden kann.

Stellen Sie sicher, dass zwischen include und fastcgi_params einige Leerzeichen stehen; - in der Standarddatei ist dies als ein Wort geschrieben, was ein Fehler ist.

Speichern Sie nun die Datei und starten Sie nginx neu:

/etc/init.d/nginx restart

Erstellen Sie nun die folgende PHP-Datei im Dokumentenverzeichnis /var/www:

vi /var/www/info.php

| |

Rufen Sie diese Datei in einem Browser auf (z. B. http://192.168.0.100/info.php):

Wie Sie sehen, funktioniert PHP5, und es funktioniert über 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

Ü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-Systemadministration” beigetragen.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.