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 server , reverzní proxy server , e-mailový proxy server , softwarový nástroj pro vyrovnávání zatížení , Terminátor TLS , server 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í ) moduly a moduly (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í moduly a moduly 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 /BoringSSL , Zlib a PCRE .
- 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 LibreSSL a BoringSSL 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.d
, snippets
, sites-available
a sites-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.