Tutorials - Nginx
Sprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk
Nginx
Diese Seite wurde 1788 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
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 :)
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.
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.
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.
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 Programmauthor bald entsprechende Konfigurationsanweisungen einbauen wird.
Laut Google-Statistik liegt Nginx schon jetzt unter den Top-5.
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