Installation von Nginx mit PHP5 (und PHP-FPM) mit MySQL Unterstützung unter Ubuntu 11.10

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

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 Ubuntu 11.10 Server mit PHP5 Unterstützung (durch PHP-FPM) 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 für Ubuntu 11.10 verfügbar, kann also wie folgt installiert werden:

apt-get install nginx

Starten Sie Nginx danach:

/etc/init.d/nginx start

Geben Sie die IP oder den Hostnamen Ihres Webservers in einen Browser ein (z.B. http://192.168.0.100) und Sie sollten die folgende Seite sehen können:

Das standardmäßige Stammverzeichnis unter Ubuntu 11.10 ist /usr/share/nginx/www.

4 Installation von PHP5

PHP5 können Sie mit Hilfe von PHP-FPM benutzen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP FastCGIImplementation mit einigen nützlichen Funktionen für Seiten jeder Größe, besonders aber größeren, geschäftigeren Seiten) welches Sie folgendermaßen installieren können:

apt-get install php5-fpm

PHP-FPM ist ein Daemonprozess (mit dem init Skript /etc/init.d/php5-fpm) welcher als FastCGI Server auf Port 9000 läuft.

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 4;
[...]
 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; this line is default and implied
 listen [::]:80 default ipv6only=on; ## listen for ipv6

 root /usr/share/nginx/www;
 index index.php index.html index.htm;

 # Make site accessible from http://localhost/
 server_name _;

 location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to index.html
 try_files $uri $uri/ /index.html;
 }

 location /doc {
 root /usr/share;
 autoindex on;
 allow 127.0.0.1;
 deny all;
 }

 location /images {
 root /usr/share;
 autoindex off;
 }

 #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 /usr/share/nginx/www;
 }

 # 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;
 include fastcgi_params;
 }

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

Entkommentieren Sie beide listen Zeilen, sodass Nginx auf Port 80 sowohl IPv4 als auch IPv6 Adressen annimmt.

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.

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 FPM/FastCGI, wie in der Server API Zeile abzulesen ist. Scrollen Sie weiter herunter so sehen Sie alle Module die bereits in PHP5 aktiviert sind. MySQL ist dort noch nicht aufgezählt, Sie haben also noch keine MySQL Unterstützung.

6 MySQL Unterstützung In PHP5

Um MySQL Unterstützung in PHP zu bekommen, können Sie das php5-mysql Paket installieren. Außerdem ist es ratsam, einige andere PHP5 Module zu installieren, da Sie diese vielleicht für andere Anwendungen brauchen könnten. Folgendermaßen können Sie nach verfügbaren PHP5 Modulen suchen:

apt-cache search php5

Wählen Sie die jenigen aus, die Sie brauchen und installieren Sie diese wie folgt:

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

Starten Sie dann PHP-FPM neu:

/etc/init.d/php5-fpm restart

Laden Sie nun http://192.168.0.100/info.php in Ihrem Browser neu und scrollen erneut herunter zur Modulsektion. Dort sollten Sie jetzt viele neue Module finden, einschließlich des MySQL Moduls:

7 PHP-FPM einen Unix Socket benutzen lassen

Standardmäßig benutzt PHP-FPM den Port 9000 unter 127.0.0.1. Es ist daher möglich PHP-FPM einen Unix Socket benutzen zu lassen, welches TCP Overhead vermeidet. Öffnen Sie dazu /etc/php5/fpm/pool.d/www.conf

vi /etc/php5/fpm/pool.d/www.conf

… und editieren Sie die listen Zeile, sodass sie wie folgt aussieht:

[...]
;listen = 127.0.0.1:9000
listen = /tmp/php5-fpm.sock
[...]

Starten Sie dann PHP-FPM neu:

/etc/init.d/php5-fpm restart

Gehen Sie danach Ihre Nginx Konfiguration und alle Ihre vhosts durch und ändern die Zeile fastcgi_pass 127.0.0.1:9000; zu fastcgi_pass unix:/tmp/php5-fpm.sock; um, wie z.B. hier:

vi /etc/nginx/sites-available/default

[...]
 location ~ .php$ {
 fastcgi_pass unix:/tmp/php5-fpm.sock;
 fastcgi_index index.php;
 include fastcgi_params;
 }
[...]

Laden Sie dann Nginx neu:

/etc/init.d/nginx reload

8 CGI/Perl Skripts

Wollen Sie CGI/Perl Skripts mit Nginx ausliefern, lesen Sie bitte folgendes Tutorial: Serving CGI Scripts With Nginx On Debian
Squeeze/Ubuntu 11.04
. Der empfohlene Weg ist es fcgiwrap zu benutzen (Kapitel 4).

9 Links

Das könnte dich auch interessieren …