Aus LinuxUser 04/2011

Schlanke Apache-Alternative Nginx (Seite 2)

Listing 3

http {
 include mime.types;
 default_type application/octet-stream;
 sendfile on;
 keepalive_timeout 65 20;
 server {
  listen 80;
  server_name localhost;
  location / {
   root /var/www;
   index index.html index.htm;
  }
 }
}

Jetzt gilt es nur noch, eine index.html im Verzeichnis /var/www/ abzulegen und zu testen, ob Nginx funktioniert. Bevor Sie den Server starten, untersuchen Sie am besten noch die Konfiguration via /usr/local/nginx/sbin/nginx -t auf Fehler. Tauchen hier keine Probleme auf, steht dem Start mit /usr/local/nginx/sbin/nginx nichts mehr im Weg, und die Testseite sollte im Browser erscheinen (Abbildung 1).

Abbildung 1: Um einen Server mit Nginx zum Leben zu erwecken, genügen wenige Zeilen in der Konfigurationsdatei.
Abbildung 1: Um einen Server mit Nginx zum Leben zu erwecken, genügen wenige Zeilen in der Konfigurationsdatei.

Wenn Sie den Server mit dem Schalter -s reload aufrufen, dann liest er die Konfiguration neu ein. Der Parameter -s quit beendet den Webserver mittels Quit-Signal, über -s stop beenden Sie ihn mit einem SIGTERM. Haben Sie in die Konfigurationsdatei zwischen zwei Befehlen versehentlich fehlerhafte Änderungen eingefügt, gehen alle Befehle ins Leere. In diesem Fall bringt ein Test Licht ins Dunkel.

Läuft alles wie erwartet, ergänzen Sie den HTTP-Block in der Konfiguration um einige Zeilen, die im Dauerbetrieb das Ausliefern von Webseiten deutlich beschleunigen und den Traffic reduzieren. So empfiehlt es sich, für alle Webseiten Caching und das Komprimieren via Gzip einzuschalten. Das Beispiel in Listing 4 sorgt dafür, dass Webseiten bis zu 30 Tage im Browser-Cache verbleiben und aktiviert die Gzip-Kompression.

Listing 4

# Caching aktivieren
  expires 30d;
  add_header Cache-Control public;
  add_header Last-Modified: $date_gmt;
# Gzip-komprimierung aktivieren
  gzip on;
  gzip_comp_level 5;
  gzip_proxied any;
  gzip_types text/css text/javascript text/xml text/plain application/xml application/xhtml+xml application/x-httpd-php application/x-httpd-fastphp application/rss+xml application/javascript application/x-javascript ;
# Vermisste Seiten, z.B. favicon.ico oder robots.txt sollen nicht geloggt werden
  log_not_found off;

Die Option gzip_comp_level gibt an, wie stark Nginx Seiten vor dem Ausliefern staucht. Die Spanne reicht hier von 1 bis 9, wobei ein höherer Wert kleinere Dateien liefert, aber mehr Rechenkraft benötigt. Die Option gzip_proxied any erlaubt das Komprimieren für jegliche Anfragen. Hier lässt sich die Kompression vom gesendeten Header abhängig machen. In gzip_types finden sich schließlich die Dateitypen, die der Server – neben HTML-Seiten – komprimiert ausliefert. Der Schalter log_not_found off; weist Nginx an, Fehler bei Anforderungen nicht vorhandener robots.txt und favicon.ico nicht zu loggen.

FastCGI und PHP

Viele Webserver unterstützen dynamische Scriptsprachen wie PHP oder Python. Nginx bedient sich dazu der Hilfe des FastCGI-Interfaces. Ruft ein Besucher eine dynamische Seite auf, reicht Nginx die Anfrage an FastCGI weiter. Das aktiviert den passenden Interpreter wie PHP oder Python und liefert die Ergebnisse an Nginx zurück, der sie an den anfragenden Client durchreicht.

Anders als beim Apache oder Lighttpd starten die FastCGI-Prozesse jedoch nicht automatisch aus Nginx – Sie müssen Sie separat auf den Weg bringen. Listing 5 zeigt ein Skript, das 15 Prozesse startet, die mit dem PHP-Interpreter verbandelt sind. Speichern Sie das Skript unter /etc/init.d/fastcgi ab und passen Sie mittels chmod 755 fastcgi die Rechte an. Entweder starten Sie das Skript nun manuell mithilfe des Befehls /etc/init.d/fastcgi start oder binden es in den Boot-Prozess ein. Unter Debian oder Ubuntu geschieht das mittels update-rc.d fastcgi defaults auf der Kommandozeile.

Listing 5

#!/bin/bash
BIND=127.0.0.1:9000
PHP_CGI=/usr/bin/php-cgi
PHP_CGI_NAME=$(basename $PHP_CGI)
PHP_CGI_ARGS="- USER=www-data PATH=/usr/bin PHP_FCGI_CHILDREN=15 PHP_FCGI_MAX_REQUESTS=1000 $PHP_CGI -b $BIND"
RETVAL=0
start() {
  echo -n "Starting PHP FastCGI: "
  start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
  RETVAL=$?
  echo "$PHP_CGI_NAME."
}
stop() {
  echo -n "Stopping PHP FastCGI: "
  killall -q -w -u $USER $PHP_CGI
  RETVAL=$?
  echo "$PHP_CGI_NAME."
}
case "$1" in
  start)
    start ;;
  stop)
    stop ;;
  restart)
     stop
     start ;;
  *)
    echo "Usage: php-fastcgi {start|stop|restart}"
    exit 1
esac
exit $RETVAL

In Listing 5 ist sind die FastCGI-Prozesse an einen TCP-Socket gebunden. Um die leistungsfähigeren Unix-Sockets zu verwenden, ersetzen Sie den Eintrag 127.0.0.1:9000 durch /tmp/php.socket in der Bind-Anweisung. Anschließend weisen Sie Nginx in der Server-Sektion an, alle Anfragen nach PHP-Seiten an FastCGI weiterleiten (Listing 6). Die eingebundene Datei fastcgi_params gelangt bei der Installation von Nginx ins System. Sie enthält viele Standardwerte und bedarf in der Regel keiner weiteren Modifikation.

Listing 6

location ~* \.php$ {
  fastcgi_pass 127.0.0.1:9000;
  # Unix-Socket
//fastcgi_pass   unix:/tmp/php.socket;
  include fastcgi_params;
}

Erweist sich die Konfiguration anschließend als fehlerlos, liefert eine PHP-Datei mit dem Inhalt phpinfo(); die Information, ob alles wie gewünscht funktioniert (Abbildung 2).

Abbildung 2: Dank FastCGI versteht sich Nginx auf Skriptsprachen wie PHP oder Python.
Abbildung 2: Dank FastCGI versteht sich Nginx auf Skriptsprachen wie PHP oder Python.

Die Anfragen nach PHP-Dateien erkennt der Server mithilfe des regulären Ausdrucks \.php$ in der ersten Zeile. Die Tilde und der Stern weisen ihn an, nach allen Treffern zu suchen, also Groß- und Kleinschreibung zu ignorieren. Verwenden Sie im Location-Block nur die Tilde, berücksichtigt die Regel nur exakte Treffer (schreibweisenabhängig); ein = bedeutet, dass die URI dem regulären Ausdruck genau entsprechen muss.

Setzen Sie keine Location-Modifier ein, greift die Regel nur dann, wenn die URI mit dem angegebenen Pattern beginnt. Ein location \web würde also die URIs http://Site/web, http://Site/webseite, http://Site/web/foo, aber nicht http://Site/intern betreffen.

Virtuelle Hosts

In vielen Fällen bedient ein Server nur eine einzige Webseite. Planen Sie, mehrere virtuelle Hosts einzusetzen, sollten Sie im Konfigurationsverzeichnis die bereits vom Apache bekannten Ordner sites-available und sites-enabled anlegen. So haben Sie später die Möglichkeit, Site einfach an- oder abzuschalten oder deren Konfiguration zu ändern. Die Parameter für einen virtuellen Servers finden sich beispielhaft in Listing 7.

LinuxUser 04/2011 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: