Dieses How-To habe ich von 
Nginx + PHP5 unter Debian GNU/Linux 6.0 "Squeeze" Howto — Asconix Systems - IT Management, Web & Mobile Development gefunden, alledingst habe ich es zu der nginx 1.1.9 angepasst.
Desweiteren habe ich in den How-To eine Vhost Konfiguration hinzugefügt.
Nun zum How-To
Installation von benötigter Software
      Da wir die aktuellste Version von Nginx installieren wollen, werden  ich im Folgenden die Sourcen des Webservers kompilieren (das Debian  Repository enthält lediglich die veraltete Version 0.7.67). Dazu  benötigen wir zunächst eine entsprechende Entwicklungsumgebung, die alle  benötigten Werkzeuge, wie die Compiler-Suite GCC und die verwendeten Bibliotheken enthält. Diese installieren wir mittels:
	Code:
	aptitude install build-essential libpcre3-dev libssl-dev libbz2-dev
 Vorbereitungen
      Zunächst einmal erstellen wir den Systembenutzer und die gleichnamige Gruppe nginx:
	Code:
	useradd -g nginx nginx
 Installation von Nginx
      Nachdem wir eine entsprechende Build-Umgebung installiert haben,  laden wir das Quellcode-Archiv des Projekts herunter und entpacken es.  Dabei verwenden wir die aktuelle Version 1.1.9:
	Code:
	wget http://nginx.org/download/nginx-1.5.0.tar.gz -P /usr/local/src
 
	Code:
	tar xzvf nginx-1.5.0.tar.gz
 
	Code:
	rm  nginx-1.5.0.tar.gz
 Anmerkung: da die Entwicklung des HTTP-Servers Nginx sehr schnell  voranschreitet, empfiehlt es sich stets, die zum Zeitpunkt der  Installation aktuelle Version zu verwenden!
      Nun kompilieren wir Nginx mittels:
	Code:
	./configure --prefix=/var/www --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx \ --with-debug --with-http_ssl_module --with-http_dav_module --with-http_stub_status_module --http-client-body-temp-path=/var/lib/nginx/body/ \ --http-proxy-temp-path=/var/lib/nginx/proxy/ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi/ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi/ \ --http-scgi-temp-path=/var/lib/nginx/scgi/ --with-http_flv_module --with-http_gzip_static_module
 Anmerkung: ich bevorzuge an dieser Stelle die einheitliche  Integration von Nginx in das Debian Dateisystem-Schema, statt auf lokale  Verzeichnisse, wie /usr/local oder /opt auszuweichen. Dem Leser bleibt die Wahl überlassen, diesem Schema zu folgen.
      Das System bestätigt den obigen Aufruf des Configure-Skripts mittels:
	Zitat:
	
	
		| 
			
				Configuration summary   + using system PCRE library   + using system OpenSSL library   + md5: using OpenSSL library   + sha1: using OpenSSL library   + using system zlib library    nginx path prefix: "/var/www"   nginx binary file: "/usr/sbin/nginx"   nginx configuration prefix: "/etc/nginx"   nginx configuration file: "/etc/nginx/nginx.conf"   nginx pid file: "/var/run/nginx.pid"   nginx error log file: "/var/log/nginx/error.log"   nginx http access log file: "/var/log/nginx/access.log"   nginx http client request body temporary files: "/var/lib/nginx/body/"   nginx http proxy temporary files: "/var/lib/nginx/proxy/"   nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi/"   nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi/"   nginx http scgi temporary files: "/var/lib/nginx/scgi/"
			
		 | 
	
	
 Anschließend installieren wir Nginx:
	Code:
	make && make install
 Nachbearbeiten
      Aus Sicherheitsgründen sollte ein Webserver stets unter einer eigenen UID/GID  betrieben werden und dessen Prozesse auf keinen Fall Root-Rechte  besitzen! Daher haben wir bei der obigen Installation die beiden  Konfigurations-Switches --user und --group dementsprechend auf die eindeutige UID/GID nginx gesetzt. Nun setzen wir die Benutzer- und die Gruppenzugehörigkeit des DocumentRoot- und des Logverzeichnisses von Nginx fest:
	Code:
	chown -R nginx.nginx /var/www /var/log/nginx
 Zuletzt erstellen wir ein lokales Arbeitsverzeichnis, das von Nginx benötigt wird:
	Code:
	mkdir  /var/lib/nginx
 
	Code:
	chown -R nginx.nginx /var/lib/nginx
 Konfiguration von Nginx
      Der Webserver Nginx verwendet in unserem Fall die Konfigurationsdatei /etc/nginx/nginx.conf.  Nginx kommt soweit vorkonfiguriert aus, dass wir wenig daran ändern  müssen. Zum einen starten wir den Nginx Webserver als Benutzer nginx, indem wir diesen in der ersten Zeile der Konfigurationsdatei festlegen:
Durch die Konfigurationsoption --prefix (s.o.) haben wir zudem festgelegt, dass sich das DocumentRoot-Verzeichnis sich in /var/www befindet. Daher ersetzen wir das DocumentRoot-Verzeichnis (ca. Zeile 44):
durch
Bei der Installation von Nginx wurde eine entsprechende Test-Index-Datei /var/www/html/index.html angelegt. Wir verschieben diese in das Verzeichnis /var/www und löschen das ursprüngliche Dokumentenverzeichnis:
	Code:
	mv  /var/www/html/index.html /var/www/
 
	Code:
	rm  -rf /var/www/html
 Starten des Webservers Nginx
      Nachdem wir den Webserver installiert haben, können wir diesen zunächst manuell starten mittels:
Daraufhin sollten wir die obige HTML-Datei als Feedback unter 
http://127.0.0.1 erhalten.
      Im Verlauf dieses Howtos werde ich ein Init-Skript vorstellen, mit  dessen Hilfe der Nginx Webserver automatisch gestartet und gestoppt  werden kann (s.u.).
      
Erweiterung der Nginx-Installation um PHP (optional)
      In vielen Fällen wird Nginx als Frontend-Server für eine typische  PHP5- und MySQL- bzw. PostgreSQL-Anwendung benötigt. Nginx bringt von  sich aus jedoch keine entsprechenden Module für PHP-Anwendungen mit  (ähnlich wie bei Lighttpd). Von daher werde ich nun einen Weg aufzeigen,  wie PHP5 in Form von FastCGI in Nginx eingebunden werden kann.
      Zunächst installieren wir die PHP5-Umgebung aus dem Debian-Repository mittels:
	Code:
	aptitude install php5-cgi php5-cli
 Anschließend löschen wir die Standard Index-Seite:
	Code:
	rm  /var/www/index.html
 ... und erstellen ein einfaches PHP-Skript unter /var/www/index.php, das den folgenden Einzeiler enthält:
	PHP-Code:
	
		
			
<?php 
phpinfo(); 
?>
		
	
 Da wir PHP-Skripte in Form von FastCGI ausführen wollen, entkommentieren wir den entsprechenden Konfigurationsteil in der Datei /etc/nginx/nginx.conf (ca. Zeile 65) und passen diesen an. Wir leiten hierbei alle PHP-Skripte an einen FastCGI Server weiter:
	Code:
	location ~ \.php$ {     root           /var/www;     include        /etc/nginx/fastcgi_params;     fastcgi_param  SCRIPT_FILENAME /var/www$fastcgi_script_name;     fastcgi_pass   127.0.0.1:9000;     fastcgi_index  index.php; }
 Damit der Webserver die Index-Datei index.php entsprechend interpretieren kann, ersetzen wir in der Hauptkobfigurationsdatei /etc/nginx/nginx.conf die Zeile 45:
	Code:
	index  index.html index.htm;
 durch
	Code:
	index  index.html index.htm index.php;
 Anschließend starten wir manuell den FastCGI-Daemon:
	Code:
	/usr/bin/php5-cgi -q -b 127.0.0.1:9000
 ... und den Webserver Nginx in einem anderen Terminal mittels:
	Code:
	killall nginx && /usr/sbin/nginx
 Nun sollte das obige PHP-Skript beim Aufruf der URL 
Object not found! automatisch ausgeführt werden und wir einen entsprechenden Status über unsere PHP5-Umgebung erhalten.
      
Start und Stop via Init-Skript
      Ist der Leser bis hierhin dem Howto gefolgt, kann dieser nun sowohl  den Webserver Nginx als auch den FastCGI-Daemon lediglich manuell  starten und stoppen. Im Produktivbetrieb benötigen wir entsprechende  Init-Skripte, die diese Aufgaben kontrolliert übernehmen. Von daher  werde ich im Folgenden jeweils ein solches Skript pro Dienst vorstellen.
      
Nginx
      Zunächst erzeugen wir das Init-Skript /etc/init.d/nginx, mit dessen Hilfe wir den Webserver Nginx kontrollieren können:
	Code:
	#! /bin/sh  ### BEGIN INIT INFO # Provides:          nginx # Required-Start:    $local_fs $remote_fs $network $syslog # Required-Stop:     $local_fs $remote_fs $network $syslog # Default-Start:     2 3 4 5 # Default-Stop:      0 1 6 # Short-Description: starts the nginx web server # Description:       starts nginx using start-stop-daemon ### END INIT INFO  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/nginx NAME=nginx DESC=nginx  test -x $DAEMON || exit 0  # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then   . /etc/default/nginx fi  set -e  case "$1" in   start)     echo -n "Starting $DESC: "     start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \       --exec $DAEMON -- $DAEMON_OPTS || true     echo "$NAME."   ;;   stop)     echo -n "Stopping $DESC: "     start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \       --exec $DAEMON || true     echo "$NAME."   ;;   restart|force-reload)     echo -n "Restarting $DESC: "     start-stop-daemon --stop --quiet --pidfile \       /var/run/$NAME.pid --exec $DAEMON || true     sleep 1     start-stop-daemon --start --quiet --pidfile \       /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true     echo "$NAME."   ;;   reload)     echo -n "Reloading $DESC configuration: "     start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \       --exec $DAEMON || true     echo "$NAME."   ;;   configtest)     echo -n "Testing $DESC configuration: "     if nginx -t > /dev/null 2>&1       then         echo "$NAME."       else         exit $?     fi   ;;   *)     echo "Usage: $NAME {start|stop|restart|reload|force-reload|configtest}" >&2     exit 1   ;; esac  exit 0
 Anschließend machen wir das neue Init-Skript ausführbar:
	Code:
	chmod +x /etc/init.d/nginx
 Damit der Webserver Nginx bei jedem Rechnerstart mitgestartet wird, fügen das obige Skript dem Default-Init-Level hinzu:
	Code:
	update-rc.d nginx defaults
 Anschließend stoppen wir eine eventuell noch laufende Nginx Instanz:
Von nun an können wir das Init-Skript zum Starten und Stoppen von Nginx nutzen:
      
Start des Webservers:
	Code:
	/etc/init.d/nginx start
 Stop des Webservers:
	Code:
	/etc/init.d/nginx stop
 Fast-CGI
      Damit der Webserver Nginx alle PHP-Anfragen entsprechend an den  FastCGI-Daemon delegieren kann, muss auch dieser gestartet sein. In  unserem Fall verwenden wir den eigenständigen FastCGI Daemon spawn-fcgi.  Während dieser früher ein Teil des alternativen Webservers Lighttpd  war, wird dieser nun als eigenständiges Projekt geführt. Daher laden wir  zunächst den Quellcode von spawn-fcgi in der aktuellen Version 1.6.3 (Stand: Februar 2011) herunter, entpacken das Archiv und kompilieren und installieren spawn-fcgi mittels (Bitte selbst nachschauen, welche Version die aktuelle ist.):
	Code:
	wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz -P /usr/local/src
 
	Code:
	tar xzvf spawn-fcgi-1.6.3.tar.gz
 
	Code:
	rm  spawn-fcgi-1.6.3.tar.gz
 
	Code:
	CD  spawn-fcgi-1.6.3
 
	Code:
	make && make install
 Anschließend erstellen wir ein einfaches Skript /usr/local/bin/php-fastcgi:
	Code:
	#!/bin/sh /usr/local/bin/spawn-fcgi -F 1 -C 1 -a 127.0.0.1 -p 9000 -u nginx -g nginx -f "/usr/bin/php5-cgi -c /etc/php5/cgi/php.ini" -P /var/run/fastcgi-php.pid
 ... und machen dieses ausführbar:
	Code:
	chmod a+x /usr/local/bin/php-fastcgi
 Damit spawn-fcgi automatisch nach jedem Rechnerstart mitgestartet wird, erstellen wir ein entsprechendes Init-Skript /etc/init.d/fastcgi:
	Zitat:
	
	
		| 
			
				#!/bin/sh  ### BEGIN INIT INFO # Provides:          fastcgi # Required-Start:    $local_fs $remote_fs $network $syslog # Required-Stop:     $local_fs $remote_fs $network $syslog # Default-Start:     2 3 4 5 # Default-Stop:      0 1 6 # Short-Description: starts the FastCGI server # Description:       starts spawn-fcgi using start-stop-daemon ### END INIT INFO  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/bin/php-fastcgi  test -x $DAEMON || exit 0  set -e  RETVAL=0 case "$1" in   start)     $DAEMON     RETVAL=$?   ;;   stop)     killall -9 php5-cgi     RETVAL=$?   ;;   restart)     killall -9 php5-cgi     $DAEMON     RETVAL=$?   ;;   *)     echo "Usage: php-fastcgi {start|stop|restart}"     exit 1   ;; esac exit $RETVAL
			
		 | 
	
	
 Auch dieses Init-Skript machen wir ausführbar:
	Code:
	chmod a+x /etc/init.d/fastcgi
 ... und fügen es dem Default-Init-Level hinzu:
	Code:
	update-rc.d fastcgi defaults
 Performance-Tuning des Nginx- und PHP5-Setups
      Da wir ein sehr performantes Setup anstreben, möchte ich in diesem  Abschnitt einige Tricks und Kniffe zeigen, wie unser Webserver noch  weiter beschleunigt werden kann.
      Zunächst einmal aktivieren wir die gzip-Kompression, so dass alle  statischen HTML- und CSS-Dateien, sowie alle Bilder komprimiert  übertragen werden. Dazu fügen wir der Hauptkonfiguration /etc/nginx/nginx.conf die folgenden Definitionen hinzu (ca. Zeile 33):
	Code:
	# Compression gzip on; gzip_buffers 16 8k; gzip_comp_level 9; gzip_http_version 1.1; gzip_min_length 10; gzip_types text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon; gzip_vary on; gzip_proxied any; gzip_disable "MSIE [1-6]\.";
 Anschließend starten wir den Webserver neu mittels:
	Code:
	/etc/init.d/nginx restart
 Installation eines relationalen Datenbanksystems (optional)
      In vielen Fällen wird neben einem Webserver mit PHP5-Unterstützung  ein relationales Datenbanksystem benötigt. Da einige Projekte MySQL  verwenden, während andere auf PostgreSQL basieren, möchte ich im  Folgenden die Installation und Konfiguration von beiden  Datenbanksystemen erläutern.
      
MySQL
      In den meisten Fällen verwenden insbesondere PHP5-Projekte MySQL als  Datenbankbankend. Daher installieren wir zunächst MySQL auf unserem  Debian GNU/Linux 6.0 “Squeeze” System mittels:
	Code:
	aptitude install mysql-server
 Damit eine PHP5-Applikation auf unsere MySQL-Datenbank zugreifen kann, benötigen wir zudem die entsprechende PHP-Bibliothek:
PostgreSQL
      Sollten wir PostgreSQL für eine PHP5-Webanwendung benötigen, gestaltet sich die Installation genauso einfach:
	Code:
	aptitude install postgresql
 Damit eine PHP5-Anwendung auf die Datenbank zugreifen kann, benötigen wir zudem die entsprechende PHP-Bibliothek:
	Code:
	aptitude install php5-pgsql
 Einrichten des Vhost unter Nginx
      Nach der ganzen installiation legen wir uns ein Vhost eintrag an.
Als erstes erstellen wir uns erstmal zwei Ordner mit zb.:
	Code:
	mkdir  /home/your_site
 
	Code:
	mkdir  /home/your_site/html
 Nun legen wir unsere Config Datei an für unseren Vhost:
	Code:
	vim /etc/nginx/sites-available/your_site.conf
 und fügen folgendes in die Config datei:
	Code:
	server
{
    server_name .your_site;
 
    access_log /var/log/nginx/your_site.access.log;
 
        error_log /var/log/nginx/your_site.error.log;
 
    root /home/your_site/html;
 
    index index.php index.html index.htm;
 
    # use fastcgi for all php files
    location ~ \.php$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    # deny access to apache .htaccess files
    location ~ /\.ht
    {
        deny all;
    }
}
 und speichern das ganze dann ab.
Nun legen wir eine verknüpfung an und zwar mit folgenden Befehl:
	Code:
	ln  -s /etc/nginx/sites-available/your_site.conf /etc/nginx/sites-enabled/your_site.conf
 Nun Starten wir den nginx neu und zwar mit:
	Code:
	/etc/init.d/nginx restart
 Jetzt ist nun euer nginx einsatzbereit....
PS: BEI DEN BEFEHLEN BITTE DAS CD   KLEIN SCHREIBEN!
 Lg