Wie man Nginx aus den Quellen auf Fedora 29 baut

Nginx (ausgesprochen „engine x“) ist eine Open-Source-Webserver-Software, die mit Blick auf hohe Gleichzeitigkeit entwickelt wurde und als HTTP/HTTPS-Server, Reverse-Proxy-Server, Mail-Proxy-Server, Software-Lastausgleich, TLS-Terminator, Caching-Server verwendet werden kann…

Es handelt sich um ein extrem modulares Stück Software. Sogar einige der scheinbar „eingebauten“ Teile der Software, wie GZIP oder SSL, sind in Wirklichkeit als Module gebaut, die während der Bauzeit aktiviert und deaktiviert werden können.

Es hat (native) Kernmodule und(externe) Module von Drittanbieternvon der Gemeinschaft geschaffen. Im Moment gibt es über hundert Module von Drittanbietern, die wir nutzen können.

In der Sprache C geschrieben, ist es ein sehr schnelles und leichtes Stück Software.

Die Installation von Nginx aus dem Quellcode ist relativ „einfach“ – laden Sie die neueste Version des Nginx-Quellcodes herunter, konfigurieren, kompilieren und installieren Sie ihn.

Sie müssen wählen, ob Sie die Mainline- oder die stabile Version herunterladen wollen, aber das Bauen ist genau dasselbe.

In diesem Tutorial werden wir Nginx mit allen verfügbaren Modulen in der Open-Source-Version von Nginx bauen und wir werden Folgendes verwendenHauptseiteVersion, die sich bei1.15.8zum Zeitpunkt der Erstellung dieses Dokuments. Aktualisieren Sie die Versionsnummern, wenn neuere Versionen verfügbar sind.

Stabile vs. Mainline-Version

Nginx Open Source ist in zwei Versionen verfügbar:

  • Mainline – 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 eine Reihe neuer Fehler enthalten.
  • Stable – Enthält nicht alle aktuellen Funktionen, hat aber kritische Fehlerbehebungen, die immer in 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.

Die Kernmodule werden von den Nginx-Kernentwicklern erstellt und sind Teil der Software selbst.

Module von Drittanbietern werden von der Gemeinschaft erstellt und Sie können sie zur Erweiterung der Nginx-Funktionalität verwenden. Es gibt eine Menge hilfreicher Module von Drittanbietern, die bekanntesten davon sind PageSpeed, ModSecurity, RTMP, Lua usw..

Statische Module vs. dynamische Module

Statische Module existieren in Nginx von der ersten Version an. Dynamische Module wurden mit Nginx 1.9.11+ im Februar 2016 eingeführt.

Bei statischen Modulen wird ein Satz von Modulen, die eine Nginx-Binärdatei bilden, zur Kompilierzeit durch das Skript festgelegt. Statische Module verwenden oder Syntax--with-foo_bar_module.

Um das Kern-(Standard-)Modul als dynamisch zu kompilieren, fügen wir , zum=dynamicBeispiel .

Um Module von Drittanbietern als dynamisch zu kompilieren, verwenden wir--add-dynamic-module=/path/to/moduledie Syntax und laden sie dann mit Hilfe der Direktive imload_moduleglobalen Kontext der Datei.

Anforderungen für die Erstellung von Nginx aus der Quelle

Im Vergleich zu einigen anderen UNIX/Linux-Programmen ist Nginx ziemlich leichtgewichtig und hat nicht viele Bibliotheksabhängigkeiten. Die Standard-Build-Konfiguration hängt von nur 3 zu installierenden Bibliotheken ab: OpenSSL/LibreSSL/BoringSSL, Zlib und PCRE.

Anforderungen

  • Ein Server, auf dem das Fedora-29-System läuft.
  • Ein Nicht-Root-Benutzer mit sudo-Berechtigungen.

Erste Schritte

Überprüfen Sie Ihre Fedora-Version:

cat /etc/fedora-release
# Fedora release 29 (Twenty Nine)

Richten Sie die Zeitzone ein:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Aktualisieren Sie die Pakete Ihres Fedora-Betriebssystems:

sudo dnf upgrade -y

Installieren Sie die Pakete vim, curl, wget und tree:

sudo dnf install -y vim curl wget tree

Nginx aus den Quellen bauen

Nginx ist ein Programm, das inCSie müssen also zunächst ein Compiler-Werkzeug installieren.:

sudo dnf groupinstall -y 'Development Tools'

Laden Sie die neueste Mainline-Version des Nginx-Quellcodes herunter und extrahieren Sie ihn. Nginx-Quellcode wird wie die meisten Unix- und Linux-Programme als komprimiertes Archiv (gzipped tarball) verteilt:

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 diese:

# 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

Installieren Sie optionale Nginx-Abhängigkeiten:

sudo dnf install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

Alles aufräumen.tar.gzDateien, da sie nicht mehr notwendig sind:

rm -rf *.tar.gz

Geben Sie das Nginx-Quellverzeichnis ein:

cd ~/nginx-1.15.8

Für eine gute Maßnahme listen Sie Verzeichnisse und Dateien auf, die Nginx-Quellcode mittreeDienstprogramm:

tree -L 2 .

Kopieren Sie die Nginx-Handbuchseite 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

Nginx-Manpage

Als Hilfe können Sie die vollständige Liste der aktuellen Nginx-Kompilierzeit-Optionen durch Ausführen sehen:

./configure --help
# To see want core modules can be build 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/lib64/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=Fedora \
            --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/lib64/perl5 \
            --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

Nachdem Sie Nginx gebaut haben, navigieren Sie nach Hause (~) Verzeichnis:

cd ~

Symlink/usr/lib64/nginx/modulesauf/etc/nginx/modulesVerzeichnis.etc/nginx/modulesist ein Standardplatz für Nginx-Module:

sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules

Drucken Sie die Nginx-Version, die Compiler-Version und konfigurieren Sie die Skript-Parameter:

sudo nginx -V
# nginx version: nginx/1.15.8 (Fedora)
# built by gcc 8.2.1 20150623 (Red Hat 8.2.1-6) (GCC)
# 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/lib64/nginx/modules
# . . .
# . . .

Nginx-Systemgruppe und Benutzer anlegen:

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --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

Erstellen Sie eine Nginx-System-Einheitendatei:

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

Kopieren/einfügen Sie den untenstehenden Inhalt in/etc/systemd/system/nginx.serviceDatei an:

HINWEIS: Der Speicherort der Datei undPIDder Nginx-Binärdatei kann je nach Kompilierung von Nginx unterschiedlich sein.

[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

Prüfen Sie, ob Nginx nach einem Neustart automatisch gestartet wird:

sudo systemctl is-enabled nginx.service
# enabled

Prüfen Sie, ob Nginx läuft, 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 eingerichtet ist und läuft.

Nginx-Begrüßungsseite

Nginx als Standard, erzeugt Sicherung.defaultDateien in/etc/nginx. entfernen..defaultDateien von/etc/nginx Verzeichnis:

sudo rm /etc/nginx/*.default

Platzieren Sie die Syntax-Hervorhebung 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: Indem Sie den obigen Schritt machen, erhalten Sie eine nette Syntax-Hervorhebung, wenn Sie Nginx-Konfigurationsdateien im Vim-Editor editieren.

Nginx Syntax-Hervorhebung in Vim

Erstellen Sieconf.d,snippets,sites-availableundsites-enabledVerzeichnisse in/etc/nginxVerzeichnis:

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Ändern von Berechtigungen und Gruppenbesitz von Nginx-Protokolldateien:

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Log-Rotationskonfiguration für Nginx erstellen.

sudo vim /etc/logrotate.d/nginx

Füllen Sie die Datei mit dem untenstehenden Text, dann speichern 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.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

Das ist alles. Jetzt haben Sie die neueste Version von Nginx installiert, indem Sie es aus dem Quellcode bauen. Sie ist statisch gegen einige wichtige Bibliotheken wie OpenSSL kompiliert. Häufig ist die vom System bereitgestellte Version von OpenSSL veraltet. Wenn Sie diese Methode der Installation mit einer neueren Version von OpenSSL verwenden, können Sie die Vorteile neuer Verschlüsselungen undCHACHA20_POLY1305Protokolle wie TLS 1.3 nutzen, die von OpenSSL 1.1.1 unterstützt werden. Außerdem können Sie durch die Kompilierung Ihrer eigenen Binärdatei.die Funktionalität Ihres Nginx anpassen, was viel flexibler ist als die Installation einer vorkompilierten Binärdatei.

Das könnte Dich auch interessieren …