Nginx (ausgesprochen „Engine x“) ist ein kostenloser, hochleistungsfähiger Open-Source-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 Ubuntu 8.10-Server mit PHP5-Unterstützung (über FastCGI) und MySQL-Unterstützung installieren können.
1 Vorbemerkung
In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100. Diese Einstellungen können für Sie abweichen, daher müssen Sie sie gegebenenfalls ersetzen.
2 Installation von MySQL 5.0
Um MySQL zu installieren, führen wir
ausapt-get install mysql-server mysql-client
Sie werden aufgefordert, ein Passwort für den MySQL-Root-Benutzer anzugeben – dieses Passwort gilt sowohl für den Benutzer [email protected] als auch für [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 Installieren von Nginx
Nginx ist als Paket für Ubuntu 8.10 verfügbar, das wir wie folgt installieren können:
apt-get install nginx
Danach nginx starten:
/etc/init.d/nginx start
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:
Um nginx beim Booten starten zu lassen, führen Sie
ausupdate-rc.d nginx defaults
4 Installation von PHP5
Wir können PHP5 über FastCGI in Nginx zum Laufen bringen. Glücklicherweise stellt Ubuntu ein FastCGI-fähiges PHP5-Paket bereit, das wir wie folgt installieren (zusammen mit einigen PHP5-Modulen wie php5-mysql, die Sie benötigen, wenn Sie MySQL aus Ihren PHP-Skripten 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-mhash 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 fügen Sie die Zeile cgi.fix_pathinfo =1 ganz am Ende der Datei hinzu:
vi /etc/php5/cgi/php.ini
[...] cgi.fix_pathinfo = 1
Es gibt kein eigenständiges FastCGI-Daemon-Paket für Ubuntu, daher verwenden wir das spawn-fcgi-Programm von lighttpd. Wir installieren lighttpd wie folgt:
apt-get install lighttpd
Sie sehen eine Fehlermeldung, die besagt, dass lighttpd nicht gestartet werden konnte, da Port 80 bereits verwendet wird. So soll es sein, denn nginx lauscht bereits auf Port 80. Run
update-rc.d -f lighttpd remove
damit lighttpd beim Booten nicht startet.
Wir haben lighttpd installiert, weil wir nur ein Programm benötigen, das im Paket enthalten ist, /usr/bin/spawn-fcgi, mit dem wir FastCGI-Prozesse starten können. Schau mal 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 läuft, 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 booten. Damit das System den Befehl automatisch beim Booten ausführt, öffnen Sie /etc/rc.local...
vi /etc/rc.local
... und fügen Sie am Ende der Datei (vor der Exit-Zeile) den Befehl 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 (mehr darüber erfahren Sie hier:http://wiki.codemongers.com/NginxFullExample und hier:http://wiki.codemongers.com/NginxFullExample2)
Erhöhen Sie zunächst (optional) die Anzahl der Worker-Prozesse und setzen Sie keepalive_timeout auf einen vernünftigen 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 – ändern wir ihn wie folgt:
vi /etc/nginx/sites-available/default
[...] server { listen 80; server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default; 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$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$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; } } [...]
Servername _; macht dies zu einem Standard-Catchall-Vhost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).
In der Position / Teil habe ich index.php zur Indexzeile hinzugefügt. root /var/www/nginx-default; bedeutet, dass der Dokumentenstamm das Verzeichnis /var/www/nginx-default.
istDer wichtige Teil für PHP ist die Zeile location ~ \.php$ {}. Kommentieren Sie es aus, um es zu aktivieren. Bitte stellen Sie sicher, dass Sie die Zeile fastcgi_param in fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name ändern; (ersetzen Sie /var/www/nginx-default durch den Dokumentenstamm Ihres vhosts), da der PHP-Interpreter sonst das PHP-Skript, das Sie in Ihrem Browser aufrufen, nicht findet.
Stellen Sie sicher, dass zwischen include und fastcgi_params einige Leerzeichen stehen; - in der Standarddatei wird 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 im Document Root /var/www/nginx-default die folgende PHP-Datei:
vi /var/www/nginx-default/info.php
<?php phpinfo(); ?>
Nun nennen wir diese Datei in einem Browser (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 gezeigt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die bereits in PHP5 aktiviert sind, einschließlich des MySQL-Moduls:
6 Links
- nginx:http://nginx.net/
- nginx-Wiki:http://wiki.codemongers.com/Main
- PHP:http://www.php.net
- MySQL:http://www.mysql.com
- Ubuntu:http://www.ubuntu.com/