Nginx für statische Inhalte und als Proxy für Apache nutzen

Am Beispiel von Suse Linux Enterprise Server 10 möchte ich kurz zeigen, wie die Konfiguration eines performanten Webservers mit nginx für statische Inhalte und Apache für dynamische Inhalte aussehen kann.

Vorteil dieser Lösung ist der geringere Footprint von nginx (wie z.B. auch lighty) im Vergleich zu Apache. Statische Dokumente werden schneller augeliefert und benötigen deutlich weniger Hauptspeicher. Bei mehr als 150 gleichzeitgen connections im Produktivbetrieb bleibt bei mir die CPU-Auslastung von nginx sehr gering (<1%). Zudem wird die einfache und bewährte Konfiguration von Apache für die dynamsichen Inhalte genutzt.

Nachteilig ist der erhöhte Administrationsaufwand sowie die Möglichkeit einer zusätzlichen Sicherheitslücke mit nginx.

Sinnvoll ist ebenfalls die Einrichtung von apache als worker (optimal als fgcid, falls php notwendig ist). Im Standard ist überlicherweise prefork konfiguriert, je nach Distribution lässt sich dies umstellen (in einem weiteren Blogeintrag gehe ich auf die Details für SLES ein).

Installation (bezogen aus SLES 10):

Paket nginx-stable-xxx.rpm vom opensuse Repository herunterladen. Nginx (wie auch lighty) sind leider nicht in SLES 10 als Paket vorhanden. Alternativ kann natürlich nginx selbst kompiliert werden.
nginx-Paket installieren mit rpm -ivh nginx-stable-xxx.rpm und alle Abhängigkeiten, falls vorhanden, auflösen.

Da Apache und nginx beide auf Port 80 hören möchten, muss einer der beiden umkonfiguriert werden. In unserem Beispiel Apache. Hierzu gibt es zwei Möglichkeiten:

  1. Nginx auf Port ip-adresse:80 und Apache auf 127.0.0.1:80 (es wird also Apache gesagt, dass er nur lokal auf 127.0.0.1 horchen soll)
  2. Nginx auf Port 80 und Apache z.B. auf Port 81. Der Apache Port spielt keine grosse Rolle, er sollte nur nicht belegt sein (herauszufinden über “netstat -an |grep 81″ unter Linux)

Ich habe mich im Beispiel für 2. entschieden.

Dazu muss in der httpd.conf (bei SLES in /etc/apache2/listen.conf) folgende Änderung gemacht werden:

Listen 81

Alle Anfragen, die nginx nicht beantworten kann (z.B. php-Scripts) werden über das Proxy-Modul von nginx an Apache weitergeleitet.

Die Konfiguration von nginx hierzu:

#user  nobody;
user wwwrun www;
#worker_processes  1;
worker_processes  2;

events {
worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;

server {
listen       80;
access_log   off;
server_tokens off;

location / {
proxy_pass http://127.0.0.1:81;
include /etc/nginx/proxy.conf;
}

location ~* ^.+.(jpe?g|xml|flv|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|js|swf|avi|mp3)$ {
expires 4h;
root /bla/blubb/webroot;
}

}

}

Es wird die Proxy-Konfiguration /etc/nginx/proxy.conf gelesen, die folgendermassen aussieht:

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;

Natürlich sollten beide Konfigurationsdateien angepasst werden.

Als Tipp: Mit

if (!-f $request_filename) {
proxy_pass http://127.0.0.1:81;
break;
}

kann z.B. getestet werden, ob eine statische Datei vorhanden ist. Falls nicht, wird an Apache weitergeleitet.

Theoretisch sollte nach der Änderung und einem Restart beider Server alles funktionieren. Wichtig ist, dass beide Server denselben Benutzer für das webroot benutzen (bei SLES wwwroot im Standard), deshalb die Änderung “user wwwrun www;”.

Die Dokumentation der einzelnen nginx-Module kann hier eingesehen werden:

http://wiki.nginx.org/NginxModules

Auf die Umstellung des Apache auf Worker mit fcgid gehe ich in einem weiteren Blogeintrag ein, sonst wird es zu unübersichtlich…

Veröffentlicht in IT, Tipps. Schlagwörter: , , , , , , . 6 Kommentare »

Asus P5Q Pro und Vista Energiesparmodus Hibernate (S4)

Ich habe gestern meine Tastatur auf einen anderen USB-Port umgesteckt und auf einmal klappte der Energiesparmodus nicht mehr. Warum? Nun ja, so ganz wollte mir das auch nicht in den Kopf.

Es liegt tatsächlich am Asus Mainboard und zwar an den Jumpereinstellungen für die USB-Ports. Die “oberen” hinteren USB-Ports sind bereits für S4 “gejumped” die anderen Ports für S1 und S2. Warum hier ab Werk unterschieden wird, ist mir noch nicht so ganz klar.

Nach dem Ändern der Jumper  auf +5VSB (nahe der PCI-Steckplätze wie im Handbuch erwähnt) funktioniert der S4-Modus von Vista an allen USB-Ports wieder reibungslos. Vermisst habe ich auch eine Funktion im Bios, um diese Funktion generell abzuschalten. Man kann wohl nicht alles haben…

Inzwischen bin ich mir auch wegen der bekannten An-Aus-Problematik nach Stromunterbrechung mit dem Board nicht mehr sicher, ob dies ein guter Kauf war.

Veröffentlicht in IT, Tipps. Schlagwörter: , , , , , , . Kommentar schreiben »

Festplatten entkoppeln beim Chieftec Mesh

Der Chieftec Mesh ist ansich ein sehr schönes Gehäuse, nur leider sind die Festplattenaufnahmen nicht entkoppelt. Manche Festplatten bringen das Gehäuse zum starken Schwingen. Ich habe mir über ebay von paxpc_de ein Entkopplungsset für etwas unter 40€ (für 8 Festplatten) bestellt und eingebaut.

Der Vorteil diese Lösung liegt auf der Hand: Die normalen Festplatteneinschübe können genutzt werden, andere Lösungen nutzen einen eigenen entkoppelten Käfig und dafür benötigt man mehr oder weniger 5,25 Zoll-Einschübe.

Nach dem Einbau war ich vom Ergebnis doch überrascht, die Festplatten sind sehr gut entkoppelt und fast nicht hörbar.

Der Einbau (bei mir für den Bigtower) ist etwas langwierig, die Anleitung aber detailreich und einfach umzusetzen.

Fazit: Ich kann das Set sehr empfehlen, evtl. werde ich noch ein Set für meinen zweiten Mesh nachbestellen…

Veröffentlicht in IT, Tipps. Schlagwörter: , , , , , . Kommentar schreiben »

Argument list too long rm Befehl

Beim löschen von sehr vielen Dateien kann es vorkommen, dass Linux sich über die Länge der Argumentenliste beschwert. Ein Workaround hierfür ist der find-Befehl:

Statt

rm index.html.*

einfach im Verzeichnis der zu löschenden Dateien

find . -name ‘index.html.*’ |xargs rm

verwenden.

Veröffentlicht in IT, Tipps. Schlagwörter: , , , , . 3 Kommentare »
Follow

Bekomme jeden neuen Artikel in deinen Posteingang.