Einführung
Nginx ist eine Open-Source-Webserver-Software, die für hohe Parallelität entwickelt wurde und als HTTP / HTTPS-Server, Reverse-Proxy-Server, Mail-Proxy-Server, Software-Load-Balancer, TLS-Terminator, Caching-Server und mehr verwendet werden kann!
Es ist eine sehr modulare Software. Sogar einige der scheinbar "eingebauten" Teile der Software, wie GZIP oder SSL, werden tatsächlich als Module erstellt, die während der Erstellungszeit aktiviert und deaktiviert werden können.
Es verfügt über Kernmodule (native Module) und (externe) Module von Drittanbietern, die von der Community erstellt wurden. Derzeit gibt es über hundert Module von Drittanbietern, die wir verwenden können.
In C geschrieben, ist es eine schnelle und leichte 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 wählen, ob Sie die Hauptleitung oder eine stabile Version herunterladen möchten, aber das Erstellen ist dieselbe.
In diesem Handbuch werden wir eine Hauptversion von Nginx unter Debian 10 (Buster) kompilieren. Wir werden alle verfügbaren Module in der Open-Source-Version von Nginx verwenden.
Warum Nginx aus dem Quellcode kompilieren und installieren?
Sie fragen sich wahrscheinlich, warum man Nginx aus einer Quelle kompilieren sollte, wenn Sie vorbereitete Pakete verwenden können. Hier sind einige Gründe, warum Sie bestimmte Software selbst kompilieren möchten:
- Konfigurationsoptionen steuern.
- So installieren Sie die Software an einem beliebigen Ort. Sie können sogar mehrere verschiedene Versionen derselben Software installieren.
- So steuern Sie die von Ihnen installierte Version. Distributionen bleiben nicht immer mit den neuesten Versionen aller Pakete auf dem neuesten Stand, insbesondere mit Add-Ons zu Softwarepaketen.
- Um besser zu verstehen, wie die Software funktioniert.
Stabile vs. Hauptversion
Nginx Open Source ist in zwei Versionen erhältlich:
- Mainline - Enthält die neuesten Funktionen und Fehlerbehebungen und ist immer auf dem neuesten Stand. Es ist zuverlässig, kann jedoch einige experimentelle Module enthalten und einige neue Fehler enthalten.
- Stabil - Enthält nicht alle aktuellen Funktionen, enthält jedoch wichtige Fehlerkorrekturen, die immer auf die Hauptversion zurückportiert werden.
Kernmodule im Vergleich zu Modulen von Drittanbietern
Nginx verfügt über zwei Modultypen, die Sie verwenden können: Kernmodule und Module von Drittanbietern.
Die Kernentwickler von Nginx erstellen Kernmodule und sind Teil der Software selbst.
Die Community erstellt Module von Drittanbietern, mit denen Sie die Funktionalität erweitern können. Es gibt viele hilfreiche Module von Drittanbietern.
Statische Module vs. dynamische Module
Statische Module sind in Nginx ab der ersten Version vorhanden. Dynamische Module wurden im Februar 2016 mit Nginx 1.9.11+ eingeführt.
Bei statischen Modulen wird eine Reihe von Modulen, die eine Nginx-Binärdatei bilden, zur Kompilierungszeit vom ./configureSkript festgelegt. Statische Module verwenden --with-foo_bar_moduleoder --add-module=PATHSyntax.
Um ein Kernmodul (Standardmodul) als dynamisch zu kompilieren, fügen wir =dynamicbeispielsweise hinzu --with-http_image_filter_module=dynamic.
Um ein Modul eines Drittanbieters als dynamisch zu kompilieren, verwenden wir die --add-dynamic-module=/path/to/moduleSyntax und laden sie dann mithilfe der load_moduleDirektive im globalen Kontext der nginx.confDatei.
Anforderungen für die Erstellung von Nginx aus der Quelle
Im Vergleich zu anderen UNIX / Linux-Programmen ist Nginx ziemlich leicht und weist nicht viele Bibliotheksabhängigkeiten auf. Die Standard-Build-Konfiguration hängt von nur 3 zu installierenden Bibliotheken ab: OpenSSL / LibreSSL / BoringSSL, Zlib und PCRE.
- Obligatorische Anforderungen:
- Optionale Anforderungen:
HINWEIS : Nginx kann anstelle von OpenSSL auch für LibreSSL- und BoringSSL-Kryptobibliotheken kompiliert werden.
Bevor Sie beginnen
Überprüfen Sie die Debian-Version.
lsb_release -ds
# Debian GNU/Linux 10 (buster)
Erstellen Sie einen regulären Benutzer mit sudoZugriff.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
HINWEIS : Ersetzen Sie johndoedurch Ihren Benutzernamen .
Wechseln Sie zu einem neuen Benutzer.
su - johndoe
Richten Sie die Zeitzone ein.
sudo dpkg-reconfigure tzdata
Aktualisieren Sie die Software Ihres Betriebssystems.
sudo apt update && sudo apt upgrade -y
Installieren Sie die erforderlichen Pakete.
sudo apt install -y software-properties-common ufw
Erstellen Sie Nginx aus dem Quellcode
Nginx ist ein in C geschriebenes Programm, daher müssen Sie zuerst ein Compiler-Tool installieren. Installieren build-essential, gitund tree.
sudo apt install -y build-essential git tree
Laden Sie die neueste Hauptversion des Nginx-Quellcodes herunter und entpacken Sie das Quellcodearchiv. Nginx-Quellcode wird wie die meisten Unix- und Linux-Programme als komprimiertes Archiv verteilt.
wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz
Laden Sie den Quellcode der obligatorischen Nginx-Abhängigkeiten herunter und extrahieren Sie ihn.
# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.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.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz
Installieren Sie optionale Nginx-Abhängigkeiten.
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.gzDateien. Wir brauchen sie nicht mehr.
rm -rf *.tar.gz
Geben Sie das Nginx-Quellverzeichnis ein.
cd ~/nginx-1.17.2
Für gute Maßnahmen Listenverzeichnisse und Dateien, mit denen Nginx-Quellcode erstellt wird tree.
tree -L 2 .
Kopieren Sie die Handbuchseite nach /usr/share/man/man8/.
sudo cp ~/nginx-1.17.2/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that man page for Nginx is working
man nginx
Um Hilfe zu erhalten, können Sie eine vollständige Liste der aktuellen Nginx-Optionen zur Kompilierungszeit anzeigen, indem Sie Folgendes ausführen.
./configure --help
# To see want core modules can be built as dynamic run:
./configure --help | grep -F =dynamic
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=Debian \
--builddir=nginx-1.17.2 \
--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.43 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1c \
--with-openssl-opt=no-nextprotoneg \
--with-debug
make
sudo make install
Navigieren Sie nach der Kompilierung zu Ihrem home ( ~) -Verzeichnis.
cd ~
Symlink /usr/lib/nginx/moduleszu /etc/nginx/modules. Dies ist ein Standardplatz 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.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c 28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . .
# . . .
# . . .
Erstellen Sie eine Nginx-Systemgruppe und einen Benutzer.
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow
Überprüfen Sie die Nginx-Syntax und mögliche Fehler.
sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)
# Create NGINX cache directories and set proper permissions
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/*
# Re-check syntax and potential errors.
sudo nginx -t
Erstellen Sie eine Nginx-Systemd-Einheitendatei.
sudo vim /etc/systemd/system/nginx.service
Füllen Sie die /etc/systemd/system/nginx.serviceDatei mit dem folgenden Inhalt.
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
Aktivieren Sie Nginx, um beim Booten zu starten und Nginx sofort zu starten.
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Überprüfen Sie, ob Nginx nach einem Neustart automatisch gestartet wird.
sudo systemctl is-enabled nginx.service
# enabled
Überprüfen Sie den Status.
sudo systemctl status nginx.service
HINWEIS : Sie können überprüfen, ob Nginx ausgeführt wird, indem Sie in einem Webbrowser zur Domain oder IP-Adresse Ihrer Site wechseln. Sie sehen die Nginx-Begrüßungsseite. Dies ist ein Indikator dafür, dass Nginx auf Ihrem VPS aktiv ist.
Erstellen Sie ein UFW Nginx-Anwendungsprofil.
sudo vim /etc/ufw/applications.d/nginx
Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die /etc/ufw/applications.d/nginxDatei ein.
[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp
[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp
[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp
Überprüfen Sie, ob UFW-Anwendungsprofile erstellt und erkannt werden.
sudo ufw app list
# Available applications:
# Nginx Full
# Nginx HTTP
# Nginx HTTPS
# OpenSSH
Nginx generiert standardmäßig Sicherungsdateien .defaultin /etc/nginx. .defaultDateien aus dem /etc/nginxVerzeichnis entfernen .
sudo rm /etc/nginx/*.default
Platzieren Sie die Syntaxhervorhebung der Nginx-Konfiguration für den Vim-Editor in ~/.vim.
# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/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-availableund sites-enabledVerzeichnisse in /etc/nginx.
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Ändern Sie die Berechtigungen und den Gruppenbesitz von Nginx-Protokolldateien.
sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Erstellen Sie eine Protokollrotationskonfiguration für Nginx.
sudo vim /etc/logrotate.d/nginx
Füllen Sie die Datei mit dem folgenden Text, speichern Sie sie und beenden Sie sie.
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Entfernen Sie alle heruntergeladenen Dateien aus dem Home-Verzeichnis.
cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/
Zusammenfassung
Das ist es. Jetzt haben Sie die neueste Version von Nginx installiert. Es wird statisch gegen einige wichtige Bibliotheken wie OpenSSL kompiliert. Oft ist die vom System bereitgestellte Version von OpenSSL veraltet. Mit dieser Installationsmethode mit einer neueren Version von OpenSSL können Sie moderne Chiffren wie CHACHA20_POLY1305und Protokolle wie TLS 1.3 nutzen, die in OpenSSL verfügbar sind 1.1.1. Darüber hinaus können Sie durch Kompilieren Ihrer eigenen Binärdatei anpassen, welche Funktionen Ihr Nginx bietet. Dies ist viel flexibler als die Installation einer vorgefertigten Binärdatei.