NGINX (ausgesprochen "engine x"). ) ist eine Open-Source-Webserversoftware, die auf hohe Parallelität ausgelegt ist und als HTTP/HTTPS-Server verwendet werden kann , Reverse-Proxy-Server , Mail-Proxy-Server , Software-Load-Balancer , TLS-Terminator , Caching-Server ...
Es ist eine extrem modulare Software. Sogar einige der scheinbar "eingebauten" Teile der Software, wie GZIP oder SSL, sind tatsächlich als Module gebaut, die während der Bauzeit aktiviert und deaktiviert werden können.
Es hat Kern (nativ ) Module und (externe) Module von Drittanbietern von der Gemeinde erstellt. Derzeit gibt es über hundert Module von Drittanbietern, die wir nutzen können.
Geschrieben in C Sprache, es ist eine sehr schnelle und leichtgewichtige Software.
Die Installation von NGINX aus dem Quellcode ist relativ "einfach" - laden Sie die neueste Version des NGINX-Quellcodes herunter, konfigurieren, erstellen und installieren Sie sie.
Sie müssen entscheiden, ob Sie die Mainline herunterladen möchten oder stabil Version, aber das Erstellen ist genau dasselbe.
In dieser Anleitung erstellen wir NGINX mit allen verfügbaren Modulen in der Open-Source-Version von NGINX und verwenden Mainline Version, die bei 1.15.0 ist zum Zeitpunkt dieses Schreibens. Aktualisieren Sie Versionsnummern, wenn neuere Versionen verfügbar sind.
Stabile vs. Mainline-Version
NGINX Open Source ist in zwei Versionen verfügbar:
- Hauptlinie – Enthält die neuesten Funktionen und Fehlerbehebungen und ist immer auf dem neuesten Stand. Es ist zuverlässig, aber es kann einige experimentelle Module enthalten, und es kann auch einige neue Fehler enthalten.
- Stabil – Enthält nicht alle neuesten Funktionen, hat aber kritische Fehlerbehebungen, die immer auf die Hauptversion zurückportiert werden.
Kernmodule vs. Module von Drittanbietern
NGINX hat zwei Arten von Modulen, die Sie verwenden können: Kernmodule und Module von Drittanbietern .
Kernmodule werden von den Kernentwicklern von NGINX erstellt und sind Teil der Software selbst.
Module von Drittanbietern werden von der Community erstellt und Sie können sie verwenden, um die NGINX-Funktionalität zu erweitern. Es gibt viele hilfreiche Module von Drittanbietern, die bekanntesten unter ihnen sind:PageSpeed, ModSecurity, RTMP, Lua etc...
Statische Module vs. dynamische Module
Statische Module gibt es in NGINX seit der allerersten Version. Dynamische Module wurden mit NGINX 1.9.11+ im Februar 2016 eingeführt.
Bei statischen Modulen wird der Satz von Modulen, die eine NGINX-Binärdatei bilden, zur Kompilierzeit durch ./configure
festgelegt Skript. Statische Module verwenden --with-foo_bar_module
oder --add-module=PATH
Syntax.
Um das Kernmodul (Standard) als dynamisch zu kompilieren, fügen wir =dynamic
hinzu , zum Beispiel --with-http_image_filter_module=dynamic
.
Um Drittanbieter-Module als dynamisch zu kompilieren, verwenden wir --add-dynamic-module=/path/to/module
Syntax und dann laden wir sie mit load_module
Direktive im globalen Kontext der nginx.conf
Datei.
Anforderungen zum Erstellen von NGINX aus der Quelle
Im Vergleich zu manch anderer UNIX/Linux-Software ist NGINX ziemlich leichtgewichtig und hat nicht viele Bibliotheksabhängigkeiten. Die standardmäßige Build-Konfiguration hängt von nur 3 zu installierenden Bibliotheken ab: OpenSSL /LibreSSL /Langweiliges SSL , Zlib und PCRE .
- Obligatorische Anforderungen:
- GNU-Compiler-Sammlung (GCC )
- Version der OpenSSL-Bibliothek zwischen 1.0.2 - 1.1.1 oder LibreSSL-Bibliothek oder BoringSSL-Bibliothek
- Version der Zlib-Bibliothek zwischen 1.1.3 - 1.2.11
- Version der PCRE-Bibliothek zwischen 4.4 - 8.42
- Optionale Anforderungen:
- Perl
- LibGD
- MaxMind GeoIP Legacy C-Bibliothek
- libxml2
- libxslt
HINWEIS :NGINX kann auch gegen LibreSSL kompiliert werden und BoringSSL Kryptobibliotheken anstelle von OpenSSL .
Anforderungen
- Ein Server mit Ubuntu 18.04 LTS.
- Ein Nicht-Root-Benutzer mit sudo-Berechtigungen.
Erste Schritte
Überprüfen Sie die Ubuntu-Version:
lsb_release -ds
# Ubuntu 18.04 LTS
Richten Sie die Zeitzone ein:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/Stadt'
Aktualisieren Sie die Pakete Ihres Betriebssystems:
sudo apt update && sudo apt upgrade -y
Erstellen Sie NGINX aus der Quelle
NGINX ist ein in C geschriebenes Programm , also müssen Sie zuerst ein Compiler-Tool installieren. Installieren Sie build-essential
, git
und tree
Pakete:
sudo apt install -y build-essential git tree
Laden Sie die neueste Mainline-Version des NGINX-Quellcodes herunter und extrahieren Sie ihn. NGINX-Quellcode wird als komprimiertes Archiv (gezippter Tarball) verteilt, wie die meisten Unix- und Linux-Software:
wget https://nginx.org/download/nginx-1.15.0.tar.gz &&tar zxvf nginx-1.15.0.tar.gz
Laden Sie den Quellcode der obligatorischen NGINX-Abhängigkeiten herunter und extrahieren Sie ihn:
# PCRE Version 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz &&tar xzvf pcre-8.42.tar.gz
# zlib Version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz &&tar xzvf zlib-1.2.11.tar.gz
# OpenSSL-Version 1.1.0h
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz &&tar xzvf openssl-1.1.0h.tar.gz
Installieren Sie optionale NGINX-Abhängigkeiten:
sudo add-apt-repository -y ppa:maxmind/ppa
sudo apt update &&sudo apt upgrade -y
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
Bereinigen Sie alle .tar.gz
Dateien. Wir brauchen sie nicht mehr:
rm -rf *.tar.gz
Geben Sie das NGINX-Quellverzeichnis ein:
cd ~/nginx-1.15.0
Listen Sie zur Sicherheit Verzeichnisse und Dateien auf, die den NGINX-Quellcode mit tree
bilden Dienstprogramm:
Baum -L 2 .
Kopieren Sie die Handbuchseite von NGINX nach /usr/share/man/man8/
Verzeichnis:
sudo cp ~/nginx-1.15.0/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls / usr/share/man/man8/ | grep nginx.8.gz
# Überprüfen Sie, ob die Manpage für NGINX funktioniert:
man nginx
Um Hilfe zu erhalten, können Sie die vollständige Liste der aktuellen NGINX-Kompilierungszeitoptionen anzeigen, indem Sie Folgendes ausführen:
./configure --help
# Um zu sehen, dass Kernmodule dynamisch erstellt werden können, führen Sie Folgendes aus:
./configure --help | grep -F =dynamisch
Konfigurieren, kompilieren und installieren Sie NGINX:
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid -path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=Ubuntu \
--builddir=nginx-1.15.0 \
--with-select_module \
--with-poll_module \
- -with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-perl_modules_path=/usr/share/perl/5.26.1 \
--with-perl=/usr/bin/perl \
--http-log-path=/var/log/nginx/access.log \
--http-client-body -temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path =/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with- mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.42 \
- -with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0h \
- -with-openssl-opt=no-nextprotoneg \
--with-debug
make
sudo make install
Navigieren Sie nach dem Erstellen von NGINX zur Startseite (~
) Verzeichnis:
CD ~
Symlink /usr/lib/nginx/modules
nach /etc/nginx/modules
Verzeichnis. etc/nginx/modules
ist ein Standardort für NGINX-Module:
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Drucken Sie die NGINX-Version, die Compiler-Version und konfigurieren Sie die Skriptparameter:
sudo nginx -V
# nginx-Version:nginx/1.15.0 (Ubuntu)
# gebaut von gcc 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
# gebaut mit OpenSSL 1.1.0h 27. März 2018
# TLS-SNI-Unterstützung aktiviert
# Konfigurationsargumente:--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/ usr/lib/nginx/modules
# . . .
# . . .
NGINX-Systemgruppe und -Benutzer erstellen:
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginxÜberprüfen Sie die NGINX-Syntax und mögliche Fehler:
sudo nginx -t
# Gibt diesen Fehler aus -> nginx:[emerg] mkdir() "/var/cache/nginx/client_temp" ist fehlgeschlagen (2:Keine solche Datei oder Verzeichnis)
# NGINX-Cache-Verzeichnisse erstellen und die richtigen Berechtigungen festlegen
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/ nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*
# Syntax und mögliche Fehler erneut prüfen.
sudo nginx -tNGINX-Systemd-Unit-Datei erstellen:
sudo vim /etc/systemd/system/nginx.serviceKopieren Sie den folgenden Inhalt und fügen Sie ihn in
/etc/systemd/system/nginx.service
ein Datei:[Unit]Description=nginx – Hochleistungs-WebserverDocumentation=https://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target [Service]Type=forkingPIDFile=/var/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.confExecStart=/usr/sbin/nginx -c /etc/nginx/nginx. confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.targetAktivieren Sie NGINX, um beim Booten zu starten, und starten Sie NGINX sofort:
sudo systemctl enable nginx.service
sudo systemctl start nginx.servicePrüfen Sie, ob NGINX nach einem Neustart automatisch gestartet wird:
sudo systemctl is-enabled nginx.service
# enabledÜberprüfen Sie, ob NGINX ausgeführt wird, indem Sie einen der folgenden Befehle ausführen:
sudo systemctl status nginx.service
# oder
ps aux | grep nginx
# oder
curl -I 127.0.0.1Sie können auch Ihren Browser öffnen und zu Ihrer Domain/IP-Adresse navigieren, um die NGINX-Standardseite anzuzeigen. Das ist ein Indikator dafür, dass NGINX betriebsbereit ist.
Erstellen Sie eine unkomplizierte Firewall (UFW ) NGINX-Anwendungsprofil:
sudo vim /etc/ufw/applications.d/nginxKopieren Sie den folgenden Inhalt und fügen Sie ihn in
/etc/ufw/applications.d/nginx
ein Datei:[Nginx HTTP]title=Webserver (Nginx, HTTP)description=Kleiner, aber sehr leistungsfähiger und effizienter Webserverports=80/tcp[Nginx HTTPS]title=Webserver (Nginx, HTTPS)description=Klein, aber sehr leistungsfähiger und effizienter Webserverports=443/tcp[Nginx Full]title=Webserver (Nginx, HTTP + HTTPS)description=Kleiner, aber sehr leistungsfähiger und effizienter Webserverports=80,443/tcpStellen Sie sicher, dass UFW-Anwendungsprofile erstellt und erkannt werden:
sudo ufw app list
# Verfügbare Anwendungen:
# Nginx Full
# Nginx HTTP
# Nginx HTTPS
# OpenSSHNGINX generiert standardmäßig eine Sicherung
.default
Dateien in/etc/nginx
. Entfernen Sie.default
Dateien aus/etc/nginx
Verzeichnis:sudo rm /etc/nginx/*.defaultPlatzieren Sie die Syntaxhervorhebung der NGINX-Konfiguration für den Vim-Editor in
~/.vim
:# Für normale Nicht-Root-Benutzermkdir ~/.vim/cp -r ~/nginx-1.15.0/contrib/vim/* ~/.vim/# Für Root-Benutzerudo mkdir /root/.vim/sudo cp - r ~/nginx-1.15.0/contrib/vim/* /root/.vim/HINWEIS :Wenn Sie den obigen Schritt ausführen, erhalten Sie eine schöne Syntaxhervorhebung, wenn Sie NGINX-Konfigurationsdateien im Vim-Editor bearbeiten.
Erstellen Sie
conf.d
,snippets
,sites-available
undsites-enabled
Verzeichnisse in/etc/nginx
Verzeichnis:sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}Berechtigungen und Gruppenbesitz von NGINX-Protokolldateien ändern:
sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.logLogrotationskonfiguration für NGINX erstellen.
sudo vim /etc/logrotate.d/nginxFüllen Sie die Datei mit dem folgenden Text, speichern Sie sie und beenden Sie sie:
/var/log/nginx/*.log { daily missingok rotation 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; kill dann -USR1 `cat /var/run/nginx.pid` fi endscript}Alle heruntergeladenen Dateien aus dem Home-Verzeichnis entfernen:
cd ~
rm -rf nginx-1.15.0/ openssl-1.1.0h/ pcre-8.42/ zlib-1.2.11/Das ist es. Jetzt haben Sie die neueste Version von NGINX installiert, indem Sie sie aus dem Quellcode erstellen. Es wird statisch gegen einige wichtige Bibliotheken wie OpenSSL kompiliert. Häufig ist die vom System bereitgestellte Version von OpenSSL veraltet. Wenn Sie diese Installationsmethode mit einer neueren Version von OpenSSL verwenden, können Sie neue Chiffren wie
CHACHA20_POLY1305
nutzen und Protokolle wie TLS 1.3 die in OpenSSL1.1.1.
verfügbar sein wird Indem Sie Ihre eigene Binärdatei kompilieren, können Sie außerdem die Funktionalität Ihres NGINX anpassen, was viel flexibler ist, als eine vorgefertigte Binärdatei zu installieren.