Introduzione

In questo articolo, dimostreremo come limitare l'accesso su un server Web Nginx in esecuzione su Linux Mint 19 Tara.

Installare Nginx

Se non lo hai già fatto, installa Nginx sul tuo server digitando da console:
sudo apt update

sudo apt install nginx

Creare il file password

Per iniziare, dobbiamo creare il file che conterrà i nostri dati di accesso: username e password. È possibile farlo utilizzando il tool OpenSSL che potrebbe già essere disponibile sul server. In alternativa, è possibile utilizzare il tool htpasswd incluso nel pacchetto.

Creare il file password utilizzando OpenSSL

Se hai OpenSSL installato sul tuo server, puoi creare un file password senza pacchetti aggiuntivi. Creeremo un file nascosto chiamato .htpasswd nella directory di configurazione /etc/nginx per memorizzare i nostri dati di accesso: username e password.

È possibile aggiungere un nome utente al file utilizzando questo comando. Usiamo grok come nostro nome utente, ma puoi usare qualsiasi nome desideri:

sudo sh -c "echo -n 'grok:' >> /etc/nginx/.htpasswd"

Successivamente, aggiungi la voce password crittografata per il nome utente scelto digitando:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

Puoi ripetere questo processo per ulteriori utenti. Puoi vedere come gli utenti e le password crittografate sono memorizzati nel file digitando:
cat /etc/nginx/.htpasswd

Output
grok:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Creare il file password utilizzando il tool di Apache

In alternativa a OpenSSL per crittografare le password per l'autenticazione di Nginx, è possibile utilizzare il tool htpasswd, che si trova nel pacchetto apache2-utils.

Per installare il pacchetto apache2-utils sul tuo server digita da console:
sudo apt update
sudo apt install apache2-utils

Ora hai accesso al comando htpasswd. Possiamo usarlo per creare un file password che Nginx può utilizzare per autenticare gli utenti. Creeremo un file nascosto per questo scopo chiamato .htpasswd all'interno della nostra directory di configurazione /etc/nginx.

La prima volta che usiamo questa utility, dobbiamo aggiungere l'opzione -c per creare il file specificato. Per questo esempio possiamo utilizzare lo stesso nome utente utilizzando precedentemente "grok" alla fine del comando per creare una nuova voce all'interno del file:
sudo htpasswd -c /etc/nginx/.htpasswd grok

Ti verrà chiesto di fornire e confermare una password per l'utente.

Se si desidera aggiungere altri utenti, non utilizzare nuovamente il parametro -c, per esempio:
sudo htpasswd /etc/nginx/.htpasswd nuovo_utente

Possiamo vedere il nome utente e la password crittografata per ogni record:
cat /etc/nginx/.htpasswd

Output
grok:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
nuovo_utente:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Configurare Nginx con la password di autenticazione

Ora che abbiamo un file con i nostri utenti e password in un formato che Nginx può leggere, dobbiamo configurare Nginx per leggere questo file.

Inizia aprendo il file di configurazione del blocco del server a cui desideri aggiungere una restrizione. Per il nostro esempio, utilizzeremo il file di blocco del server predefinito installato tramite il pacchetto Nginx di Linux Mint:

Da console:
sudo nano /etc/nginx/sites-enabled/default

Cercare il seguente blocco:

...
    location / {
        try_files $uri $uri/ =404;
    }
...

Aggiungere le seguenti voci:

auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;

Il risultato finale dovrà essere il seguente:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Salvare e chiudere il file.

Riavviare Nginx:
sudo service nginx restart

La directory che hai specificato dovrebbe ora essere protetta da password.

Collegarsi al proprio indirizzo IP pubblico oppure in localhost:

http://localhost/

Dovresti ricevere una richiesta di inserimento di username e password.

La configurazione di Nginx con password di autenticazione su Linux Mint 19 Tara è terminata.