Come Impostare l’Autenticazione HTTP di Base in NGINX

0
228

Di base nome utente e la password di autenticazione è un modo facile e semplice per fissare pannelli amministrativi e servizi di backend. Nginx può essere configurato per proteggere alcune aree del vostro sito web, o anche utilizzato come proxy inverso per garantire altri servizi.

Come Funziona l’Autenticazione HTTP di Lavoro?

In autenticazione HTTP di base, determinate rotte sul server sono bloccati e richiedono un nome utente e una password per accedervi. Per esempio, il pannello di amministrazione della maggior parte dei router di casa sono protetti in questo modo, quando si tenta di accedervi, il browser si apre una finestra di dialogo che chiede le credenziali.

Quando un utente tenta di accedere a una risorsa protetta, il server invia l’utente WWW-Authenticate intestazione con un 401 Unauthorized risposta. Il client invia il nome utente e la password memorizzata nell’intestazione di Autorizzazione, e se corrisponde a un file di chiavi, essi sono autorizzati a connettersi.

Perché l’autenticazione HTTP di base richiede l’invio di password giù il filo, è necessario disporre di HTTPS/TLS impostare sul vostro server, o chiunque altro in mezzo potrebbe fiutare la password in testo normale. HTTPS sarà crittografare la connessione, il che rende più sicura la trasmissione. È possibile impostare un certificato gratuito con LetsEncrypt, o se stai cercando di proteggere un server privato, creare e firmare uno voi stessi.

Basic username/password di autenticazione è solo uno dei tanti schemi di autenticazione; un altro schema comune è portatore gettoni, utilizzato per OAuth 2.0 i flussi. È possibile utilizzare questo schema con Nginx utilizzando JSON Web Gettoni modulo, ma l’installazione è molto più complesso di username/password di autenticazione.

Generare un File di Password

È possibile utilizzare il htpasswd per generare i file di password. Questo è più probabile che sia già installato sul vostro sistema, ma se non è possibile installarlo dal apache2-utils. (Nginx utilizza la stessa password formato come Apache):

sudo apt-get install apache2-utils

Generare una nuova password file eseguendo htpasswd con-flag c, in questo caso, per l’utente “admin”:

sudo htpasswd -c /etc/nginx/.htpasswd admin

Ti verrà chiesto di inserire una password, che verrà codificato e memorizzati in /etc/nginx/.htpasswd. Se si desidera aggiungere più utenti, lasciare fuori l’-c flag per aggiungere nuove voci.

Attivare l’Autenticazione HTTP di Base

È possibile proteggere qualsiasi percorso in nginx utilizzando il auth_basic direttiva all’interno di un locale. Per esempio, per proteggere con password (admin), si sarebbe posto questo blocco di posizione all’interno del blocco del server in nginx file di configurazione (di solito si trova in /etc/nginx/nginx.conf):

posizione /admin {
try_files $uri $uri/ =404;
auth_basic “Contenuto con Restrizioni”;
auth_basic_user_file /etc/nginx/.htpasswd;
}

Il auth_basic_user_file direttiva deve puntare verso la password del file creato nel primo passaggio. Questo non deve essere chiamato qualcosa di speciale, così è possibile creare diversi file di password per i diversi percorsi.

Nginx dovrebbe gestire il resto per voi. Riavviare per applicare le modifiche:

sudo service nginx riavviare

E, controllare il protetto del percorso nel tuo navigatore. Si dovrebbe essere richiesto di immettere una password, e negato l’accesso, se non può fornire.

Utilizzando L’Autenticazione Proxy

Un caso di uso comune di basic auth è quella di fissare una risorsa esterna con nginx proxy inverso. Questo funziona perfettamente con auth_basic, ed è semplice come utilizzando i due insieme:

posizione / {
#//accendere auth per questa posizione
auth_basic “Contenuto con Restrizioni”;
auth_basic_user_file /etc/nginx/.htpasswd;

#//normale configurazione del proxy
proxy_http_version 1.1;
proxy_pass_request_headers su;
proxy_set_header Host $host;
proxy_set_header X-Reale-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding “”;

proxy_pass https://<indirizzo-ip>;
proxy_redirect di default;
}

Questo funziona negando qualsiasi voce proxy prima l’autenticazione di un utente. Una volta autenticato, nginx funziona come normale.

Tuttavia, se si desidera eseguire l’autenticazione sul server dietro il proxy inverso, la configurazione è più complicato. Potrete invece vogliamo nginx di proxy l’input dell’utente per il server web, che potrebbe, ad esempio, la query di un database o di eseguire più complesso il controllo di un semplice file di password.

Avrete bisogno di usare le intestazioni più modulo per essere in grado di modificare le intestazioni in modo più diretto:

posizione / {
proxy_http_version 1.1;
proxy_pass_request_headers su;
proxy_set_header Host $host;
proxy_set_header X-Reale-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding “”;

proxy_pass https://<indirizzo-ip>;
proxy_redirect di default;

more_set_input_headers ‘Autorizzazione: $http_authorization’;
more_set_headers -s 401 ‘WWW-Authenticate: Basic realm=”your_server.com”‘;
}

La configurazione del proxy è lo stesso, tranne che manca auth_basic, perché non vogliamo fare l’autenticazione con nginx. Il more_set_input_headers direttiva fa la magia qui, e l’impostazione dell’intestazione per quando si comunica con il server web per includere il $http_authorization variabile è ricevuto dal cliente. In questo modo il nome utente e la password sono passati attraverso nginx per il backend.

La riga successiva è più complicato; il normale modo di impostare le intestazioni sovrascrivere il regno variabile quando viene inoltrato attraverso nginx, che non è l’ideale. Utilizzando more_set_headers conserverà questo e mostrare al cliente informazioni corrette.