GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak sestavit NGINX ze zdroje na Ubuntu 18.04 LTS

NGINX (vyslovujte "motor x" ) je software webového serveru s otevřeným zdrojovým kódem navržený s ohledem na vysokou souběžnost, který lze použít jako HTTP/HTTPS serverreverzní proxy servere-mailový proxy serversoftwarový nástroj pro vyrovnávání zatíženíTerminátor TLSserver pro ukládání do mezipaměti ...

Jedná se o extrémně modulární kus softwaru. Dokonce i některé zdánlivě „vestavěné“ části softwaru, jako je GZIP nebo SSL, jsou ve skutečnosti vytvořeny jako moduly, které lze během sestavování povolit a zakázat.

Má jádro (nativnímodulymoduly (externích) třetích stran vytvořené komunitou. V současné době existuje více než sto modulů třetích stran, které můžeme využít.

Napsáno v C jazyk, je to velmi rychlý a lehký software.

Instalace NGINX ze zdrojového kódu je relativně „snadná“ – stáhněte si nejnovější verzi zdrojového kódu NGINX, nakonfigurujte, sestavte a nainstalujte.

Budete se muset rozhodnout, zda chcete stáhnout hlavní řadu nebo stabilní verze, ale jejich sestavení je úplně stejné.

V tomto tutoriálu vytvoříme NGINX se všemi dostupnými moduly v open source verzi NGINX a budeme používat hlavní řadu  verze, která je na 1.15.0 v době psaní tohoto článku. Aktualizujte čísla verzí, jakmile budou k dispozici novější verze.

Stabilní vs. verze hlavní řady

NGINX Open Source je k dispozici ve dvou verzích:

  • Hlavní řada – Obsahuje nejnovější funkce a opravy chyb a je vždy aktuální. Je spolehlivý, ale může obsahovat některé experimentální moduly a také může obsahovat několik nových chyb.
  • Stabilní – Neobsahuje všechny nejnovější funkce, ale obsahuje kritické opravy chyb, které jsou vždy zpětně portovány do hlavní verze.

Základní moduly vs. moduly třetích stran

NGINX má dva typy modulů, které můžete použít: základní modulymoduly třetích stran .

Základní moduly jsou sestaveny hlavními vývojáři NGINX a jsou součástí samotného softwaru.

Moduly třetích stran jsou vytvářeny komunitou a můžete je použít k rozšíření funkčnosti NGINX. Existuje mnoho užitečných modulů třetích stran, nejznámější z nich jsou:PageSpeed, ModSecurity, RTMP, Lua atd...

Statické moduly vs. dynamické moduly

Statické moduly existují v NGINX od první verze. Dynamické moduly byly představeny s NGINX 1.9.11+ v únoru 2016.

U statických modulů je sada modulů, které tvoří binární soubor NGINX, fixována v době kompilace pomocí ./configure skript. Statické moduly používají --with-foo_bar_module nebo --add-module=PATH syntaxe.

Ke kompilaci základního (standardního) modulu jako dynamického přidáme =dynamic , například --with-http_image_filter_module=dynamic .

Ke kompilaci modulu třetí strany jako dynamického používáme --add-dynamic-module=/path/to/module syntaxi a poté je načteme pomocí load_module direktiva v globálním kontextu nginx.conf soubor.

Požadavky na sestavení NGINX ze zdroje

Ve srovnání s některým jiným softwarem UNIX/Linux je NGINX docela lehký a nemá mnoho závislostí na knihovnách. Výchozí konfigurace sestavení závisí na instalaci pouze 3 knihoven: OpenSSL /LibreSSL /BoringSSLZlibPCRE .

  • Povinné požadavky:
    • GNU Compiler Collection (GCC )
    • Verze knihovny OpenSSL mezi 1.0.2 – 1.1.1 nebo knihovna LibreSSL nebo knihovna BoringSSL
    • Verze knihovny Zlib mezi 1.1.3 – 1.2.11
    • Verze knihovny PCRE mezi 4.4 – 8.42
  • Volitelné požadavky:
    • Perl
    • LibGD
    • Knihovna MaxMind GeoIP Legacy C
    • libxml2
    • libxslt

POZNÁMKA :NGINX lze také zkompilovat proti LibreSSLBoringSSL kryptografických knihoven namísto OpenSSL .

Požadavky

  • Server se systémem Ubuntu 18.04 LTS.
  • Uživatel bez oprávnění root s právy sudo.

Počáteční kroky

Zkontrolujte verzi Ubuntu:

lsb_release -ds 
# Ubuntu 18.04 LTS

Nastavte časové pásmo:

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

Aktualizujte balíčky operačního systému:

aktualizace sudo apt && upgrade sudo apt -y

Sestavení NGINX ze zdroje

NGINX je program napsaný v C , takže nejprve budete muset nainstalovat nástroje kompilátoru. Nainstalujte build-essentialgittree balíčky:

sudo apt install -y build-essential git tree

Stáhněte si nejnovější hlavní verzi zdrojového kódu NGINX a rozbalte jej. Zdrojový kód NGINX je distribuován jako komprimovaný archiv (gzip tarball), stejně jako většina softwaru pro Unix a Linux:

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

Stáhněte si zdrojový kód povinných závislostí NGINX a rozbalte je:

# PCRE verze 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz &&tar xzvf pcre-8.42.tar.gz

# zlib verze 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz &&tar xzvf zlib-1.2.11.tar.gz

# OpenSSL verze 1.1.0h
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz &&tar xzvf openssl-1.1.0h.tar.gz

Nainstalujte volitelné závislosti NGINX:

sudo add-apt-repository -y ppa:maxmind/ppa
aktualizace sudo apt &&upgrade sudo apt -y
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

Vyčistěte všechny .tar.gz soubory. Už je nepotřebujeme:

rm -rf *.tar.gz

Zadejte zdrojový adresář NGINX:

cd ~/nginx-1.15.0

Pro dobrou míru uveďte adresáře a soubory, které tvoří zdrojový kód NGINX, pomocí tree nástroj:

strom -L 2 .

Zkopírujte manuálovou stránku NGINX do /usr/share/man/man8/ adresář:

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
# Zkontrolujte, zda funguje manuálová stránka pro NGINX:
man nginx

Pro nápovědu si můžete prohlédnout úplný seznam aktuálních možností kompilace NGINX spuštěním:

./configure --help
# Chcete-li vidět požadované základní moduly, lze sestavit jako dynamický běh:
./configure --help | grep -F =dynamický

Nakonfigurujte, zkompilujte a nainstalujte 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 \
\ <   >  - pol - modul -with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
       ip_  >            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
     ge -- ge_o_ip /  --with-http_sub_module \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_mp4_module \
_          --with-http_gzip_static_module \
            --with-http_auth_request_module \
            --with-http_random_index_module \
         >   --with- http_bré / module  – – http_bré_http_ module    – http_bré_http_ odkaz --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --            --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 \
       >  _ br --modulem --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

Po sestavení NGINX přejděte na domovskou stránku (~ ) adresář:

cd ~

Symbolický odkaz /usr/lib/nginx/modules na /etc/nginx/modules adresář. etc/nginx/modules je standardní místo pro moduly NGINX:

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

Vytiskněte verzi NGINX, verzi kompilátoru a nakonfigurujte parametry skriptu:

sudo nginx -V
# verze nginx:nginx/1.15.0 (Ubuntu)
# vytvořeno gcc 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
# vytvořeno pomocí OpenSSL 1.1.0h  27. března 2018
# Podpora TLS SNI povolena
# konfigurační argumenty:--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/ usr/lib/nginx/modules
# . . .
# . . .

Vytvořte systémovou skupinu a uživatele NGINX:

sudo adduser --system --home /neexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "uživatel nginx" --group nginx 

Zkontrolujte syntaxi NGINX a potenciální chyby:

sudo nginx -t
# Vyhodí tuto chybu -> nginx:[emerg] mkdir() "/var/cache/nginx/client_temp" se nezdařilo (2:Žádný takový soubor nebo adresář)

# Vytvořte adresáře mezipaměti NGINX a nastavte správná oprávnění
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/*

# Znovu zkontrolujte syntaxi a potenciální chyby.
sudo nginx -t

Vytvořte soubor systémové jednotky NGINX:

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

Zkopírujte/vložte níže uvedený obsah do /etc/systemd/system/nginx.service soubor:

[Unit]Description=nginx – vysoce výkonný webový serverDocumentation=https://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target [Služba]Typ=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ÍN $MAINPID[Install]WantedBy=multi-user.target

Povolte spuštění NGINX při spuštění a spusťte NGINX okamžitě:

sudo systemctl povolit nginx.service
sudo systemctl spustit nginx.service

Zkontrolujte, zda se NGINX automaticky spustí po restartu:

sudo systemctl je povoleno nginx.service
# povoleno

Zkontrolujte, zda běží NGINX spuštěním jednoho z následujících příkazů:

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

Můžete také otevřít prohlížeč a přejít na svou doménu/IP adresu a zobrazit výchozí stránku NGINX. To je indikátor, že NGINX je v provozu.

Vytvořte nekomplikovaný firewall (UFW ) Profil aplikace NGINX:

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

Zkopírujte/vložte níže uvedený obsah do /etc/ufw/applications.d/nginx soubor:

[Nginx HTTP]title=Webový server (Nginx, HTTP)description=Malý, ale velmi výkonný a výkonný webový serverports=80/tcp[Nginx HTTPS]title=Webový server (Nginx, HTTPS)description=Malý, ale velmi výkonný a efektivní webový serverports=443/tcp[Nginx Full]title=Webový server (Nginx, HTTP + HTTPS)description=Malý, ale velmi výkonný a efektivní webový serverports=80 443/tcp

Ověřte, že jsou vytvořeny a rozpoznány profily aplikací UFW:

seznam aplikací sudo ufw

# Dostupné aplikace:
 # Nginx Full
 # Nginx HTTP
 # Nginx HTTPS
 # OpenSSH

NGINX ve výchozím nastavení generuje zálohu .default soubory v /etc/nginx . Odstraňte .default soubory z /etc/nginx adresář:

sudo rm /etc/nginx/*.default

Umístěte zvýraznění syntaxe konfigurace NGINX pro editor Vim do ~/.vim :

# Pro běžné uživatelemkdir bez oprávnění root ~/.vim/cp -r ~/nginx-1.15.0/contrib/vim/* ~/.vim/# Pro uživatele s oprávněním root mkdir /root/.vim/sudo cp - r ~/nginx-1.15.0/contrib/vim/* /root/.vim/

POZNÁMKA :Provedením výše uvedeného kroku získáte pěkné zvýraznění syntaxe při úpravě konfiguračních souborů NGINX v editoru Vim.

Vytvořte conf.dsnippetssites-availablesites-enabled adresářů v /etc/nginx adresář:

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

Změna oprávnění a skupinového vlastnictví souborů protokolu NGINX:

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

Vytvořte konfiguraci logrotation pro NGINX.

sudo vim /etc/logrotate.d/nginx

Vyplňte soubor níže uvedeným textem, poté jej uložte a ukončete:

/var/log/nginx/*.log { denně chybíok otočit 52 komprimovat delaycompress notifempty vytvořit 640 sdílených skriptů nginx adm postrotate if [ -f /var/run/nginx.pid ]; pak zabij -USR1 `cat /var/run/nginx.pid` fi endscript}

Odstraňte všechny stažené soubory z domovského adresáře:

cd ~
rm -rf nginx-1.15.0/ openssl-1.1.0h/ pcre-8.42/ zlib-1.2.11/

A je to. Nyní máte nainstalovanou nejnovější verzi NGINX vytvořením ze zdrojového kódu. Je kompilován staticky proti některým důležitým knihovnám, jako je OpenSSL. Systémem dodávaná verze OpenSSL je často zastaralá. Při použití této metody instalace s novější verzí OpenSSL můžete využít nové šifry jako CHACHA20_POLY1305 a protokoly jako TLS 1.3 který bude dostupný v OpenSSL 1.1.1. Kompilací vlastního binárního souboru můžete také přizpůsobit, jaké funkce bude váš NGINX poskytovat, což je mnohem flexibilnější než instalace předem sestaveného binárního souboru.


Ubuntu
  1. Jak zkompilovat Brotli ze zdroje na Ubuntu 18.04 LTS

  2. Jak upgradovat z Ubuntu 20.04 na Ubuntu 22.04 LTS (průvodce krok za krokem)

  3. Jak upgradovat na Ubuntu 22.04 LTS z Ubuntu 20.04 LTS a 21.10

  1. Jak upgradovat na Ubuntu 18.10 z Ubuntu 18.04 LTS

  2. Jak nainstalovat Nginx s Brotli Compression na Ubuntu 18.04 LTS

  3. Jak upgradovat z Ubuntu 20.04/21.10 na 22.04 LTS

  1. Jak sestavit Nginx ze zdroje na Debianu 9

  2. Jak sestavit Nginx ze zdroje na CentOS 7

  3. Jak sestavit Nginx ze zdroje na Fedoře 29