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 12.04 LTS-Server mit PHP5-Unterstützung (über PHP-FPM) und MySQL-Unterstützung (LEMP =L inux + nginx (ausgesprochen "e Motor x") + M ySQL + P PS).
Ich gebe keine Garantie dafür, 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 für Sie unterschiedlich sein, daher müssen Sie sie gegebenenfalls ersetzen.
Ich führe alle Schritte in diesem Tutorial mit Root-Rechten aus, stellen Sie also sicher, dass Sie als Root angemeldet sind:
sudo su
2 Installation von MySQL 5
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 12.04 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 folgende Seite sehen:
Das standardmäßige nginx-Dokumentenstammverzeichnis unter Ubuntu 12.04 ist /usr/share/nginx/www.
4 Installation von PHP5
Wir können PHP5 in nginx durch 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 stark frequentierte Websites), die wir wie folgt installieren:
apt-get install php5-fpm
PHP-FPM ist ein Daemon-Prozess (mit dem Init-Skript /etc/init.d/php5-fpm), 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 (mehr darüber erfahren Sie hier:http://wiki.nginx.org/NginxFullExample und hier:http://wiki.nginx.org/NginxFullExample2)
Passen Sie zuerst (dies ist optional) die Anzahl der Worker-Prozesse an und setzen Sie keepalive_timeout auf einen vernünftigen Wert:
[...] worker_processes 4; [...] 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; ## 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; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; deny all; } # Only for nginx-naxsi : process denied requests #location /RequestDenied { # For example, return an error code #return 418; #} #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; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.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 Listenzeilen, damit nginx auf Port 80 IPv4 und lauscht IPv6.
Servername _; macht dies zu einem Standard-Catchall-Vhost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).
Ich habe index.php zur Indexzeile hinzugefügt. root /usr/share/nginx/www; bedeutet, dass das Dokumentenstammverzeichnis das Verzeichnis /usr/share/nginx/www ist.
Der wichtige Teil für PHP ist die Zeile location ~ \.php$ {}. Kommentieren Sie es aus, um es zu aktivieren. Bitte beachten Sie, dass ich die Zeile try_files $uri =404; um Zero-Day-Exploits zu verhindern (siehe http://wiki.nginx.org/Pitfalls#Passing_Unkontrollierte_Requests_to_PHP und http://forum.nginx.org/read.php?2,88845,page=3). Alternativ, wenn Sie die try_files $uri =404; Zeile können Sie cgi.fix_pathinfo =0 setzen; in /etc/php5/fpm/php.ini (vergessen Sie nicht, PHP-FPM danach neu zu laden).
Speichern Sie nun die Datei und laden Sie nginx neu:
/etc/init.d/nginx reload
Erstellen Sie nun die folgende PHP-Datei im Dokumentenstammverzeichnis /usr/share/nginx/www:
vi /usr/share/nginx/www/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 FPM/FastCGI, wie in der Server-API-Zeile gezeigt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die bereits in PHP5 aktiviert sind. MySQL ist dort nicht aufgeführt, was bedeutet, dass wir noch keine MySQL-Unterstützung in PHP5 haben.
6 MySQL-Unterstützung in PHP5 erhalten
Um MySQL-Unterstützung in PHP zu erhalten, können wir das Paket php5-mysql installieren. Es ist eine gute Idee, einige andere PHP5-Module zu installieren, die Sie möglicherweise für Ihre Anwendungen benötigen. Sie können wie folgt nach verfügbaren PHP5-Modulen suchen:
apt-cache search php5
Wählen Sie die benötigten aus und installieren Sie sie 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
Xcache ist ein kostenloser und offener PHP-Opcode-Cacher zum Zwischenspeichern und Optimieren von PHP-Zwischencode. Es ähnelt anderen PHP-Opcode-Cachern wie eAccelerator und APC. Es wird dringend empfohlen, eines davon zu installieren, um Ihre PHP-Seite zu beschleunigen.
Xcache kann wie folgt installiert werden:
apt-get install php5-xcache
Laden Sie nun PHP-FPM neu:
/etc/init.d/php5-fpm reload
Laden Sie nun http://192.168.0.100/info.php in Ihrem Browser neu und scrollen Sie erneut nach unten zum Modulbereich. Dort sollten Sie jetzt viele neue Module finden, einschließlich des MySQL-Moduls:
7 PHP-FPM dazu bringen, einen Unix-Socket zu verwenden
Standardmäßig lauscht PHP-FPM auf Port 9000 auf 127.0.0.1. Es ist auch möglich, PHP-FPM dazu zu bringen, einen Unix-Socket zu verwenden, wodurch der TCP-Overhead vermieden wird. Öffnen Sie dazu /etc/php5/fpm/pool.d/www.conf...
vi /etc/php5/fpm/pool.d/www.conf
... und lass die Listen-Zeile wie folgt aussehen:
[...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |
Laden Sie dann PHP-FPM neu:
/etc/init.d/php5-fpm reload
Gehen Sie als Nächstes Ihre Nginx-Konfiguration und alle Ihre vhosts durch und ändern Sie die Zeile fastcgi_pass 127.0.0.1:9000; zu fastcgi_pass unix:/tmp/php5-fpm.sock;, z.B. so:
vi /etc/nginx/sites-available/default
[...] location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } [...] |
Zum Schluss nginx neu laden:
/etc/init.d/nginx reload
8 CGI/Perl-Skripte
Wenn Sie CGI/Perl-Skripte mit nginx bereitstellen möchten, lesen Sie bitte dieses Tutorial:Serving CGI Scripts With Nginx On Debian Squeeze/Ubuntu 11.04
Der empfohlene Weg ist die Verwendung von fcgiwrap (Kapitel 4).
9 Links
- nginx:http://nginx.net/
- nginx-Wiki:http://wiki.codemongers.com/Main
- PHP:http://www.php.net/
- PHP-FPM:http://php-fpm.org/
- MySQL:http://www.mysql.com/
- Ubuntu:http://www.ubuntu.com/
Über den Autor
Falko Timme ist Der Besitzer von Timme Hosting (ultraschnelles Nginx-Webhosting). Er ist der Hauptbetreuer von HowtoForge (seit 2005) und einer der Kernentwickler von ISPConfig (seit 2000). Er hat auch zum O'Reilly-Buch "Linux System Administration" beigetragen.