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 /var/db/repos/gentoo/profiles/desc/nginx_modules_http.desc und /var/db/repos/gentoo/profiles/desc/nginx_modules_mail.desc gefunden werden.
Um zum Beispiel das fastcgi
Modul zu aktivieren :
/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 :
/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 |
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 |
http
|
Enable HTTP core support |
http-cache
|
Enable HTTP cache support |
http2
|
Enable HTTP2 module support |
libatomic
|
Use libatomic instead of builtin atomic operations |
pcre
|
Add support for Perl Compatible Regular Expressions |
pcre-jit
|
Enable JIT for pcre |
pcre2
|
Enable support for pcre2 |
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. |
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).
/etc/nginx/nginx.conf
Gentoo's Standard-Konfigurationuser 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 :
/etc/nginx/nginx.conf
Multiseiten-Konfigurationuser 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; }
/etc/nginx/conf.d/local.conf
Simpler Hostserver { 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; }
/etc/nginx/conf.d/local-ssl.conf
Einfacher SSL-Hostserver { listen 443 ssl; server_name host.tld; ssl_certificate /etc/ssl/nginx/host.tld.pem; ssl_certificate_key /etc/ssl/nginx/host.tld.key; }
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.
/etc/nginx/nginx.conf
PHP-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
UNIX-Socket-Kommunikation zu nutzen ist die präferierte und empfohlene Konfiguration
Für PHP 7.0 und neuere PHP-Versionen verwenden Sie folgende Konfiguration:
/etc/php/fpm-php7.1/fpm.d/www.conf
PHP mit UNIX-Socket-Unterstützung ausführenlisten = /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.
/etc/php/fpm-php5.5/php.ini
Zeitzone in php.ini einstellendate.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
Alternativ für systemd:
root #
systemctl enable php-fpm@7.1
root #
systemctl start php-fpm@7.1
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")
/etc/nginx/nginx.conf
Aktivieren und Konfigurieren einer IP-Zugriffsliste für die /nginx_status Seitehttp { 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:
/etc/nginx/nginx.conf
Aktivieren und Konfigurieren der Benutzerauthentifizierung für das / Verzeichnishttp { server { location / { auth_basic "Authentication failed"; auth_basic_user_file conf/htpasswd; } } }
Die htpasswd-Datei kann erzeugt werden mittels:
user $
openssl passwd
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:
/etc/portage/make.conf
Drittparteien-Modul hinzufügenNGINX_ADD_MODULES="/usr/src/nginxmodule"
nginx mit dem aktivierten Drittparteien-Modul neu bauen:
root #
emerge --ask www-servers/nginx
Bedienung
Service-Kontrolle
OpenRC
nginx-Webserver starten:
root #
rc-service nginx start
nginx-Webserver stoppen:
root #
rc-service nginx stop
Fügen Sie nginx zum Standard-Runlevel hinzu, damit der Dienst beim Neustart des Systems automatisch startet:
root #
rc-update add nginx default
Laden Sie die nginx-Konfiguration neu, ohne die Verbindungen zu unterbrechen:
root #
rc-service nginx reload
Den nginx-Service neustarten:
root #
rc-service nginx restart
systemd
nginx-Webserver starten:
root #
systemctl start nginx
nginx-Webserver stoppen:
root #
systemctl stop nginx
Überprüfen Sie den Status des Dienstes:
root #
systemctl status nginx
Aktivieren Sie den Dienst, damit er beim Neustart des Systems automatisch gestartet wird:
root #
systemctl enable nginx
Laden Sie die nginx-Konfiguration neu, ohne die Verbindungen zu unterbrechen:
root #
systemctl reload nginx
Starten Sie den nginx-Dienst neu:
root #
systemctl restart nginx
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. Verwenden Sie die Option -c
mit dem vollständigen Dateipfad, um Konfigurationsdateien zu testen, die sich nicht an den Standardspeicherorten befinden.
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 — ein effizienter und erweiterbarer Web-Server. Es ist einer der am häufigsten eingesetzten Web-Server im Internet.
- Lighttpd — a fast and lightweight 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.
- https://wiki.nginx.org/Main - Das nginx wiki.
- https://github.com/h5bp/server-configs-nginx - H5BP's nginx-Konfigurationen.