Deutsch| English

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

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>, Christian Schmalfeld <c [dot] schmalfeld [at] projektfarm [dot] de>
Follow me on Twitter
Last edited 03/07/2012

Nginx (ausgesprochen “engine x”) ist ein kostenloser, quelloffener Hochleistungs-HTTP-Server. Nginx ist für Stabilität, seine einfache Konfiguration, geringen Ressourcenverbrauch und seinen großen Funktionsumfang bekannt. Dieses Tutorial zeigt Ihnen, wie Sie Nginx auf einem Debian Squeeze Server mit PHP5 Unterstützung (durch FastCGI) und MySQL Unterstützung
installieren.

Für die Richtigkeit der Inhalte dieses Tutorials gebe ich keinerlei Garantie!

1 Vorbemerkung

Ich benutze in diesem Tutorial den Hostnamen server1.example.com mit der IP Adresse 192.168.0.100. Diese Einstellungen werden sich von Ihren unterscheiden, ersetzen Sie sie also an den entsprechenden Stellen.

Alle Schritte des Tutorials werden von mir als root Benutzer ausgeführt, melden Sie sich daher vor Ausführung ebenfalls als root Benutzer an:

sudo su

2 Installation von MySQL 5

Benutzen Sie folgenden Befehl um MySQL zu installieren:

apt-get install mysql-server mysql-client

Sie werden darum gebeten, ein Passwort für den MySQL root Benutzer anzulegen - dieses Passwort gilt für den Benutzer root@localhost als auch für root@server1.example.com, sodass Sie das MySQL root Passwort nicht später manuell anlegen müssen:

New password for the MySQL “root” user: <-- IhrrootSQLPasswort
Repeat password for the MySQL “root” user: <-- IhrrootSQLPasswort

3 Installation von Nginx

Nginx ist als Paket Debian Squeeze verfügbar, kann also wie folgt installiert werden:

apt-get install nginx

Starten Sie Nginx danach:

/etc/init.d/nginx start

Das Nginx Stammverzeichnis ist /var/www. Es existiert jedoch noch nicht, weshalb Sie es folgendermaßen erstellen müssen:

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

Geben Sie die IP oder den Hostnamen des Servers in einen Browser ein (z.B. http://192.168.0.100) und Sie sollten die folgende Seite sehen:

Ein 403 Forbidden Fehler erscheint, da noch keine Indexseite im Stammverzeichnis /var/www gefunden wird.

4 Installation von PHP5

PHP5 können Sie mit Hilfe von FastCGI benutzen. Glücklicherweise stellt Debian Squeeze ein PHP5 Paket mit FastCGI zur Verfügung, welches Sie folgendermaßen installieren können (zusammen mit einigen anderen PHP5 Modulen wie php5-mysql, welches Sie brauchen werden, wenn Sie in Ihren PHP Skripts MySQL benutzen 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 entkommentieren Sie die Zeile cgi.fix_pathinfo=1:

vi /etc/php5/cgi/php.ini

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]

Es gibt kein FastCGI Daemon Paket für Debian Squeeze, deshalb müssen Sie das spawn-fcgi Programm von lighttpd benutzen. lighttpd installieren Sie wie folgt:

apt-get install lighttpd

Sie werden eine Fehlermeldung sehen, welche sagt, dass lighttpd nicht starten kann, da Port 80 bereits in Benutzung ist:

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.

Dies ist richtig, da Nginx bereits über Port 80 läuft. Benutzen Sie folgenden Befehl um zu verhindern, dass lighttpd beim Systemstart mitgestartet wird:

update-rc.d -f lighttpd remove

Wir haben lighttpd nur wegen eines Programmes installiert, das mit dem Paket geliefert wird, nämlich /usr/bin/spawn-fcgi, welches Sie benutzen können um FastCGI Prozesse zu starten. Sehen Sie sich dazu folgende Ausgabe an:

spawn-fcgi --help

Um einen über Port 9000 als Benutzer und Gruppe www-data laufenden PHP FastCGI Daemon auf localhost zu starten benutzen Sie den folgenden Befehl:

/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 wollen Sie diesen Befehl nicht bei jedem Systemstart manuell neu ausführen müssen. Um ihn also automatisch ausführen zu lassen, öffnen Sie /etc/rc.local

vi /etc/rc.local

… und fügen den Befehl ans Ende der Datei, jedoch vor der exit Zeile an:

[...]
/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 der Datei /etc/nginx/nginx.conf, welche Sie nun öffnen:

vi /etc/nginx/nginx.conf

Die Konfiguration ist einfach zu verstehen (Sie können hier mehr darüber erfahren: http://wiki.codemongers.com/NginxFullExample / http://wiki.codemongers.com/NginxFullExample2)

Passen Sie zunächst (dies ist optional) die Zahl der worker processes an und setzen keepalive_timeout auf einen vernünftigen Wert:

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

Die Virtual Hosts sind in server {} Containern definiert. Der Standard-vhost ist in der Datei /etc/nginx/sites-available/default definiert - modifizieren Sie ihn folgendermaßen:

vi /etc/nginx/sites-available/default

[...]
server {

 listen 80; ## listen for ipv4
 listen [::]:80 default ipv6only=on; ## listen for 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;

 # redirect server error pages to the static page /50x.html
 #
 #error_page 500 502 503 504 /50x.html;
 #location = /50x.html {
 # root /var/www/nginx-default;
 #}

 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 #
 #location ~ .php$ {
 #proxy_pass http://127.0.0.1;
 #}

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location ~ .php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
 include fastcgi_params;
 }

 # deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /.ht {
 deny all;
 }
}
[..


server_name _;
bewirkt, dass dies ein Standard-catchall vhost ist (Sie können hier natürlich auch einen Hostnamen eintragen wie  www.example.com).

Ich habe index.php zur index Zeile hinzugefügt. root /usr/share/nginx/www; bewirkt, dass /usr/share/nginx/www als Stammverzeichnis gesetzt ist.

Der für PHP wichtige Teil ist der location ~ .php$ {} Absatz. Entkommentieren Sie diesen um ihn zu aktivieren. Ändern Sie bitte die Zeile fastcgi_param zu fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; um (ersetzen Sie /var/www mit dem Stammverzeichnis Ihres vhosts), da der PHP Interpreter das PHP Skript, das Sie in Ihrem Browser aufrufen wollen sonst nicht findet.

Stellen Sie sicher, dass einige Leerzeichen zwischen include und fastcgi_params;
stehen - in der ursprünglichen Datei ist der Ausdruck in einem Wort geschrieben, was ein Fehler ist.

Speichern Sie die Datei nun und laden Nginx neu:

/etc/init.d/nginx reload

Erstellen Sie nun die folgende PHP Datei im Stammverzeichnis /usr/share/nginx/www:

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

<?php
phpinfo();
?>

Rufen Sie die gerade erstellte Datei nun in einem Browser auf (z.B. http://192.168.0.100/info.php):

Wie Sie sehen funktioniert PHP nun durch FastCGI, wie in der Server API Zeile abzulesen ist. Scrollen Sie weiter herunter so sehen Sie alle Module die bereits in PHP5 aktiviert sind, einschließlich des MySQL Moduls.

6 Links

vgwort />

 

 

2 Responses to “Installation von Nginx und PHP5 mit MySQL Unterstützung unter Debian Squeeze”

  1. Tempest Sagt:

    Bei frisch installierten Systemen muss die rc.local zusätzlich als ein “initscript” eingebunden werden:

    $ dpkg -S /etc/init.d/rc.local
    initscripts: /etc/init.d/rc.local

  2. Tempest Sagt:

    Wobei das funktioniert auch nicht…
    Ich muss täglich “/etc/init.d/rc.local” per Hand ausführen.
    Woran könnte es liegen?

Kommentar

Du musst eingeloggt um einen Kommentar zu hinterlassen.