Tutorials - Nginx

Sprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk

Nginx

Diese Seite wurde 14795 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: nginx redirecting small fast quick reverse proxy howto

Inhaltsverzeichnis



Vorwort Top


Wer dieses Tutorial liest, sollte auch einen kurzen Blick auf das Varnish Caching-Proxy-Tutorial werfen.

Nginx ist ein Reverse-Proxy ohne Cache-Funktionen, dafür mit vielen, einfachen und schnellen Weiterleitungsregeln (Redirects und Rewrites). Zusätzlich verfügt er auch über einen eingebauten Webserver, mit welchem er statische Inhalte, aber auch dynamische CGI's ausliefern kann.

Somit liegt es im Auge des Betrachters, ob es sich dabei um einen flinken Webserver mit Proxy-Funktionen oder um einen Proxy mit Webserver-Funktionen handelt.

Ein ideales Gespann ergibt sich, wenn man statt Apache + Squid die Kombination Nginx + Varnish verwendet. Beide sind wesentlich schlänker als die erstgenannten und weniger Code hat auch meistens weniger Fehler :)

Funktion Top


Nginx befindet sich meist an vordester Front zum Internet und platziert sich somit zwischen den Usern und einem Caching-Proxy, ansonsten direkt vor dem eigentlich Web-Application-Server.

Sein großer Vorteil gegenüber Apache besteht in seiner Konfigurierbarkeit. So lässt sich prinzipiell Alles durchleiten, nur bestimmte Verzeichnisse bzw. Dateien werden lokal ausgeliefert. Zum Beispiel ist es möglich, die Error-Pages, CSS, Bilder direkt von Nginx rauszuschicken.

Installation Top


Da z.B. Debian keine aktuellen Pakete anbietet, bleibt nur der Weg des Selbstkompilierens.

Code:


cd /usr/src/local
wget http://sysoev.ru/nginx/nginx-0.5.31.tar.gz
tar xvfz nginx-0.5.31.tar.gz
cd nginx-0.5.31
./configure \
       --with-poll_module \
       --prefix=/usr \
       --user=www-data \
       --group=www-data \
       --conf-path=/etc/nginx/nginx.conf \
       --pid-path=/var/run/nginx.pid \
       --error-log-path=/var/log/nginx/error.log \
       --http-log-path=/var/log/nginx/access.log \
       --http-client-body-temp-path=/var/cache/nginx/client-body \
       --http-proxy-temp-path=/var/cache/nginx/proxy \
       --http-fastcgi-temp-path=/var/cache/nginx/fastcgi  \
       --with-http_ssl_module \
       --with-http_realip_module \
       --with-http_addition_module \
       --with-http_dav_module \
       --with-http_stub_status_module \
       --with-http_flv_module
make && make install



Nun befindet sich Nginx frisch und jungfräulich auf der Platte.

Konfiguration Top


Als erstes begeben wir uns nun ins Verzeichnis /etc/nginx und erstellen dort den Ordner vhosts.d in welchen wir später die domainspezifischen Konfigurationen ablegen.

Meist lohnt es sich, die Standardkonfiguration komplett zu ersetzen.

/etc/nginx/nginx.conf:


user  www-data;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;

events {
    worker_connections  8192;
    use epoll;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  log_format main
      '$remote_addr - - [$time_local] '
      '"$request" $status $body_bytes_sent '
      '"$http_referer" "$http_user_agent" '
      '"$gzip_ratio"';
  log_format full
      '$remote_addr - - [$time_local] '
      '"$request" $status $body_bytes_sent '
      '"$http_referer" "$http_user_agent" "$http_host" '
      '$request_time "$http_x_forwarded_for" "$http_via" '
      '"$gzip_ratio"';
  log_format timing
      '$remote_addr - $remote_user [$time_local] '
      '$request upstream_response_time $upstream_response_time '
      'msec $msec request_time $request_time';

  access_log /var/log/nginx/access.log combined;

  proxy_connect_timeout 120;
  server_names_hash_bucket_size 64;

  client_header_timeout   10m;
  client_body_timeout     10m;
  send_timeout            10m;

  connection_pool_size            256;
  client_header_buffer_size       1k;
  large_client_header_buffers     4 2k;
  request_pool_size               4k;

  client_max_body_size    10m;

  gzip on;
  gzip_min_length 1100;
  gzip_buffers    4 8k;
  gzip_types text/css text/plain text/html application/x-javascript;

  output_buffers  1 32k;
  postpone_output 1460;

  sendfile        on;
  tcp_nopush      on;
  tcp_nodelay     on;

  keepalive_timeout       75 20;

  ignore_invalid_headers  on;

  index index.html;

  upstream varnish {
    server 127.0.0.1:6081;
  }

  include /etc/nginx/vhosts.d/*.conf;
}



Jetzt können wir unsere erste Domain-Konfig erstellen:

/etc/nginx/vhosts.d/example.com:


server {
    listen 80;
    server_name www.example.com;
    rewrite ^(.*)$ http://example.com$1 permanent;
}

server {
    listen 80;
    server_name example.com;

    access_log  /var/log/nginx/example.com_access.log combined;

    location ^~ /static/ {
        root /var/www/example.com;
    }

    location ^~ /foobar/ {
        rewrite ^/foobar/(.*)$ /something-else/$1;
        root /var/www/example.com;
    }

    error_page 403 /static/error/403.html;
    error_page 404 /static/error/404.html;
    error_page 500 /static/error/500.html;
    error_page 502 /static/error/502.html;
    error_page 503 /static/error/503.html;
    error_page 504 /static/error/504.html;

    # everything else goes here
    location ^~ '/' {
        # offline page
        #return 503;

        proxy_read_timeout 300;
        proxy_set_header Host $host;
        proxy_pass http://varnish;
    }
}



In diesem Beispiel wird davon ausgegangen, dass sich entsprechende Error-Pages in /var/www/example.com/static/error/ befinden.

Schlusswort Top


Nginx ist ein erstklassiger Redirecting-Reverse-Proxy, der seine Arbeit zuverlässig erledigt. Manchmal tun sich jedoch kleine Stolpersteine auf, wenn z.B. das SSL-Cert-File auch das CA-Cert enthalten muss. Oder wenn der Server ohne plausible Fehlermeldung nicht starten will, weil listen auf eine nicht existierende IP zeigt.

Besonders in Kombination mit Zope muss man bei Cookies, Memcache usw. etwas experimentieren, bis man eine optimale Konfiguration entwickelt hat. Ich bin jedoch zuversichtlich, dass der Programmautor bald entsprechende Konfigurationsanweisungen einbauen wird.

Laut Google-Statistik liegt Nginx schon jetzt unter den Top-5.

Siehe auch Top




Weblinks Top



Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden

Sprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk/Nginx