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 Debian Wheezy-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 abweichen, daher müssen Sie sie gegebenenfalls ersetzen.
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 Debian Wheezy 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:
Der standardmäßige nginx-Dokumentenstamm auf Debian Wheezy 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 dem Socket /var/run/php5-fpm.sock 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 einfach zu verstehen (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; ## auf ipv4 warten; diese Zeile ist standardmäßig und impliziert listen [::]:80 default_server ipv6only=on; ## auf IPv6-Stamm lauschen /usr/share/nginx/www; index index.php index.html index.htm; # Website von http://localhost/ Servername localhost zugänglich machen; location / { # Zuerst versuchen, Anfrage als Datei zu liefern, # dann als Verzeichnis, dann auf die Anzeige von 404 zurückfallen. try_files $uri $uri/ /index.html; # Entfernen Sie das Kommentarzeichen, um naxsi an diesem Ort zu aktivieren # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; Autoindex an; 127.0.0.1 zulassen; ::1 zulassen; leugne alles; } # Nur für nginx-naxsi verwendet mit nginx-naxsi-ui :verweigerte Anfragen verarbeiten #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # Serverfehlerseiten auf die statische Seite /50x.html umleiten # error_page 500 502 503 504 /50x.html; location =/50x.html { root /usr/share/nginx/www; } # Übergeben Sie die PHP-Skripte an den FastCGI-Server, der 127.0.0.1:9000 überwacht # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # HINWEIS:Sie sollten "cgi.fix_pathinfo =0;" haben in php.ini # Nur mit php5-cgi:#fastcgi_pass 127.0.0.1:9000; # Mit php5-fpm:fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; schließen Sie fastcgi_params ein; } # Zugriff auf .htaccess-Dateien verweigern, wenn Apaches Dokumentenstamm # mit nginxs einem # Standort übereinstimmt ~ /\.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.
istDer 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).
Speichern Sie nun die Datei und laden Sie nginx neu:
/etc/init.d/nginx neu laden
Als nächstes öffnen Sie /etc/php5/fpm/php.ini...
vi /etc/php5/fpm/php.ini
... und setze cgi.fix_pathinfo=0:
[...]; cgi.fix_pathinfo bietet *echte* PATH_INFO/PATH_TRANSLATED-Unterstützung für CGI. PHPs; Das frühere Verhalten bestand darin, PATH_TRANSLATED auf SCRIPT_FILENAME und nicht auf grok zu setzen. was PATH_INFO ist. Weitere Informationen zu PATH_INFO finden Sie in den CGI-Spezifikationen. Einstellung; Dies auf 1 wird PHP CGI veranlassen, seine Pfade so zu korrigieren, dass sie der Spezifikation entsprechen. Eine Einstellung; von Null bewirkt, dass sich PHP wie zuvor verhält. Standard ist 1. Sie sollten Ihre Skripte reparieren; um SCRIPT_FILENAME statt PATH_TRANSLATED zu verwenden.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=0[...] |
PHP-FPM neu laden:
/etc/init.d/php5-fpm neu laden
Erstellen Sie nun die folgende PHP-Datei im Dokumentenstammverzeichnis /usr/share/nginx/www:
vi /usr/share/nginx/www/info.php
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-Suche 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
APC ist ein kostenloser und offener PHP-Opcode-Cacher zum Caching und Optimieren von PHP-Zwischencode. Es ähnelt anderen PHP-Opcode-Cachern wie eAccelerator und Xcache. Es wird dringend empfohlen, eines davon zu installieren, um Ihre PHP-Seite zu beschleunigen.
APC kann wie folgt installiert werden:
apt-get install php-apc
Laden Sie nun PHP-FPM neu:
/etc/init.d/php5-fpm neu laden
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 eine TCP-Verbindung verwenden
Standardmäßig lauscht PHP-FPM auf dem Socket /var/run/php5-fpm.sock. Es ist auch möglich, PHP-FPM dazu zu bringen, eine TCP-Verbindung zu verwenden. Ö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 =/var/run/php5-fpm.socklisten =127.0.0.1:9000[...] |
Dadurch lauscht PHP-FPM auf Port 9000 auf der IP 127.0.0.1 (localhost). Stellen Sie sicher, dass Sie einen Port verwenden, der auf Ihrem System nicht verwendet wird.
Laden Sie dann PHP-FPM neu:
/etc/init.d/php5-fpm neu laden
Gehen Sie als nächstes Ihre Nginx-Konfiguration und alle Ihre vhosts durch und ändern Sie die Zeile fastcgi_pass unix:/var/run/php5-fpm.sock; zu fastcgi_pass 127.0.0.1:9000;, z. so:
vi /etc/nginx/sites-available/default
[...] location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # HINWEIS:Sie sollten "cgi.fix_pathinfo =0;" haben in php.ini # Nur mit php5-cgi:fastcgi_pass 127.0.0.1:9000; # Mit php5-fpm:#fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; schließen Sie fastcgi_params ein; }[...] |
Zum Schluss nginx neu laden:
/etc/init.d/nginx neu laden
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/
- Debian:http://www.debian.org/
Ü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.