Come installare Nginx con host virtuali e certificato SSL

Nginx (Corto per Motore-x) è un server HTTP e proxy inverso gratuito, open source, potente, ad alte prestazioni e scalabile, un server proxy TCP/UDP standard e di posta. È facile da usare e configurare, con un semplice linguaggio di configurazione. Nginx è ora il software server Web preferito per alimentare siti con carichi pesanti, grazie alla sua scalabilità e prestazioni.

In questo articolo verrà discusso come utilizzare Nginx come server HTTP, configurarlo per servire contenuti Web e impostare basato sul nome host virtuali e creare e installare SSL per trasmissioni di dati sicure, incluso un certificato autofirmato su Ubuntu e CentOS.

Come installare il server Web Nginx

Innanzitutto inizia installando il pacchetto Nginx dai repository ufficiali usando il tuo gestore di pacchetti come mostrato.

 Su Ubuntu  $ sudo apt update $ sudo apt install nginx  Su CentOS 
$ sudo yum update $ sudo yum install epel-release $ sudo yum install nginx 

Dopo aver installato il pacchetto Nginx, è necessario avviare il servizio per ora, abilitarlo per l'avvio automatico all'avvio e visualizzarne lo stato, utilizzando i seguenti comandi. Nota che su Ubuntu, dovrebbe essere avviato e abilitato automaticamente mentre il pacchetto è preconfigurato.

$ sudo systemctl start nginx. $ sudo systemctl abilita nginx. $ sudo systemctl status nginx. 
Avvia e controlla lo stato di Nginx
Avvia e controlla lo stato di Nginx

A questo punto, il server web Nginx dovrebbe essere attivo e funzionante, puoi verificare lo stato con il pulsante comando netstat.

$ sudo netstat -tlpn | grep nginx. 
Controlla lo stato della porta Nginx
Controlla lo stato della porta Nginx

Se il tuo sistema ha un firewall abilitato, devi aprire la porta 80 e 443 permettere HTTP e HTTPS traffico rispettivamente, attraverso di essa, eseguendo.

 Su CentOS 
$ sudo firewall-cmd --permanent --add-port=80/tcp. $ sudo firewall-cmd --permanent --add-port=443/tcp. $ sudo firewall-cmd --reload  Su Ubuntu  $ sudo ufw allow 80/tcp. $ sudo ufw allow 443/tcp. $ sudo ufw reload 

Il metodo ideale per testare l'installazione di Nginx e verificare se è in esecuzione e in grado di servire pagine Web è aprire un browser Web e puntare all'IP del server.

http://Your-IP-Address. O. http://Your-Domain.com. 

Un'installazione funzionante dovrebbe essere indicata dalla seguente schermata.

Controlla la pagina Web di Nginx
Controlla la pagina Web di Nginx

Come configurare il server Web Nginx

I file di configurazione di Nginx si trovano nella directory /etc/nginx e il file di configurazione globale si trova in /etc/nginx/nginx.conf sia su CentOS che su Ubuntu.

Nginx è composto da moduli controllati da varie opzioni di configurazione, note come direttive. UN direttiva può essere semplice (nella forma nome e valori terminati con a ;) o bloccare (ha istruzioni aggiuntive allegate usando {}). E una direttiva block che contiene altre direttive è chiamata a contesto.

Tutte le direttive sono spiegate in modo esauriente nel Documentazione Nginx nel sito web del progetto. Puoi fare riferimento ad esso per ulteriori informazioni.

Come servire contenuto statico utilizzando Nginx in modalità autonoma

A un livello fondamentale, Nginx può essere utilizzato per servire contenuti statici come HTML e file multimediali, in modo autonomo modalità, in cui viene utilizzato solo il blocco server predefinito (analogo ad Apache dove non sono stati installati host virtuali configurato).

Inizieremo spiegando brevemente la struttura di configurazione nel file di configurazione principale.

 $ sudo vim /etc/nginx/nginx.conf. 

Se guardi in questo file di configurazione di Nginx, la struttura di configurazione dovrebbe apparire come segue e questo è indicato come il contesto principale, che contiene molte altre direttive semplici e di blocco. Tutto il traffico web viene gestito nel contesto http.

utente nginx; worker_processes 1;... error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;... eventi {... } http { server{ ……. }... }

Quello che segue è un esempio di configurazione principale di Nginx (/etc/nginx/nginx.conf), dove il blocco http sopra contiene una direttiva include che indica a Nginx dove trovare i file di configurazione del sito Web (configurazioni dell'host virtuale).

File di configurazione Nginx

dati www dell'utente; worker_processes automatico; pid /run/nginx.pid; eventi { worker_connections 768; # multi_accetta attiva; } http { include /etc/nginx/mime.types; default_type application/octet-stream; includi /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; inviare file su; #tcp_nopush su; keepalive_timeout 65; #gzip su; include /etc/nginx/conf.d/*.conf;
}

Nota che su Ubuntu, troverai anche una direttiva include aggiuntiva (includi /etc/nginx/sites-enabled/*;), dove la directory /etc/nginx/sites-enabled/ memorizza i collegamenti simbolici ai file di configurazione dei siti Web creati in /etc/nginx/sites-available/, per abilitare i siti. E l'eliminazione di un collegamento simbolico disabilita quel particolare sito.

In base all'origine dell'installazione, troverai il file di configurazione del sito Web predefinito su /etc/nginx/conf.d/default.conf (se hai installato da ufficiale NGINX repository e EPEL) o /etc/nginx/sites-enabled/default (se hai installato da repository Ubuntu).

Questo è il nostro blocco server nginx predefinito di esempio situato in /etc/nginx/conf.d/default.conf sul sistema di prova.

server { ascolta 80 default_server; ascolta [::]:80 default_server; nome del server _; radice /var/www/html/; indice index.html; posizione / { try_files $uri $uri/ =404; } }

Una breve spiegazione delle direttive nella configurazione precedente:

  • ascoltare: specifica il porta il server è in ascolto.
  • nome del server: definisce il nome del server che può essere nomi esatti, nomi con caratteri jolly o espressioni regolari.
  • radice: specifica la directory da cui Nginx servirà pagine web e altri documenti.
  • indice: specifica il tipo (i) di file indice da servire.
  • Posizione: utilizzato per elaborare le richieste di file e cartelle specifici.

Da un browser web, quando si punta al server utilizzando il Nome host localhost o il suo indirizzo IP, elabora la richiesta e serve il file /var/www/html/index.html, e salva immediatamente l'evento nel suo log di accesso (/var/log/nginx/access.log) con un 200 (OK) risposta. In caso di errore (failed event), registra il messaggio nel log degli errori (/var/log/nginx/error.log).

Prova il sito predefinito di Nginx
Prova il sito predefinito di Nginx

Per saperne di più sull'accesso Nginx, puoi fare riferimento a Come configurare l'accesso personalizzato o i formati di registro degli errori in Nginx.

Invece di utilizzare i file di registro predefiniti, è possibile definire file di registro personalizzati per diversi siti Web, come vedremo più avanti, nella sezione "configurazione di host virtuali basati sul nome (blocchi server)”.

Come limitare l'accesso a una pagina Web con Nginx

Per limitare l'accesso al tuo sito web/applicazione o ad alcune parti di esso, puoi impostare autenticazione HTTP di base. Questo può essere utilizzato essenzialmente per limitare l'accesso all'intero server HTTP, ai singoli blocchi di server o ai blocchi di posizione.

Inizia creando un file che memorizzerà le tue credenziali di accesso (nome utente/password) utilizzando il htpasswd utilità.

 $ yum installa httpd-tools #RHEL/CentOS. $ sudo apt install apache2-utils #Debian/Ubuntu. 

Ad esempio, aggiungiamo l'amministratore utente a questo elenco (puoi aggiungere il maggior numero possibile di utenti), dove il -C l'opzione viene utilizzata per specificare il file della password e l'opzione -B per crittografare la password. Una volta colpito [Accedere], ti verrà chiesto di inserire la password dell'utente:

$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin. 

Quindi, assegniamo le autorizzazioni e la proprietà appropriate al file della password (sostituisci l'utente e il gruppo nginx con www-dati su Ubuntu).

$ sudo chmod 640 /etc/nginx/conf.d/.htpasswd. $ sudo chown nginx: nginx /etc/nginx/conf.d/.htpasswd. 

Come accennato in precedenza, puoi limitare l'accesso al tuo server web, a un singolo sito web (usando il suo blocco server) oa una directory o un file specifico. Per raggiungere questo obiettivo possono essere utilizzate due utili direttive:

  • auth_basic – attiva la convalida di nome utente e password utilizzando il tasto “Autenticazione di base HTTP“protocollo.
  • auth_basic_user_file – specifica il file della credenziale.

Ad esempio, mostreremo come proteggere con password la directory /var/www/html/protected.

server { ascolta 80 default_server; nome_server host locale; radice /var/www/html/; indice index.html; posizione / { try_files $uri $uri/ =404; } posizione /protected/ { auth_basic "Accesso limitato!"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; }
}

Ora salva le modifiche e riavvia il servizio Nginx.

$ sudo systemctl riavvia nginx 

La prossima volta che indirizzerai il tuo browser alla directory sopra (http://localhost/protected) ti verrà chiesto di inserire le tue credenziali di accesso (nome utente amministratore e la password scelta).

Un login riuscito ti consente di accedere ai contenuti della directory, altrimenti otterrai un "401 Autorizzazione richiesta"errore.

Come configurare host virtuali basati sul nome (blocchi server) in Nginx

Il contesto del server consente di archiviare e servire più domini/siti dalla stessa macchina fisica o server privato virtuale (VPS). Più blocchi di server (che rappresentano host virtuali) possono essere dichiarati all'interno del contesto http per ogni sito/dominio. Nginx decide quale server elabora una richiesta in base all'intestazione della richiesta che riceve.

Dimostreremo questo concetto utilizzando i seguenti domini fittizi, ciascuno situato nella directory specificata:

  • wearetecmint.com – /var/www/html/wearetecmint.com/
  • welovelinux.com – /var/www/html/welovelinux.com/

Quindi, assegna le autorizzazioni appropriate sulla directory per ogni sito.

$ sudo chmod -R 755 /var/www/html/wearetecmint.com/public_html $ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Ora, crea un campione index.html file all'interno di ciascuno public_html directory.

www.wearetecmint.com

Questa è la pagina dell'indice di www.wearetecmint.com

Quindi, crea i file di configurazione del blocco del server per ogni sito all'interno del /etc/httpd/conf.d directory.

$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf. $ sudo vi /etc/nginx/conf.d/welovelinux.com.conf. 

Aggiungi la seguente dichiarazione di blocco del server in wearetecmint.com.conf file.

wearetecmint.com.conf

server { ascolta 80; nome_server wearetecmint.com; root /var/www/html/wearetecmint.com/public_html; indice index.html; posizione / { try_files $uri $uri/ =404; } }

Quindi, aggiungi la seguente dichiarazione di blocco del server nel file welovelinux.com.conf file.

welovelinux.com.conf

server { ascolta 80; nome_server welovelinux.com; root /var/www/html/welovelinux.com/public_html; indice index.html; posizione / { try_files $uri $uri/ =404; } }

Per applicare le modifiche recenti, riavvia il server web Nginx.

$ sudo systemctl riavvia nginx. 

e puntare il tuo server web agli indirizzi di cui sopra dovrebbe farti vedere le pagine principali dei domini fittizi.

http://wearetecmint.com. http://welovelinux.com. 
Testare i siti Web degli host virtuali Nginx
Testare i siti Web degli host virtuali Nginx

Importante: Se hai SELinux abilitato, la sua configurazione predefinita non consente a Nginx di accedere ai file al di fuori di posizioni autorizzate note (come /etc/nginx per le configurazioni, /var/log/nginx per i registri, /var/www/html per file web ecc..).

Puoi gestirlo disabilitando SELinux o impostando il contesto di sicurezza corretto. Per ulteriori informazioni, fare riferimento a questa guida: utilizzando Nginx e Nginx Plus con SELinux sul sito web di Nginx Plus.

Come installare e configurare SSL con Nginx

SSL i certificati aiutano ad abilitare l'http sicuro (HTTPS) sul tuo sito, che è essenziale per stabilire una connessione affidabile/sicura tra gli utenti finali e il tuo server crittografando le informazioni trasmesse a, da o all'interno del tuo sito.

Tratteremo come creare e installare un certificato autofirmato e generare una richiesta di firma del certificato (CSR) per acquisire un certificato SSL da un'autorità di certificazione (circa), da utilizzare con Nginx.

I certificati autofirmati possono essere creati gratuitamente e sono praticamente validi per scopi di test e per servizi solo LAN interni. Per i server rivolti al pubblico, si consiglia vivamente di utilizzare un certificato emesso da una CA (ad esempio Criptiamo) per confermarne l'autenticità.

Per creare un certificato autofirmato, creare prima una directory in cui verranno archiviati i certificati.

$ sudo mkdir /etc/nginx/ssl-certs/

Quindi genera il tuo certificato autofirmato e la chiave utilizzando il pulsante si apre strumento da riga di comando.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt. 

Descriviamo brevemente le opzioni utilizzate nel comando precedente:

  • richiesta -X509 – mostra che stiamo creando un certificato x509.
  • -nodi (NO DES) – significa “non crittografare la chiave”.
  • -giorni 365 – specifica il numero di giorni per i quali il certificato sarà valido.
  • -newkey rsa: 2048 – specifica che la chiave generata utilizzando l'algoritmo RSA deve essere a 2048 bit.
  • -keyout /etc/nginx/ssl-certs/nginx.key – specifica il percorso completo della chiave RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt – specifica il percorso completo del certificato.
Crea certificato SSL e chiave per Nginx
Crea certificato SSL e chiave per Nginx

Quindi, apri il file di configurazione dell'host virtuale e aggiungi le seguenti righe a una dichiarazione di blocco del server in ascolto sulla porta 443. Verificheremo con il file host virtuale /etc/nginx/conf.d/wearetecmint.com.conf.

$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf. 

Quindi aggiungi la direttiva ssl al file di configurazione di nginx, dovrebbe essere simile a quello di seguito.

server { ascolta 80; ascolta [::]:80; ascolta 443 ssl; ascolta [::]:443 ssl; ssl acceso; ssl_certificate /etc/nginx/ssl-certs/nginx.crt; ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt; ssl_certificate_key /etc/nginx/ssl-certs/nginx.key; nome_server wearetecmint.com; root /var/www/html/wearetecmint.com/public_html; indice index.html; posizione / { try_files $uri $uri/ =404; } }

Ora riavvia Nginx e punta il browser al seguente indirizzo.

https://www.wearetecmint.com. 
Controlla il sito web Nginx SSL
Controlla il sito web Nginx SSL

Se desideri acquistare un certificato SSL da una CA, devi generare una richiesta di firma del certificato (CSR) come mostrato.

$ sudo openssl req -newkey rsa: 2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr. 

Puoi anche creare un CSR da una chiave privata esistente.

$ sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr. 

Quindi, è necessario inviare il CSR che viene generato a circa per richiedere l'emissione di un certificato SSL firmato da una CA. Una volta ricevuto il certificato dalla CA, è possibile configurarlo come mostrato sopra.

Leggi anche: La guida definitiva per proteggere, rafforzare e migliorare le prestazioni del server Web Nginx

Riepilogo

In questo articolo abbiamo spiegato come installare e configurare Nginx; ha spiegato come configurare l'hosting virtuale basato sul nome con SSL per proteggere le trasmissioni di dati tra il server Web e un client.

Se hai riscontrato problemi durante il processo di installazione/configurazione di nginx o hai domande o commenti, usa il modulo di feedback qui sotto per contattarci.

Teachs.ru