This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.

Please visit our production wiki at https://wiki.gentoo.org

nginx/de

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

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

+http Enable HTTP core support
+http-cache Enable HTTP cache support
+http2 Enable HTTP2 module support
+pcre2 Enable support for pcre2
aio Enables file AIO support
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
http3 Enable HTTP3 module support
ktls Enable Kernel TLS offload (kTLS)
libatomic Use libatomic instead of builtin atomic operations
pcre Add support for Perl Compatible Regular Expressions
pcre-jit Enable JIT for pcre
rtmp NGINX-based Media Streaming Server
selinux  !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
ssl Enable HTTPS module for http. Enable SSL/TLS support for POP3/IMAP/SMTP for mail.
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
threads Add threads support for various packages. Usually pthreads
vim-syntax Pulls in related vim syntax scripts

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