Come compilare Nginx dai sorgenti su Debian 10

introduzione

Nginx è un software server web open source progettato con alta concorrenza in mente, che può essere utilizzato come server HTTP / HTTPS, server proxy inverso, server proxy di posta, bilanciamento del carico software, terminatore TLS, server di cache e altro ancora!

È un software estremamente modulare. Anche alcune delle parti apparentemente "integrate" del software, come GZIP o SSL, sono in realtà create come moduli che possono essere abilitati e disabilitati durante il tempo di compilazione.

Ha moduli core (nativi) e moduli di terze parti (esterni) creati dalla community. Al momento, ci sono oltre un centinaio di moduli di terze parti che possiamo utilizzare.

Scritto in C, è un software veloce e leggero.

L'installazione di Nginx dal codice sorgente è relativamente semplice: scarica l'ultima versione del codice sorgente Nginx, configuralo, crearlo e installarlo.

Dovrai scegliere se scaricare la linea principale o una versione stabile, ma costruirle è la stessa.

In questa guida, compileremo una versione mainline di Nginx su Debian 10 (buster). Useremo tutti i moduli disponibili nella versione open source di Nginx.

Perché compilare e installare Nginx dal sorgente

Probabilmente ti chiedi perché si dovrebbe compilare Nginx da una fonte quando è possibile usare pacchetti preparati. Ecco alcuni motivi per cui potresti voler compilare tu stesso un software specifico:

  • Per controllare le opzioni di configurazione.
  • Per installare il software ovunque tu voglia. Puoi persino installare diverse versioni dello stesso software.
  • Per controllare la versione che si installa. Le distribuzioni non sono sempre aggiornate con le ultime versioni di tutti i pacchetti, in particolare i componenti aggiuntivi dei pacchetti software.
  • Per capire meglio come funziona il software.

Versione stabile vs. mainline

Nginx Open Source è disponibile in due versioni:

  • Mainline - Include le ultime funzionalità e correzioni di bug ed è sempre aggiornato. È affidabile, ma può includere alcuni moduli sperimentali e può anche avere un numero di nuovi bug.
  • Stabile: non include tutte le funzionalità più recenti, ma presenta correzioni di bug critiche che vengono sempre riportate nella versione principale.

Moduli core vs moduli di terze parti

Nginx ha due tipi di moduli che è possibile utilizzare: moduli core e moduli di terze parti.

Gli sviluppatori principali di Nginx costruiscono moduli core e fanno parte del software stesso.

La community crea moduli di terze parti e puoi utilizzarli per estendere le funzionalità. Ci sono molti utili moduli di terze parti.

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, un set di moduli che costituisce un binario Nginx viene corretto in fase di compilazione dallo ./configurescript. Uso --with-foo_bar_moduleo --add-module=PATHsintassi dei moduli statici .

Per compilare un modulo core (standard) come dinamico aggiungiamo =dynamic, ad esempio --with-http_image_filter_module=dynamic.

Per compilare un modulo di terze parti come dinamico, utilizziamo la --add-dynamic-module=/path/to/modulesintassi e quindi li cariciamo utilizzando la load_moduledirettiva nel contesto globale del nginx.conffile.

Requisiti per la costruzione di Nginx dalla fonte

Rispetto ad altri software UNIX / Linux, Nginx è piuttosto leggero e non ha molte dipendenze da libreria. La configurazione di build predefinita dipende solo da 3 librerie da installare: OpenSSL / LibreSSL / BoringSSL, Zlib e PCRE.

NOTA : Nginx può anche essere compilato su librerie crittografiche LibreSSL e BoringSSL anziché OpenSSL.

Prima di iniziare

Controlla la versione di Debian.

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Crea un utente normale con sudoaccesso.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

NOTA : sostituisci johndoecon il tuo nome utente .

Passa a un nuovo utente.

su - johndoe

Imposta il fuso orario.

sudo dpkg-reconfigure tzdata

Aggiorna il software del tuo sistema operativo.

sudo apt update && sudo apt upgrade -y

Installa i pacchetti necessari.

sudo apt install -y software-properties-common ufw

Crea Nginx dalla fonte

Nginx è un programma scritto in C, quindi dovrai prima installare uno strumento di compilazione. Installare build-essential, gite tree.

sudo apt install -y build-essential git tree

Scarica l'ultima versione mainline del codice sorgente Nginx e decomprime l'archivio del codice sorgente. Il codice sorgente di Nginx è distribuito come archivio compresso, come la maggior parte dei software Unix e Linux.

wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz

Scarica il codice sorgente delle dipendenze Nginx obbligatorio ed estrailo.

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.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.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz

Installa dipendenze Nginx opzionali.

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.gzfile. Non ne abbiamo più bisogno.

rm -rf *.tar.gz

Immettere la directory di origine Nginx.

cd ~/nginx-1.17.2

Per una buona misura elenca directory e file che compongono il codice sorgente di Nginx tree.

tree -L 2 .

Copia la pagina del manuale in /usr/share/man/man8/.

sudo cp ~/nginx-1.17.2/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, è possibile visualizzare un elenco completo di opzioni di compilazione Nginx aggiornate eseguendo quanto segue.

./configure --help
# To see want core modules can be built 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=Debian \
            --builddir=nginx-1.17.2 \
            --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.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

Dopo la compilazione, vai alla tua home ( ~) directory.

cd ~

Collegamento simbolico /usr/lib/nginx/modulesa /etc/nginx/modules. Questo è un posto standard per i moduli Nginx.

sudo ln -s /usr/lib/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.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . .
# . . .
# . . .

Crea un gruppo di sistema e un utente Nginx.

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

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

Creare un file di unità systemd Nginx.

sudo vim /etc/systemd/system/nginx.service

Popolare il /etc/systemd/system/nginx.servicefile con il seguente contenuto.

[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

Controlla lo stato.

sudo systemctl status nginx.service

NOTA : è possibile verificare che Nginx sia in esecuzione accedendo al dominio o all'indirizzo IP del proprio sito in un browser Web. Vedrai la pagina di benvenuto di Nginx. Questo è un indicatore che Nginx è attivo e in esecuzione sul tuo VPS.

Crea un profilo di applicazione Nginx UFW.

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

Copia / incolla il seguente contenuto nel /etc/ufw/applications.d/nginxfile.

[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

Convalida che i profili dell'applicazione UFW vengano creati e riconosciuti.

sudo ufw app list

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

Nginx, per impostazione predefinita, genera .defaultfile di backup in /etc/nginx. Rimuovi i .defaultfile dalla /etc/nginxdirectory.

sudo rm /etc/nginx/*.default

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

NOTA : eseguendo il passaggio precedente, si otterrà una bella evidenziazione della sintassi durante la modifica dei file di configurazione di Nginx nell'editor Vim.

Creare conf.d, snippets, sites-availablee sites-enabledle directory in /etc/nginx.

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Modifica le autorizzazioni e la proprietà del gruppo dei file di registro di Nginx.

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Creare una configurazione di rotazione del registro per Nginx.

sudo vim /etc/logrotate.d/nginx

Popolare 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.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

Sommario

Questo è tutto. Ora hai installato l'ultima versione di Nginx. Viene compilato staticamente su alcune importanti librerie come OpenSSL. Spesso, la versione di OpenSSL fornita dal sistema è obsoleta. Usando questo metodo di installazione con una versione più recente di OpenSSL, puoi trarre vantaggio dai moderni cifrari come CHACHA20_POLY1305e dai protocolli come TLS 1.3 che sono disponibili in OpenSSL 1.1.1. Inoltre, compilando il tuo binario, sei in grado di personalizzare la funzionalità che Nginx fornirà, che è molto più flessibile dell'installazione di un binario pre-costruito.



Leave a Comment

Installa la condivisione NFS su Debian

Installa la condivisione NFS su Debian

NFS è un file system basato su rete che consente ai computer di accedere ai file attraverso una rete di computer. Questa guida spiega come esporre le cartelle su NF

Come installare Couch CMS 2.0 su un VPS Debian 9 LAMP

Come installare Couch CMS 2.0 su un VPS Debian 9 LAMP

Usi un sistema diverso? Couch CMS è un sistema di gestione dei contenuti (CMS) semplice e flessibile, gratuito e open source che consente ai web designer di progettare

Come installare Golang 1.8.3 su CentOS 7, Ubuntu 16.04 e Debian 9

Come installare Golang 1.8.3 su CentOS 7, Ubuntu 16.04 e Debian 9

Golang è un linguaggio di programmazione sviluppato da Google. Grazie alla sua versatilità, semplicità e affidabilità, Golang è diventato uno dei più popolari

Come installare Quassel su Debian 9

Come installare Quassel su Debian 9

IRC è popolare tra gli sviluppatori e gli utenti di software open source. Uno degli svantaggi di IRC è quando non sei in linea, potresti perdere Importan

Come usare Sudo su Debian, CentOS e FreeBSD

Come usare Sudo su Debian, CentOS e FreeBSD

Luso di un utente sudo per accedere a un server ed eseguire comandi a livello di root è una pratica molto comune tra Linux e Unix Systems Administrator. Luso di un sud

Configurare un Chroot su Debian

Configurare un Chroot su Debian

Questo articolo ti insegnerà come impostare una prigione chroot su Debian. Presumo che tu stia usando Debian 7.x. Se usi Debian 6 o 8, questo potrebbe funzionare, bu

Come installare PiVPN su Debian

Come installare PiVPN su Debian

Introduzione Un modo semplice per configurare un server VPN su Debian è con PiVPN. PiVPN è un programma di installazione e wrapper per OpenVPN. Crea semplici comandi per te t

Come costruire Brotli dalla fonte su Debian 9

Come costruire Brotli dalla fonte su Debian 9

Usi un sistema diverso? Brotli è un nuovo metodo di compressione con un rapporto di compressione migliore di Gzip. Il suo codice sorgente è ospitato pubblicamente su Github. Thi

Come installare Kanboard su Debian 9

Come installare Kanboard su Debian 9

Usi un sistema diverso? Introduzione Kanboard è un programma software di gestione dei progetti gratuito e open source progettato per facilitare e visualizzare

Come installare Neos CMS su Debian 9

Come installare Neos CMS su Debian 9

Usi un sistema diverso? Neos è una piattaforma di applicazioni di contenuto con un CMS e un framework applicativo al suo interno. Questa guida ti mostrerà come installare

Installa cactus su Debian Jessie

Installa cactus su Debian Jessie

Introduzione Cacti è uno strumento open source di monitoraggio e rappresentazione grafica interamente basato sui dati RRD. Attraverso Cacti puoi monitorare quasi ogni tipo di devic

Come installare Java 8 e DCEVM su Debian 8 (Jessie)

Come installare Java 8 e DCEVM su Debian 8 (Jessie)

Java è un linguaggio di programmazione / macchina virtuale indipendente dalla piattaforma. In questo tutorial, installeremo limplementazione OpenJDK di Java 8 su un Debian

Server HTTP Git con Nginx su Debian 8

Server HTTP Git con Nginx su Debian 8

Git è un sistema di controllo della versione (VCS) che consente il rilevamento delle modifiche al codice. In questo tutorial, vedremo come installare un server HTTP (S) Git, un

Come installare MyCLI su Linux (CentOS, Debian, Fedora e Ubuntu)

Come installare MyCLI su Linux (CentOS, Debian, Fedora e Ubuntu)

Introduzione MyCLI è un client da riga di comando per MySQL e MariaDB che ti consente di completare automaticamente e ti aiuta con la sintassi dei tuoi comandi SQL. MyCL

Usare le viste MySQL su Debian 7

Usare le viste MySQL su Debian 7

Introduzione MySQL ha una grande funzionalità nota come viste. Le viste sono query memorizzate. Pensa a loro come alias per una query altrimenti lunga. In questa guida,

Creare una rete di server Minecraft con BungeeCord su Debian 8, Debian 9 o CentOS 7

Creare una rete di server Minecraft con BungeeCord su Debian 8, Debian 9 o CentOS 7

Cosa ti serve Un VPS Vultr con almeno 1 GB di RAM. Accesso SSH (con privilegi di root / amministrativi). Passaggio 1: installare prima BungeeCord

Come installare Matomo Analytics su Debian 9

Come installare Matomo Analytics su Debian 9

Usi un sistema diverso? Matomo (precedentemente Piwik) è una piattaforma di analisi open source, unalternativa aperta a Google Analytics. La fonte Matomo è ospitata o

Monitora lo stato del server Debian con Munin

Monitora lo stato del server Debian con Munin

Munin è uno strumento di monitoraggio per rilevare processi e risorse nella macchina e presenta le informazioni in grafici attraverso uninterfaccia web. Usa il seguito

Come installare ImpressPages CMS 5.0 su un VPS Debian 9 LAMP

Come installare ImpressPages CMS 5.0 su un VPS Debian 9 LAMP

Usi un sistema diverso? ImpressPages CMS 5.0 è un sistema di gestione dei contenuti (CMS) semplice ed efficace, gratuito e open source, intuitivo, basato su MVC

Come installare il forum NodeBB su Debian 9

Come installare il forum NodeBB su Debian 9

Usi un sistema diverso? NodeBB è un forum basato su Node.js. Utilizza socket Web per interazioni istantanee e notifiche in tempo reale. Codice sorgente NodeBB i

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.