GNU/Linux >> Znalost Linux >  >> Debian

Jak sestavit Nginx ze zdroje na Debianu 9

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.8 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, opravena 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 Debian 9 (stretch).
  • Uživatel bez oprávnění root s právy sudo.

Počáteční kroky

Zkontrolujte verzi Debianu:

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

Nainstalujte wgetcurlsudo balíčky.

apt install -y wget curl sudo

Nastavte časové pásmo:

sudo dpkg-reconfigure tzdata

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

apt update && apt upgrade -y

Sestavení Nginx ze zdroje

Nginx je program napsaný v C , takže nejprve budete muset nainstalovat nástroje kompilátoru. Nainstalujte build-essential balíček a další požadované balíčky:

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

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 (gzipped tarball), stejně jako většina softwaru pro Unix a Linux:

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

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

# 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

Nainstalujte volitelné závislosti Nginx:

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

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

tree -L 2 .

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

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

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

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

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=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

Po vytvoření 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
# 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
# . . .
# . . .

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

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx

Zkontrolujte syntaxi Nginx a potenciální chyby:

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

Vytvořte soubor Nginx systemd unit:

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

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

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

Zkontrolujte, zda se Nginx automaticky spustí po restartu:

sudo systemctl is-enabled nginx.service
# enabled

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

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

Můžete také otevřít prohlížeč a přejít na svou doménu/IP adresu, abyste viděli výchozí stránku Nginx. To je indikátor toho, ž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=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

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

sudo ufw app list

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

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 :

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

POZNÁMKA :Provedením výše uvedeného kroku získáte pěkné zvýraznění syntaxe při úpravách 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 {
    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
}

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

cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ 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ý je dostupný v OpenSSL 1.1.1. Kompilací vlastního binárního souboru můžete také přizpůsobit, jakou funkcionalitu bude váš Nginx poskytovat, což je mnohem flexibilnější než instalace předem sestaveného binárního souboru.


Debian
  1. Jak sestavit balíčky ze zdroje pomocí CheckInstall

  2. Jak zkompilovat ze zdroje a nainstalovat Nginx do Debian 7 (Wheezy) VPS

  3. Jak nainstalovat Microweber na Debian 9

  1. Jak kompilovat Brotli Compression Tool ze zdroje na Debianu 9

  2. Jak upgradovat z Debianu 10 na Debian 11

  3. Jak vytvořit nginx pomocí modulu Google PageSpeed ​​na Debianu 8 (Jessie)

  1. Jak znovu zkompilovat webový server nginx na Debian Linuxu

  2. Jak nainstalovat Nginx na Debian 9

  3. Jak upgradovat na Debian 11 z Debianu 10