GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come costruire NGINX dal sorgente su Ubuntu 18.04 LTS

NGINX (pronunciato "engine x" ) è un software per server web open source progettato pensando alla concorrenza, che può essere utilizzato come server HTTP/HTTPSserver proxy inversoserver proxy di postabilanciatore del carico softwareTerminale TLSserver 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 (nativomodulimoduli (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 installa.

Dovrai scegliere se scaricare la mainlinestabile 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.0 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 principalimoduli 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 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--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 noiosoZlibPCRE .

  • Requisiti obbligatori:
    • GNU Compiler Collection (GCC )
    • Versione della libreria OpenSSL tra 1.0.21.1.1 o libreria LibreSSL o libreria BoringSSL 
    • Versione della libreria Zlib tra 1.1.31.2.11
    • Versione della libreria PCRE tra 4.48.42
  • Requisiti facoltativi:
    • Perl
    • LibGD
    • Libreria C Legacy MaxMind GeoIP
    • libxml2
    • libxslt

NOTA :NGINX può anche essere compilato su LibreSSLNoiosoSSL librerie crittografiche invece di OpenSSL .

Requisiti

  • Un server che esegue Ubuntu 18.04 LTS.
  • Un utente non root con privilegi sudo.

Passaggi iniziali

Controlla la versione di Ubuntu:

lsb_release -ds 
# Ubuntu 18.04 LTS

Imposta il fuso orario:

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

Aggiorna i pacchetti del tuo sistema operativo:

sudo apt update && sudo apt upgrade -y

Crea NGINX dal sorgente

NGINX è un programma scritto in C , quindi dovrai prima installare uno strumento di compilazione. Installa build-essentialgittree pacchetti:

sudo apt install -y build-essential git tree

Scarica l'ultima versione principale del codice sorgente di NGINX ed estrailo. Il codice sorgente NGINX è distribuito come archivio compresso (tarball gzippato), come la maggior parte dei software Unix e Linux:

wget https://nginx.org/download/nginx-1.15.0.tar.gz && tar zxvf nginx-1.15.0.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.0h
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz && tar xzvf openssl-1.1.0h.tar.gz

Installa le dipendenze NGINX facoltative:

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

Pulisci tutti i .tar.gz File. Non ne abbiamo più bisogno:

rm -rf *.tar.gz

Inserisci la directory di origine NGINX:

cd ~/nginx-1.15.0

Per una buona misura elenca le directory e i file che compongono il codice sorgente 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.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
# 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/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 \
            --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.26.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.0h \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug


make
sudo make install

Dopo aver creato NGINX, vai alla home (~ ) directory:

cd ~

Collegamento simbolico /usr/lib/nginx/modules/etc/nginx/modules directory. etc/nginx/modules è un posto standard per i moduli NGINX:

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

Stampa la versione NGINX, la versione del compilatore e configura i parametri dello script:

sudo nginx -V
# nginx version: nginx/1.15.0 (Ubuntu)
# built by gcc 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
# built with OpenSSL 1.1.0h  27 Mar 2018
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules
# . . .
# . . .

Crea gruppo di sistema NGINX e utente:

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

Controlla la sintassi di NGINX e potenziali errori:

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

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:

[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

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

Crea firewall semplice (UFW ) Profilo dell'applicazione NGINX:

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

Copia/incolla i contenuti seguenti in /etc/ufw/applications.d/nginx file:

[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

Verifica che i profili dell'applicazione UFW siano creati e riconosciuti:

sudo ufw app list

# Available applications:
 # Nginx Full
 # Nginx HTTP
 # Nginx HTTPS
 # OpenSSH

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.0/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.0/contrib/vim/* /root/.vim/

NOTA :Facendo il passaggio precedente, otterrai una bella evidenziazione della sintassi durante la modifica dei file di configurazione NGINX nell'editor Vim.

Crea conf.dsnippetssites-availablesites-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.0/ openssl-1.1.0h/ 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 sarà disponibile in OpenSSL 1.1.1. Inoltre, compilando il tuo file binario, puoi personalizzare le funzionalità che il tuo NGINX fornirà, il che è molto più flessibile rispetto all'installazione di un binario pre-costruito.


Ubuntu
  1. Come eseguire l'aggiornamento a Ubuntu 18.10 da Ubuntu 18.04 LTS

  2. Come compilare Brotli dal sorgente su Ubuntu 18.04 LTS

  3. Come eseguire l'aggiornamento da Ubuntu 20.04 a Ubuntu 22.04 LTS (Guida passo passo)

  4. Come eseguire l'aggiornamento a Ubuntu 22.04 LTS da Ubuntu 20.04 LTS e 21.10

  5. Come aggiornare da Ubuntu 20.04/21.10 a 22.04 LTS

Come installare la versione principale di Nginx su Ubuntu 16.04 LTS

Come installare Nginx Amplify Agent su Ubuntu 16.04 LTS

Come installare Nginx su Ubuntu 18.04 LTS

Come installare LEMP su Ubuntu 18.04 LTS

Come installare LEMP su Ubuntu 20.04 LTS

Come installare phpMyAdmin con Nginx su Ubuntu 20.04 LTS