GNU/Linux >> LINUX-Kenntnisse >  >> Debian

So erstellen Sie Nginx aus dem Quellcode unter Debian 9

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-ServerMail-Proxy-ServerSoftware-Load-BalancerTLS-TerminatorCaching-Server ...

Es ist eine extrem 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 hat Kern (nativModule 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.8 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 SSLZlib und PCRE .

  • Obligatorische Anforderungen:
    • GNU-Compiler-Sammlung (GCC )
    • Version der OpenSSL-Bibliothek zwischen 1.0.21.1.1 oder LibreSSL-Bibliothek oder BoringSSL-Bibliothek
    • Version der Zlib-Bibliothek zwischen 1.1.31.2.11
    • Version der PCRE-Bibliothek zwischen 4.48.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, auf dem Debian 9 (Stretch) ausgeführt wird.
  • Ein Nicht-Root-Benutzer mit sudo-Berechtigungen.

Erste Schritte

Prüfen Sie die Debian-Version:

lsb_release -ds 
# Debian GNU/Linux 9.6 (stretch)

Installieren Sie wgetcurl und sudo Pakete.

apt install -y wget curl sudo

Richten Sie die Zeitzone ein:

sudo dpkg-reconfigure tzdata

Aktualisieren Sie die Pakete Ihres Betriebssystems:

apt update && 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 Paket und andere erforderliche Pakete:

sudo apt install -y build-essential git tree software-properties-common dirmngr apt-transport-https ufw

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.8.tar.gz && tar zxvf nginx-1.15.8.tar.gz

Laden Sie den Quellcode der obligatorischen Nginx-Abhängigkeiten herunter und extrahieren Sie sie:

# 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.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar xzvf openssl-1.1.1a.tar.gz

Optionale Nginx-Abhängigkeiten installieren:

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.8

Listen Sie zur Sicherheit Verzeichnisse und Dateien auf, die den Nginx-Quellcode mit tree bilden Dienstprogramm:

tree -L 2 .

Kopieren Sie die Handbuchseite von Nginx nach /usr/share/man/man8/ Verzeichnis:

sudo cp ~/nginx-1.15.8/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 die vollständige Liste der aktuellen Nginx-Kompilierungszeitoptionen anzeigen, indem Sie Folgendes ausführen:

./configure --help
# To see want core modules can be build as dynamic run:
./configure --help | grep -F =dynamic

Nginx konfigurieren, kompilieren und installieren:

./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.15.8 \
            --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.24.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.1a \
            --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.8 (Debian)
# built by gcc 6.3.0 (Debian 6.3.0-18+deb9u1)
# built with OpenSSL 1.1.1a  20 Nov 2018
# 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

Ü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

Nginx-Systemd-Unit-Datei erstellen:

sudo vim /etc/systemd/system/nginx.service

Kopieren Sie den folgenden Inhalt und fügen Sie ihn in /etc/systemd/system/nginx.service ein Datei:

[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 starten Sie Nginx sofort:

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, ob Nginx ausgeführt wird, indem Sie einen der folgenden Befehle ausführen:

sudo systemctl status nginx.service
# or
ps aux | grep nginx
# or
curl -I 127.0.0.1

Sie können auch Ihren Browser öffnen und zu Ihrer Domain/IP-Adresse navigieren, um die Standard-Nginx-Seite 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/nginx

Kopieren Sie den folgenden Inhalt und fügen Sie ihn in /etc/ufw/applications.d/nginx ein Datei:

[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

Stellen Sie sicher, dass UFW-Anwendungsprofile erstellt und erkannt werden:

sudo ufw app list

# Available applications:
 # nginx Full
 # nginx HTTP
 # nginx HTTPS

nginx generiert standardmäßig eine Sicherung .default Dateien in /etc/nginx . Entfernen Sie .default Dateien aus /etc/nginx Verzeichnis:

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.15.8/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.8/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.dsnippetssites-available und sites-enabled Verzeichnisse in /etc/nginx Verzeichnis:

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

Logrotationskonfiguration für Nginx erstellen.

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
}

Alle heruntergeladenen Dateien aus dem Home-Verzeichnis entfernen:

cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ 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 das in OpenSSL 1.1.1. verfügbar ist Indem Sie Ihre eigene Binärdatei kompilieren, können Sie außerdem die Funktionalität Ihres Nginx anpassen, was viel flexibler ist als die Installation einer vorgefertigten Binärdatei.


Debian
  1. So kompilieren Sie den Nginx-Webserver unter Debian Linux neu

  2. So kompilieren Sie das Brotli-Komprimierungstool aus der Quelle unter Debian 9

  3. So aktualisieren Sie von Debian 10 auf Debian 11

  4. So erstellen Sie nginx mit dem Google PageSpeed-Modul unter Debian 8 (Jessie)

  5. So aktualisieren Sie von Debian 10 auf Debian 11

So aktualisieren Sie von Debian 10 auf Debian 11

Wie man Debian-Pakete aus den Quellen erstellt

So deinstallieren Sie Programme von Debian 10

So leiten Sie in Nginx und Debian 11 von einer Domäne zu einer anderen um

So kompilieren Sie den Linux-Kernel aus der Quelle, um einen benutzerdefinierten Kernel zu erstellen

So installieren Sie Nginx unter Debian 10