GNU/Linux >> Znalost Linux >  >> Cent OS

Jak sestavit Nginx ze zdroje na CentOS 7

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.7 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 CentOS 7.
  • Uživatel bez oprávnění root s právy sudo.

Počáteční kroky

Zkontrolujte verzi CentOS:

cat /etc/centos-release
# CentOS Linux release 7.6.1810 (Core)

Nastavte časové pásmo:

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

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

sudo yum update -y

Nainstalujte balíčky vim, curl, wget a tree:

sudo yum install -y vim curl wget tree

Sestavení Nginx ze zdroje

Nginx je program napsaný v C , takže nejprve budete muset nainstalovat nástroje kompilátoru:

sudo yum groupinstall -y 'Development Tools'

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.7.tar.gz && tar zxvf nginx-1.15.7.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 yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

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

rm -rf *.tar.gz

Zadejte zdrojový adresář Nginx:

cd ~/nginx-1.15.7

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.7/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 prohlédnout ú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/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=CentOS \
            --builddir=nginx-1.15.7 \
            --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

Po vytvoření Nginx přejděte na domovskou stránku (~ ) adresář:

cd ~

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

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

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

sudo nginx -V
# nginx version: nginx/1.15.7 (CentOS)
# built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (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
# . . .
# . . .

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

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

Zkontrolujte syntaxi Nginx a potenciální chyby:

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:

POZNÁMKA : Umístění PID soubor a binární soubor Nginx se mohou lišit v závislosti na tom, jak byl Nginx zkompilován.

[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 je spuštěn 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.

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.7/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.7/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.7/ 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 podporováno 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.


Cent OS
  1. Jak zkompilovat Brotli ze zdroje na CentOS 7

  2. Jak sestavit balíčky ze zdroje pomocí CheckInstall

  3. Jak zkompilovat a nainstalovat FFmpeg ze zdroje v CentOS/RHEL?

  1. Jak migrovat z CentOS na AlmaLinux

  2. Jak upgradovat CentOS 6.10 z CentOS 6.9-6.0

  3. Jak upgradovat CentOS 7.8 z CentOS 7.7-7.0

  1. Jak nainstalovat Nginx na CentOS 7

  2. Jak nainstalovat Nginx na CentOS 8

  3. Jak nainstalovat Go na CentOS 8