GNU/Linux >> Linux Esercitazione >  >> Fedora

Come costruire Nginx dal sorgente su Fedora 29

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

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

Requisiti

  • Un server che esegue sistema Fedora 29.
  • Un utente non root con privilegi sudo.

Passaggi iniziali

Controlla la tua versione di Fedora:

cat /etc/fedora-release
# Fedora release 29 (Twenty Nine)

Imposta il fuso orario:

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

Aggiorna i pacchetti del tuo sistema operativo Fedora:

sudo dnf upgrade -y

Installa i pacchetti vim, curl, wget e tree:

sudo dnf 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 dnf 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.8.tar.gz && tar zxvf nginx-1.15.8.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 dnf 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, poiché non sono più necessari:

rm -rf *.tar.gz

Inserisci la directory di origine di Nginx:

cd ~/nginx-1.15.8

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

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=Fedora \
            --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/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/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.8 (Fedora)
# built by gcc 8.2.1 20150623 (Red Hat 8.2.1-6) (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
# 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:

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.8/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.8/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.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 la configurazione della rotazione del registro 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.8/ 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.


Fedora
  1. Come compilare lo strumento di compressione Brotli dal sorgente su Fedora 29

  2. Come aggiornare Fedora Linux all'ultima versione

  3. Come creare pacchetti dal sorgente utilizzando CheckInstall

  4. Come aggiornare Fedora 34 da Fedora 33 usando DNF

  5. Come installare l'editor nano dal codice sorgente

Come aggiornare a Fedora 26 da Fedora 25

Come creare pacchetti Debian dal sorgente

Come aggiornare da Fedora 32 a Fedora 33

Come aggiornare a Fedora 35 da Fedora 34

Come installare Nginx su Fedora 35

Come compilare il kernel Linux dal sorgente per creare un kernel personalizzato