Nginx (pronunciato "engine x" ) è un software per server web open source progettato pensando alla concorrenza, che può essere utilizzato come server HTTP/HTTPS , server proxy inverso , server proxy di posta , bilanciatore del carico software , Terminale TLS , server di memorizzazione nella cache ...
È un software estremamente modulare. Anche alcuni dei componenti software apparentemente "integrati", come GZIP o SSL, sono in realtà costruiti come moduli che possono essere abilitati e disabilitati durante il tempo di compilazione.
Ha core (nativo ) moduli e moduli (esterni) di terze parti creato dalla comunità. Al momento, ci sono oltre cento moduli di terze parti che possiamo utilizzare.
Scritto in C lingua, è un software molto veloce e leggero.
L'installazione di Nginx dal codice sorgente è relativamente "facile":scarica l'ultima versione del codice sorgente di Nginx, configura, compila e installala.
Dovrai scegliere se scaricare la mainline o stabile versione, ma costruirli è esattamente lo stesso.
In questo tutorial creeremo Nginx con tutti i moduli disponibili nella versione open source di Nginx e utilizzeremo mainline versione che è a 1.15.7 nel momento in cui scrivo. Aggiorna i numeri di versione quando diventano disponibili versioni più recenti.
Versione stabile e versione mainline
Nginx Open Source è disponibile in due versioni:
- Linea principale – Include le ultime funzionalità e correzioni di bug ed è sempre aggiornato. È affidabile, ma potrebbe includere alcuni moduli sperimentali e potrebbe anche avere un certo numero di nuovi bug.
- Stabile – Non include tutte le funzionalità più recenti, ma include correzioni di bug critici che vengono sempre riportate alla versione principale.
Moduli principali e moduli di terze parti
Nginx ha due tipi di moduli che puoi utilizzare: moduli principali e moduli di terze parti .
I moduli principali sono creati dagli sviluppatori principali di Nginx e fanno parte del software stesso.
I moduli di terze parti sono creati dalla community e puoi usarli per estendere la funzionalità di Nginx. Ci sono molti utili moduli di terze parti, i più famosi tra questi sono:PageSpeed, ModSecurity, RTMP, Lua ecc...
Moduli statici vs. moduli dinamici
I moduli statici esistono in Nginx sin dalla prima versione. I moduli dinamici sono stati introdotti con Nginx 1.9.11+ a febbraio 2016.
Con i moduli statici, l'insieme di moduli che costituiscono un binario Nginx viene corretto in fase di compilazione da ./configure
sceneggiatura. I moduli statici utilizzano --with-foo_bar_module
o --add-module=PATH
sintassi.
Per compilare il modulo principale (standard) come dinamico aggiungiamo =dynamic
, ad esempio --with-http_image_filter_module=dynamic
.
Per compilare il modulo di terze parti come dinamico utilizziamo --add-dynamic-module=/path/to/module
sintassi e poi li carichiamo utilizzando load_module
direttiva nel contesto globale di nginx.conf
file.
Requisiti per la creazione di Nginx dal sorgente
Rispetto ad altri software UNIX/Linux, Nginx è piuttosto leggero e non ha molte dipendenze dalla libreria. La configurazione della build predefinita dipende solo da 3 librerie da installare: OpenSSL /LibreSSL /SSL noioso , Zlib e PCRE .
- Requisiti obbligatori:
- GNU Compiler Collection (GCC )
- Versione della libreria OpenSSL tra 1.0.2 - 1.1.1 o libreria LibreSSL o libreria BoringSSL
- Versione della libreria Zlib tra 1.1.3 - 1.2.11
- Versione della libreria PCRE tra 4.4 - 8.42
- Requisiti facoltativi:
- Perl
- LibGD
- Libreria C Legacy MaxMind GeoIP
- libxml2
- libxslt
NOTA :Nginx può anche essere compilato su LibreSSL e NoiosoSSL librerie crittografiche invece di OpenSSL .
Requisiti
- Un server che esegue il sistema CentOS 7.
- Un utente non root con privilegi sudo.
Passaggi iniziali
Controlla la versione di CentOS:
cat /etc/centos-release
# CentOS Linux release 7.6.1810 (Core)
Imposta il fuso orario:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Aggiorna i pacchetti del tuo sistema operativo CentOS:
sudo yum update -y
Installa i pacchetti vim, curl, wget e tree:
sudo yum install -y vim curl wget tree
Crea Nginx dal sorgente
Nginx è un programma scritto in C , quindi dovrai prima installare uno strumento di compilazione:
sudo yum groupinstall -y 'Development Tools'
Scarica l'ultima versione principale del codice sorgente di Nginx ed estrailo. Il codice sorgente di Nginx è distribuito come archivio compresso (tarball gzippato), come la maggior parte dei software Unix e Linux:
wget https://nginx.org/download/nginx-1.15.7.tar.gz && tar zxvf nginx-1.15.7.tar.gz
Scarica il codice sorgente delle dipendenze Nginx obbligatorie ed estraile:
# 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
Installa le dipendenze Nginx facoltative:
sudo yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel
Pulisci tutti i .tar.gz
File. Non ne abbiamo più bisogno:
rm -rf *.tar.gz
Inserisci la directory di origine di Nginx:
cd ~/nginx-1.15.7
Per una buona misura elenca le directory e i file che compongono il codice sorgente di Nginx con tree
utilità:
tree -L 2 .
Copia la pagina di manuale di Nginx in /usr/share/man/man8/
elenco:
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
Per assistenza, puoi vedere l'elenco completo delle opzioni di compilazione Nginx aggiornate eseguendo:
./configure --help
# To see want core modules can be build as dynamic run:
./configure --help | grep -F =dynamic
Configura, compila e installa 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
Dopo aver creato Nginx, vai alla home (~
) directory:
cd ~
Collegamento simbolico /usr/lib64/nginx/modules
a /etc/nginx/modules
directory. etc/nginx/modules
è un posto standard per i moduli Nginx:
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Stampa la versione di Nginx, la versione del compilatore e configura i parametri dello script:
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
# . . .
# . . .
Crea gruppo di sistema Nginx e utente:
sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx
Controlla la sintassi di Nginx e potenziali errori:
sudo nginx -t
Crea file di unità di sistema Nginx:
sudo vim /etc/systemd/system/nginx.service
Copia/incolla i seguenti contenuti in /etc/systemd/system/nginx.service
file:
NOTA : La posizione del PID
e il file binario di Nginx potrebbero essere diversi a seconda di come è stato compilato Nginx.
[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
Abilita Nginx per l'avvio all'avvio e avvia Nginx immediatamente:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Controlla se Nginx si avvierà automaticamente dopo un riavvio:
sudo systemctl is-enabled nginx.service
# enabled
Verifica se Nginx è in esecuzione eseguendo uno dei seguenti comandi:
sudo systemctl status nginx.service
# or
ps aux | grep nginx
# or
curl -I 127.0.0.1
Puoi anche aprire il browser e accedere al tuo dominio/indirizzo IP per visualizzare la pagina Nginx predefinita. Questo è un indicatore del fatto che Nginx è attivo e funzionante.
Nginx per impostazione predefinita, genera il backup .default
file in /etc/nginx
. Rimuovi .default
file da /etc/nginx
directory:
sudo rm /etc/nginx/*.default
Posiziona l'evidenziazione della sintassi della configurazione di Nginx per l'editor Vim in ~/.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/
NOTA :Facendo il passaggio precedente, otterrai una bella evidenziazione della sintassi durante la modifica dei file di configurazione di Nginx nell'editor Vim.
Crea conf.d
, snippets
, sites-available
e sites-enabled
directory in /etc/nginx
directory:
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Modifica le autorizzazioni e la proprietà del gruppo dei file di registro Nginx:
sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Crea configurazione logrotation per Nginx.
sudo vim /etc/logrotate.d/nginx
Compila il file con il testo seguente, quindi salva ed esci:
/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
}
Rimuovi tutti i file scaricati dalla home directory:
cd ~
rm -rf nginx-1.15.7/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/
Questo è tutto. Ora hai installato l'ultima versione di Nginx compilandola dal codice sorgente. Viene compilato in modo statico rispetto ad alcune importanti librerie come OpenSSL. Spesso, la versione di OpenSSL fornita dal sistema è obsoleta. Utilizzando questo metodo di installazione con una versione più recente di OpenSSL, puoi sfruttare nuovi codici come CHACHA20_POLY1305
e protocolli come TLS 1.3 che è supportato in OpenSSL 1.1.1.
Inoltre, compilando il tuo file binario, sei in grado di personalizzare le funzionalità che il tuo Nginx fornirà, il che è molto più flessibile rispetto all'installazione di un binario pre-costruito.