Hoe Nginx vanuit de bron op Debian 10 te compileren

Invoering

Nginx is een open-source webserversoftware die is ontworpen met het oog op hoge gelijktijdigheid en die kan worden gebruikt als een HTTP / HTTPS-server, reverse proxy-server, mail proxy-server, software load balancer, TLS-terminator, caching-server en meer!

Het is een enorm modulair stuk software. Zelfs enkele van de schijnbaar "ingebouwde" delen van de software, zoals GZIP of SSL, worden in feite gemaakt als modules die tijdens de bouwtijd kunnen worden in- en uitgeschakeld.

Het heeft kernmodules (native) en modules van derden (externe modules) die door de community zijn gemaakt. Op dit moment zijn er meer dan honderd modules van derden die we kunnen gebruiken.

Geschreven in C, het is een snel en lichtgewicht stuk software.

Nginx installeren vanuit broncode is relatief eenvoudig - download de nieuwste versie van Nginx broncode, configureer, bouw en installeer deze.

Je moet kiezen of je de hoofdlijn of een stabiele versie wilt downloaden, maar ze bouwen is hetzelfde.

In deze gids zullen we een hoofdlijnversie van Nginx op Debian 10 (buster) samenstellen. We zullen alle beschikbare modules gebruiken in de open-source versie van Nginx.

Waarom Nginx vanaf de bron compileren en installeren

U vraagt ​​waarschijnlijk waarom u Nginx vanuit een bron zou compileren als u voorbereide pakketten kunt gebruiken. Hier zijn enkele redenen waarom u misschien specifieke software zelf wilt compileren:

  • Configuratie-opties beheren.
  • Om de software te installeren waar je maar wilt. U kunt zelfs verschillende versies van dezelfde software installeren.
  • Om de versie te beheren die u installeert. Distributies blijven niet altijd up-to-date met de nieuwste versies van alle pakketten, vooral add-ons voor softwarepakketten.
  • Om beter te begrijpen hoe de software werkt.

Stabiele vs. hoofdlijnversie

Nginx Open Source is beschikbaar in twee versies:

  • Mainline - Bevat de nieuwste functies en bugfixes en is altijd up-to-date. Het is betrouwbaar, maar het kan enkele experimentele modules bevatten en het kan ook een aantal nieuwe bugs bevatten.
  • Stabiel - Bevat niet alle nieuwste functies, maar bevat essentiële bugfixes die altijd worden teruggestuurd naar de hoofdversie.

Kernmodules versus modules van derden

Nginx heeft twee soorten modules die u kunt gebruiken: kernmodules en modules van derden.

De belangrijkste Nginx-ontwikkelaars bouwen kernmodules en maken deel uit van de software zelf.

De community bouwt modules van derden en u kunt deze gebruiken om de functionaliteit uit te breiden. Er zijn veel nuttige modules van derden.

Statische modules versus dynamische modules

Statische modules bestaan ​​in Nginx vanaf de allereerste versie. Dynamische modules zijn in februari 2016 geïntroduceerd met Nginx 1.9.11+.

Met statische modules wordt een set modules die een Nginx-binair bestand vormen tijdens het compileren door het ./configurescript gefixeerd . Statische modules gebruiken --with-foo_bar_moduleof --add-module=PATHsyntaxis.

Om een ​​core (standaard) module als dynamisch te compileren voegen we =dynamicbijvoorbeeld toe --with-http_image_filter_module=dynamic.

Om een ​​module van derden als dynamisch te compileren, gebruiken we --add-dynamic-module=/path/to/modulesyntaxis en laden we ze door de load_modulerichtlijn te gebruiken in de globale context van het nginx.confbestand.

Vereisten voor het bouwen van Nginx vanaf de bron

In vergelijking met sommige andere UNIX / Linux-software is Nginx vrij licht van gewicht en heeft het niet veel bibliotheekafhankelijkheden. De standaard buildconfiguratie is afhankelijk van slechts 3 te installeren bibliotheken: OpenSSL / LibreSSL / BoringSSL, Zlib en PCRE.

OPMERKING : Nginx kan ook worden samengesteld tegen LibreSSL- en BoringSSL-cryptobibliotheken in plaats van OpenSSL.

Voordat je begint

Controleer de Debian-versie.

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Creëer een gewone gebruiker met sudotoegang.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

OPMERKING : vervang johndoedoor uw gebruikersnaam .

Schakel over naar een nieuwe gebruiker.

su - johndoe

Stel de tijdzone in.

sudo dpkg-reconfigure tzdata

Update de software van uw besturingssysteem.

sudo apt update && sudo apt upgrade -y

Installeer de benodigde pakketten.

sudo apt install -y software-properties-common ufw

Bouw Nginx vanaf de bron

Nginx is een programma geschreven in C, dus je moet eerst een compileertool installeren. Installeren build-essential, giten tree.

sudo apt install -y build-essential git tree

Download de nieuwste hoofdversie van de Nginx-broncode en pak het broncode-archief uit. Nginx-broncode wordt gedistribueerd als een gecomprimeerd archief, zoals de meeste Unix- en Linux-software.

wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz

Download de verplichte broncode van de Nginx-afhankelijkheden en pak deze uit.

# 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

Installeer optionele Nginx-afhankelijkheden.

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

Ruim alle .tar.gzbestanden op. We hebben ze niet meer nodig.

rm -rf *.tar.gz

Voer de Nginx-bronmap in.

cd ~/nginx-1.17.2

Maak voor een goede meting een lijst van mappen en bestanden waaruit Nginx-broncode bestaat tree.

tree -L 2 .

Kopieer de man-pagina naar /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

Voor hulp kunt u een volledige lijst met up-to-date Nginx-compileeropties bekijken door het volgende uit te voeren.

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

Configureer, compileer en installeer 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

Navigeer na de compilatie naar uw home ( ~) directory.

cd ~

Symlink /usr/lib/nginx/modulesnaar /etc/nginx/modules. Dit is een standaardplaats voor Nginx-modules.

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

Druk de Nginx-versie en compilerversie af en configureer scriptparameters.

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

Maak een Nginx-systeemgroep en gebruiker.

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

Controleer de syntaxis van Nginx en mogelijke fouten.

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

Maak een Nginx systemd unit-bestand.

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

Vul het /etc/systemd/system/nginx.servicebestand met de volgende inhoud.

[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

Schakel Nginx in om te starten bij het opstarten en start Nginx onmiddellijk.

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Controleer of Nginx automatisch start na een herstart.

sudo systemctl is-enabled nginx.service
# enabled

Controleer de status.

sudo systemctl status nginx.service

OPMERKING : U kunt controleren of Nginx actief is door in een webbrowser naar het domein of IP-adres van uw site te gaan. U ziet de welkomstpagina van Nginx. Dat is een indicatie dat Nginx actief is op je VPS.

Maak een UFW Nginx-toepassingsprofiel.

sudo vim /etc/ufw/applications.d/nginx

Kopieer en plak de volgende inhoud in het /etc/ufw/applications.d/nginxbestand.

[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

Controleer of UFW-toepassingsprofielen zijn gemaakt en herkend.

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

Nginx genereert standaard back- .defaultupbestanden in /etc/nginx. Verwijder .defaultbestanden uit de /etc/nginxdirectory.

sudo rm /etc/nginx/*.default

Plaats syntaxisaccentuering van Nginx-configuratie voor 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/

OPMERKING : door de bovenstaande stap uit te voeren, krijgt u een mooie syntaxisaccentuering bij het bewerken van Nginx-configuratiebestanden in de Vim-editor.

Maak conf.d, snippets, sites-availableen sites-enabledmappen /etc/nginx.

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

Wijzig de rechten en groepseigendom van Nginx-logbestanden.

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

Maak een log rotatieconfiguratie voor Nginx.

sudo vim /etc/logrotate.d/nginx

Vul het bestand in met de volgende tekst, sla op en sluit af.

/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
}

Verwijder alle gedownloade bestanden uit de homedirectory.

cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

Samenvatting

Dat is het. Nu heb je de nieuwste versie van Nginx geïnstalleerd. Het is statisch samengesteld tegen enkele belangrijke bibliotheken zoals OpenSSL. Vaak is de door het systeem geleverde versie van OpenSSL verouderd. Door deze installatiemethode te gebruiken met een nieuwere versie van OpenSSL, kunt u profiteren van moderne coderingen zoals CHACHA20_POLY1305en protocollen zoals TLS 1.3 die beschikbaar zijn in OpenSSL 1.1.1. Bovendien kunt u door uw eigen binaire bestand samen te stellen, aanpassen welke functionaliteit uw Nginx zal bieden, wat veel flexibeler is dan het installeren van een vooraf gebouwd binair bestand.



Leave a Comment

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.