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
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 :
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 :
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).
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 :
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; }
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; }
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.
... 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
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:
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.
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")
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:
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.
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:
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
- https://nginx.org/en/docs/beginners_guide.html - Eine nginx Anfänger-Anleitung. Hilfreich für diejenigen die nicht viel über nginx wissen.
- https://nginx.com/resources/admin-guide/ - Die ngnix Administrations-Anleitung. Hilfreich für Web-Administratoren die in diesem Feld gearbeitet haben.
- http://wiki.nginx.org/Main - Das nginx wiki.
- https://github.com/h5bp/server-configs-nginx - H5BP's nginx-Konfigurationen.