nginx/de

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Nginx and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎日本語 • ‎한국어 • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎

Warning: Display title "nginx/de" overrides earlier display title "Nginx".

nginx ist ein robuster, kleiner und hochperformanter Web-Server und ein Reverse-Proxy-Server. Er ist eine gute Alternative zu populären Webservern wie Apache und lighttpd.

Installation

Vor der unmittelbaren Installation des www-servers/nginx Paketes, ist es sinnvoll die USE-Flags für Nginx zu betrachten.

Erweiterte USE-Flags

Nginx nutzt Module um seine Funktionalitäten zu erweitern. Um die Verwaltung dieses modularen Aufbaus zu vereinfachen, nutzt der nginx-ebuild erweiterte USE (USE_EXPAND) -Flags um anzuzeigen welche Module installiert werden sollen.

  • HTTP-bezogene Module können durch die NGINX_MODULES_HTTP -Variable aktiviert werden
  • Mail-bezogene Module können durch die NGINX_MODULES_MAIL -Variable aktiviert werden
  • Drittparteien-Module können durch die NGINX_ADD_MODULES -Variable aktiviert werden

Diese Variablen müssen in /etc/portage.make.conf gesetzt werden. Ihre Beschreibung kann unter /usr/portage/profiles/desc/nginx_modules_http.desc und /usr/portage/profiles/desc/nginx_modules_mail.desc gefunden werden.

Um zum Beispiel das fastcgi Modul zu aktivieren :

DATEI /etc/portage/make.conf
NGINX_MODULES_HTTP="fastcgi"

Obiges übrschreibt den Standard-Wert von NGINX_MODULES_HTTP und setzt ihn auf fastcgi. Um das fastcgi-Modul zu aktivieren ohne den Standard-Wert von NGINX_MODULES_HTTP zu überschreiben, kann die folgende USE-Flag-Notation in /etc/portage/package.use spezifiziert werden :

DATEI /etc/portage/package.use
www-servers/nginx NGINX_MODULES_HTTP: fastcgi

USE-Flags

USE flags for www-servers/nginx Robust, small and high performance http and reverse proxy server

aio Enables file AIO support local
http Enable HTTP core support local
http-cache Enable HTTP cache support local
http2 Enable HTTP2 module support local
libatomic Use libatomic instead of builtin atomic operations local
luajit Use dev-lang/luajit instead of dev-lang/lua for lua support when building the lua http module. local
pcre-jit Enable JIT for pcre local
rtmp NGINX-based Media Streaming Server local
ssl Enable HTTPS module for http. Enable SSL/TLS support for POP3/IMAP/SMTP for mail. local
threads Add threads support for various packages. Usually pthreads global

Emerge

Mit gesetzten USE-Flags, www-servers/nginx installieren :

root #emerge --ask www-servers/nginx

Installationsverifizierung

Die Standardkonfiguration von nginx definiert einen virtuellen Server mit dem Wurzelverzeichnis gesetzt auf /var/www/localhost/htdocs. Aufgrund des bug #449136 erstellt das nginx-ebuild nur das Verzeichnis /var/www/localhost und ohne eine Indexdatei. Um eine funktionierende Standardkonfiguration zu erhalten, das Verzeichnis /var/www/localhost/htdocs und eine simple Indexdatei erstellen:

root #mkdir /var/www/localhost/htdocs
root #echo 'Hello, World!' > /var/www/localhost/htdocs/index.html

Das nginx-Paket installiert einen Init-Dienst welcher Administratoren erlaubt, ihn zu stoppen, zu starten oder neuzustarten. Das nächste Kommando ausführen um den nginx-Dienst zu starten:

root #/etc/init.d/nginx start

Um sicherzustellen, dass nginx korrekt läuft, mit einem Webbrowser die Adresse [http://localhost] aufrufen oder ein Kommandozeilentool wie curl benutzen:

user $curl http://localhost

Konfiguration

Die Nginx-Konfiguration wird mittels der /etc/nginx/nginx.conf-Datei gesteuert.

Einzelseiten-Zugriff

Das folgende Beispiel zeigt einen Einzelseiten-Zugang, ohne dynamische Möglichkeiten (wie z.B. PHP).

DATEI /etc/nginx/nginx.confGentoo's Standard-Konfiguration
user nginx nginx;
worker_processes 1;
 
error_log /var/log/nginx/error_log info;
 
events {
	worker_connections 1024;
	use epoll;
}
 
http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
 
	log_format main
		'$remote_addr - $remote_user [$time_local] '
		'"$request" $status $bytes_sent '
		'"$http_referer" "$http_user_agent" '
		'"$gzip_ratio"';
 
	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;
 
	gzip off;
 
	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;
 
	server {
		listen 127.0.0.1;
		server_name localhost;
 
		access_log /var/log/nginx/localhost.access_log main;
		error_log /var/log/nginx/localhost.error_log info;
 
		root /var/www/localhost/htdocs;
	}
}

Multiseiten-Zugriff

Es ist möglich die include -Direktive auszuhebeln um die Konfiguration in mehrere Teile aufzuspalten :

DATEI /etc/nginx/nginx.confMultiseiten-Konfiguration
user nginx nginx;
worker_processes 1;
 
error_log /var/log/nginx/error_log info;
 
events {
	worker_connections 1024;
	use epoll;
}
 
http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
 
	log_format main
		'$remote_addr - $remote_user [$time_local] '
		'"$request" $status $bytes_sent '
		'"$http_referer" "$http_user_agent" '
		'"$gzip_ratio"';
 
	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;
 
	gzip off;
 
	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;
 
	include /etc/nginx/conf.d/*.conf;
}
DATEI /etc/nginx/conf.d/local.confSimpler Host
server {
        listen 127.0.0.1;
        server_name localhost;
  
        access_log /var/log/nginx/localhost.access_log main;
        error_log /var/log/nginx/localhost.error_log info;
  
        root /var/www/localhost/htdocs;
}
DATEI /etc/nginx/conf.d/local-ssl.confSimpler SSL-Host
server {
    listen 443 ssl;
    server_name host.tld;
    ssl_certificate /etc/ssl/nginx/host.tld.pem;
    ssl_certificate_key /etc/ssl/nginx/host.tld.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;
    ssl_dhparam /etc/ssl/nginx/host.tld.dh4096.pem;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
}

PHP-Unterstützung

Die folgenden Seiten zur nginx-Konfiguration hinzufügen um PHP-Unterstützung zu aktivieren. In diesem Beispiel tauscht nginx Informationen mit dem PHP-Prozess über einen UNIX-Socket aus.

DATEI /etc/nginx/nginx.confPHP-Unterstützung aktivieren
...
http {
...
    server { 
    ...
            location ~ \.php$ {
                       # Nach nicht existenten Skripten suchen oder einen 404-Fehler zurückgeben
                       # Ohne diese Zeile sendet nginx blind jede Anfrage, die auf .php endet, zu php-fpm
                       try_files $uri =404;
                       include /etc/nginx/fastcgi.conf;
                       fastcgi_pass unix:/run/php-fpm.socket;
           }
    }
}

Um dieses Setup zu unterstützen, muss PHP mit Unterstützung für den FastCGI Prozess-Manager dev-lang/php gebaut werden, was durch die fpm USE-Flag gesteuert wird:

root #echo "dev-lang/php fpm" >> /etc/portage/package.use

PHP mit der aktivierten fpm USE-Flag neu bauen:

root #emerge --ask dev-lang/php
Notiz
UNIX-Socket-Kommunikation zu nutzen ist die präferierte und empfohlene Konfiguration

Die /etc/php/fpm-php5.5/php-fpm.conf-Konfiguration überprüfen und folgende Zeile hinzufügen:

DATEI /etc/php/fpm-php5.5/php-fpm.confPHP mit UNIX-Socket-Unterstützung ausführen
listen = /run/php-fpm.socket
listen.owner = nginx

Die Zeitzone in der php-fpm-Datei php.ini setzen. Den <PUT_TIMEZONE_HERE>-Text in der FileBox hierunter mit der passenden Zeitzoneninformation ersetzen.

DATEI /etc/php/fpm-php5.5/php.iniZeitzone in php.ini einstellen
date.timezone = <PUT_TIMEZONE_HERE>

Den php-fpm-Daemon starten:

root #/etc/init.d/php-fpm start

php-fpm zum Default-Runlevel hinzufügen:

root #rc-update add php-fpm default

nginx mit geänderter Konfiguration neu laden:

root #/etc/init.d/nginx reload

IP-Adressen-Zugriffsliste

Das nächste Beispiel zeigt wie man den Zugriff zu einer bestimmten URL (in diesem Fall /nginx_status) nur folgendem erlaubt:

  • bestimmten Hosts (z.B. "192.0.2.1 127.0.0.1")
  • und bestimmten IP-Netzwerken (z.B. "198.51.100.0/24")
DATEI /etc/nginx/nginx.confAktivieren und Konfigurieren einer IP-Zugriffsliste für die /nginx_status Seite
http {
    server { 
            location /nginx_status {
                     stub_status on;
                     allow 127.0.0.1/32;
                     allow 192.0.2.1/32;
                     allow 198.51.100.0/24;
                     deny all;
             }
     }
}

Grundlegende Authentifizierung

nginx erlaubt es, den Zugriff durch Validieren des Benutzernamens und Passwortes einzuschränken:

DATEI /etc/nginx/nginx.confAktivieren und Konfigurieren der Benutzerauthentifizierung für das / Verzeichnis
http {
    server { 
            location / {
                   auth_basic           "Authentication failed";
                   auth_basic_user_file conf/htpasswd;
             }
     }
}

Die htpasswd-Datei kann erzeugt werden mittels:

user $openssl passwd

TLS-Unterstützung

Es wird wärmstens empfohlen als unsicher bekannte Verschlüsselungsverfahren zu de- und "nur" TLS zu aktivieren.

DATEI /etc/nginx/nginx.confUnsichere Verschlüsselungverfahren de- und TLS aktivieren
server {
    listen 443;
    server_name host.tld;
    ssl on;
    ssl_certificate /etc/ssl/nginx/host.tld.pem;
    ssl_certificate_key /etc/ssl/nginx/host.tld.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;
    ssl_dhparam /etc/ssl/nginx/host.tld.dh4096.pem;
}

Das ebuild stellt Standard-selbstsignierte Zertifikate in /etc/ssl/nginx bereit

Vorwärts gerichtete Geheimhaltung

Das Diffie-Hellman-Zertifikat kann mittels openssl erzeugt werden:

user $openssl dhparam -out dh4096.pem 4096

Drittparteien-Module

Den Drittparteien-Modul-Quellcode herunterladen und ihn nach /usr/src verschieben. Das ausgewählte Nginx-Modul kompilieren, dann die folgende Zeile zu /etc/portage/make.conf hinzufügen:

DATEI /etc/portage/make.confDrittparteien-Modul hinzufügen
NGINX_ADD_MODULES="/usr/src/nginxmodule"

nginx mit dem aktivierten Drittparteien-Modul neu bauen:

root #emerge --ask www-servers/nginx

Bedienung

Service-Kontrolle

OpenRC

nginx starten:

root #/etc/init.d/nginx start

nginx stoppen:

root #/etc/init.d/nginx stop

nginx zu dem Default-Runlevel hinzufügen:

root #rc-update add nginx default

Den nginx-Service neustarten:

root #/etc/init.d/nginx restart

Fehlersuche

Im Falle eines Problems können die folgenden Kommandos bei der Fehlersuche helfen.

Validierung der Konfiguration

Verifizieren dass die laufende nginx-Konfiguration keine Fehler aufweist:

root #/usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Beim Ausführen von nginx mit der -t Option wird die Konfigurationsdatei validiert ohne den nginx-Daemon zu starten.

Verifizieren dass die Prozesse laufen

Prüfen dass die nginx-Prozesse laufen:

user $ps aux | egrep 'nginx|PID'
  PID TTY      STAT   TIME COMMAND
26092 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
26093 ?        S      0:00 nginx: worker proces

Gebundene Adressen und Ports verifizieren

Verifizieren dass der nginx-Daemon auf dem richtigen TCP-Port lauscht (wie zum Beispiel 80 für HTTP oder 443 für HTTPS):

root #netstat -tulpen | grep :80
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      0          12336835   -26092/nginx: master

Siehe auch

  • Apache - Der populärste im Internet genutzte HTTP-Server.
  • Lighttpd - Ein schneller, leichtgewichtiger Web-Server.

Externe Ressourcen