Ricerca nel sito web

Come configurare l'autenticazione HTTP di base in Nginx


L'autenticazione HTTP di base è un meccanismo di sicurezza per limitare l'accesso al tuo sito web/applicazione o ad alcune parti di esso impostando una semplice autenticazione nome utente/password. Può essere utilizzato essenzialmente per proteggere l'intero server HTTP, singoli blocchi di server (host virtuali in Apache) o blocchi di posizione.

Leggi anche: Come configurare host virtuali basati su nome e IP (blocchi server) con NGINX

Come suggerisce il nome, non è un metodo sicuro su cui fare affidamento; dovresti usarlo insieme ad altre misure di sicurezza più affidabili. Ad esempio, se la tua applicazione web è in esecuzione su HTTP, le credenziali dell'utente vengono trasmesse in testo semplice, quindi dovresti considerare di abilitare HTTPS.

Lo scopo di questa guida è aiutarti ad aggiungere un piccolo ma utile livello di sicurezza per proteggere i contenuti privati/privilegiati sulle tue applicazioni web (come, ma non limitato ai lati amministratore). Puoi anche usarlo per impedire l'accesso a un sito web o un'applicazione che è ancora in fase di sviluppo.

Requisiti

  1. Installa lo stack LEMP in CentOS/RHEL 7
  2. Installa lo stack LEMP in Ubuntu/Debian

Crea file utente di autenticazione HTTP

Dovresti iniziare creando un file che memorizzerà le coppie nome utente:password. Utilizzeremo l'utilità htpasswd dal server HTTP Apache per creare questo file.

Per prima cosa controlla che apache2-utils o httpd-tools, i pacchetti che forniscono l'utilità htpasswd siano installati sul tuo sistema, altrimenti esegui il comando appropriato per la tua distribuzione per installarlo:

yum install httpd-tools		[RHEL/CentOS]
sudo apt install apache2-utils	[Debian/Ubuntu]

Successivamente, esegui il comando htpasswd di seguito per creare il file della password con il primo utente. L'opzione -c viene utilizzata per specificare il file passwd, una volta premuto [Invio], ti verrà chiesto di inserire la password dell'utente.

htpasswd -c /etc/nginx/conf.d/.htpasswd developer

Aggiungi un secondo utente e non utilizzare l'opzione -c qui.

htpasswd /etc/nginx/conf.d/.htpasswd admin

Ora che hai pronto il file delle password, procedi con la configurazione delle parti del tuo server web a cui desideri limitare l'accesso. Per visualizzare il contenuto del file delle password (che include nomi utente e password crittografate), utilizzare il comando cat riportato di seguito.

cat /etc/nginx/conf.d/.htpasswd 

Configura l'autenticazione HTTP per Nginx

Come accennato in precedenza, puoi limitare l'accesso al tuo server web, a un singolo sito web (utilizzando il blocco del server) o a una direttiva sulla posizione. A questo scopo si possono utilizzare due utili direttive.

  • auth_basic: attiva la convalida del nome utente e della password utilizzando il protocollo "Autenticazione di base HTTP".
  • auth_basic_user_file: specifica il file della password.

Proteggi con password gli host virtuali Nginx

Per implementare l'autenticazione di base per l'intero server web, che si applica a tutti i blocchi server, apri il file /etc/nginx/nginx.conf e aggiungi le righe seguenti nel contesto http:

http{
	auth_basic           "Restricted Access!";
    	auth_basic_user_file /etc/nginx/conf.d/.htpasswd; 
	……...
}

Proteggi con password il sito web o il dominio Nginx

Per abilitare l'autenticazione di base per un particolare dominio o sottodominio, apri il relativo file di configurazione in /etc/nginx/conf.d/ o /etc/nginx/conf/sites-available (a seconda di come hai installato Nginx), quindi aggiungi la configurazione seguente nel blocco server o nel contesto:

server {
	listen 			80;
	server_name    	  example.com;
	auth_basic           	"Restricted Access!";
    	auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	location /  {
		……..
	}
	……...
}

Proteggi la directory web con password in Nginx

Puoi anche abilitare l'autenticazione di base all'interno di una direttiva sulla posizione. Nell'esempio seguente, a tutti gli utenti che tentano di accedere al blocco di posizione /admin verrà chiesto di autenticarsi.

server {
	listen 			80;
	server_name    	example.com www.example.com;
	
	location / {
		……..
	}
	location /admin/ {
		auth_basic           	"Restricted Access!";
    		auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	}

	location /public/{
		auth_basic  off;	#turns off basic http authentication off for this block
	}
	……..
}

Se hai configurato l'autenticazione HTTP di base, a tutti gli utenti che tentano di accedere al tuo server web o a un sottodominio o a una parte specifica di un sito (a seconda di dove l'hai implementata), verrà chiesto un nome utente e una password come mostrato nello screenshot qui sotto .

In caso di autenticazione utente non riuscita, verrà visualizzato l'errore "401 Autorizzazione richiesta" come mostrato di seguito.

Puoi trovare ulteriori informazioni su limitare l'accesso con l'autenticazione HTTP di base.

Potrebbe interessarti anche leggere le seguenti utili guide relative al server HTTP Nginx.

  1. Come proteggere con password le directory Web in Nginx
  2. La guida definitiva per proteggere, rafforzare e migliorare le prestazioni di Nginx
  3. Configurazione di HTTPS con Let's Encrypt certificato SSL per Nginx

In questa guida, abbiamo mostrato come implementare l'autenticazione HTTP di base nel server web HTTP Nginx. Per porre qualsiasi domanda, utilizzare il modulo di feedback qui sotto.