Come Gestire Sottodomini o Domini Multipli con NGINX

Hai un server con un singolo indirizzo IP pubblico, ma hai bisogno di ospitare più domini o sottodomini? Cosa faresti? Questo scenario può essere confuso se sei un principiante. Ma non preoccuparti, questo tutorial ti copre, in modo da poter servire un sottodominio NGINX e più domini.

In questo tutorial, imparerai come servire efficacemente sottodomini NGINX o più domini su un unico server con un singolo indirizzo IP!

Se sei pronto, è tempo di metterci mano!

Prerequisiti

Questo tutorial prevede esempi pratici ma non richiede molti prerequisiti e suppone che tu abbia un Ubuntu Server LTS con SSH abilitato e NGINX installato. Gli esempi in questo tutorial sono basati su Ubuntu Server LTS 20.04.1.

Configurazione dei record DNS

Prima di poter servire sottodomini NGINX o più domini, dovrai aggiungere un record A in un pannello di controllo DNS. Il record A collega e punta tutti i domini e sottodomini a un singolo indirizzo IP per consentire ai browser web di trovare il tuo sito web.

1. Avvia il tuo browser web preferito e accedi al pannello di controllo DNS.

2. Fai clic su Aggiungi record per iniziare ad aggiungere i record A. Il tuo browser ti reindirizza a una pagina in cui configurerai le impostazioni DNS per il tuo dominio e i sottodomini.

Adding an A Record

Ora configura le impostazioni DNS come segue:

Seleziona Record A nel campo Tipo.

Inserisci @ nel campo Host e l’indirizzo IP del tuo server nel campo Valore.

Seleziona il valore desiderato nel campo TTL, quindi fai clic sul pulsante Conferma per salvare le impostazioni.

Ripeti lo stesso processo per gli altri sottodomini.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

La pagina finale Impostazioni DNS sarà simile a quella riportata di seguito.

Viewing DNS Settings Page

Il pannello di controllo dei record DNS potrebbe variare per funzionalità e design, ma gli stessi principi si applicano a tutti.

Configurazione delle directory web per il dominio NGINX e i sottodomini

Ora che hai aggiunto i record A per il tuo dominio e i sottodomini, è il momento di configurare le loro directory web. NGINX viene fornito con un file di virtual host predefinito ed è configurato per servire una directory web situata in /usr/share/nginx/html.

Creerai una directory web separata per ogni dominio all’interno della directory radice dei documenti predefinita di NGINX (/var/www/html).

1. Prima, apri il tuo terminale e esegui i comandi qui sotto per creare directory web per tutti i domini e sottodomini. In questo modo si separano, si organizzano e si isolano i file per ogni sito web.

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. Successivamente, esegui il comando chown per cambiare ricorsivamente (-R) la proprietà di ogni directory creata nel passaggio uno all’utente e al gruppo www-data. Stai cambiando la proprietà di ogni directory all’utente e al gruppo www-data poiché NGINX funziona come utente www-data.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. Crea un file chiamato index.html nel tuo editor di codice preferito e quindi copia/incolla il codice qui sotto nel file index.html. Salva il file all’interno della directory web primaria dei tuoi domini (/var/www/html/awstutorial.net).

Il codice HTML qui sotto mostra un messaggio che dice “Congratulazioni! Il sito web awstutorial.net funziona!” quando il file index.html viene aperto in un browser web.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. Infine, crea lo stesso index.html nelle directory /var/www/html/web1.awstutorial.net e /var/www/html/web2.awstutorial.net. Ma sostituisci awstutorial.net con web1.awstutorial.net e web2.awstutorial.net nel codice di ciascun index.html di conseguenza.

Configurazione dell’host virtuale per il dominio NGINX e i sottodomini

Hai già una pagina index.html per il tuo dominio e i sottodomini da servire attraverso un server web NGINX. Il prossimo passo è creare un file di configurazione dell’host virtuale NGINX per ogni dominio per servire le pagine HTML.

1. Crea un file di configurazione del server virtuale NGINX chiamato awstutorial.net nel tuo editor di codice preferito, e poi copia/incolla il codice sottostante in quel file. Salva il file nella directory /etc/nginx/sites-available/.

Il codice sottostante controlla il comportamento del tuo server, come il nome del server e la pagina index (home) quando un utente cerca di accedere al tuo dominio.

server {
        # Lega la porta TCP 80.
        listen 80; 

				# Directory radice usata per cercare un file
        root /var/www/html/awstutorial.net;
				# Definisce il file da usare come pagina index
        index index.html index.htm;
				# Definisce il nome del dominio o del sottodominio. 
        # Se non è definito server_name in un blocco di server, 
				# Nginx usa il nome 'empty'
        server_name awstutorial.net;

        location / {
            # Restituisce un errore 404 per le istanze in cui il server riceve 
						# richieste per file e directory non tracciabili.
            try_files $uri $uri/ =404;
        }
    }

2. Successivamente, esegui il seguente comando nginx per controllare (-t) il file di configurazione NGINX per eventuali errori di sintassi.

sudo nginx -t

Se non viene trovato alcun errore di sintassi nel file di configurazione NGINX, otterrai il seguente output.

Verifying NGINX configuration file

3. Successivamente, esegui il comando seguente per creare un link simbolico (ln -s) dalla directory /etc/nginx/sites-available alla directory /etc/nginx/sites-enabled/. Questo comando abiliterà il file di configurazione dell’host virtuale awstutorial.net.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

Il formato sites-available e sites-enabled è standard in un’installazione di NGINX su Ubuntu, ma altre distribuzioni potrebbero utilizzare uno standard diverso.

4. Ripeti i passaggi da uno a tre per creare i file di configurazione dell’host virtuale NGINX chiamati web1.awstutorial.net e web2.awstutorial.net.

Modifica le seguenti righe in ciascun file di configurazione dell’host virtuale NGINX:

  • Sostituisci la riga root /var/www/html/awstutorial.net con la directory webroot di ciascun sottodominio (root /var/www/html/web1.awstutorial.net e root /var/www/html/web2.awstutorial.net).
  • Sostituisci la riga server_name awstutorial.net con il nome di ciascun sottodominio (server_name web1.awstutorial.net e server_name web2.awstutorial.net).

5. Ora esegui i comandi sudo ln di seguito come hai fatto al passaggio tre per abilitare i file di configurazione dell’host virtuale.

# Abilita il file di configurazione del virtual host NGINX per web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# Abilita il file di configurazione del virtual host NGINX per web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. Esegui il comando systemctl riavviare il servizio NGINX (restart nginx) per applicare tutte le modifiche alla configurazione.

sudo systemctl restart nginx

7. Infine, naviga agli URL del dominio e dei sottodomini sul tuo browser per verificare se i siti web funzionano correttamente.

Se il dominio e i sottodomini si caricano correttamente, vedrai un messaggio simile a quello riportato di seguito.

Verifying websites are loading through the web browser.

Configurazione di HTTPS su dominio e sottodomini NGINX

Hai configurato e testato con successo un dominio NGINX e sottodomini sul protocollo HTTP, il che è ottimo. Ma devi proteggere la connessione del tuo dominio e sottodomini abilitando HTTPS. Come? Con un certificato che otterrai da un’Authority di Certificazione come Let’s Encrypt SSL.

1. In primo luogo, esegui il comando sottostante per installare il pacchetto software Certbot (apt-get install certbot). Certbot ti consente di scaricare un certificato SSL per il tuo dominio e sottodomini.

sudo apt-get install certbot python3-certbot-nginx -y

2. Successivamente, esegui il comando certbot di seguito per scaricare un certificato SSL (certonly) per il tuo dominio (-d awstutorial.net). Nota che accetti i termini di servizio (—agree-tos) inserendo il tuo indirizzo email (—email).

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

Sostituisci l’email con la tua.

3. Inserisci ‘1’ per selezionare il plugin NGINX Web Server (nginx) per autenticarti con il CA ACME, come mostrato di seguito.

Selecting Plugin to Authenticate with ACME CA

Dopo aver selezionato il plugin NGINX Web Server, vedrai il progresso del download del certificato SSL per il tuo dominio (awstutorial.net).

Per impostazione predefinita, i certificati SSL di Let’s Encrypt sono memorizzati nella directory /etc/letsencrypt/live/.

Showing Download Progress of the SSL Certificate

4. Ora esegui ciascun comando di seguito come hai fatto al passo due per scaricare i certificati SSL per i sottodomini rimanenti (web1.awstutorial.net e web2.awstutorial.net).

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. Infine, esegui il comando ls di seguito per elencare tutti i certificati SSL nella directory /etc/letsencrypt/live/ che contengono (*) il awstutorial.net nei loro nomi. Ciò ti consente di verificare l’esistenza dei certificati SSL.

ls /etc/letsencrypt/live/*awstutorial.net/

Di seguito, vedrai i certificati SSL per il tuo dominio e i sottodomini.

Showing SSL certificate for all domains.

Configurazione dell’host virtuale NGINX per utilizzare i certificati SSL

A questo punto, hai già a disposizione i certificati SSL. Ma come li utilizzi per proteggere il tuo dominio e i sottodomini? Definirai il percorso dei certificati nel blocco server di ciascun file di configurazione host virtuale NGINX.

1. Apri il file di configurazione dell’host virtuale NGINX di awstutorial.net situato nella directory /etc/nginx/sites-available/ nel tuo editor di codice preferito.

2. Sostituisci il contenuto del file con il codice sottostante, dove definisci il percorso del certificato SSL del tuo dominio e il protocollo SSL (sotto Percorso del certificato SSL).

server {
	     # Associa la porta TCP 80.
       listen 80;
	     # Definisce il nome del dominio o del sottodominio.
       # Se non è definito nessun server_name in un blocco server allora
	     # Nginx usa il nome 'vuoto'
       server_name awstutorial.net;
	     # Reindirizza il traffico al corrispondente
	     # blocco server HTTPS con il codice di stato 301
       return 301 https://$host$request_uri;
       }

server {
        # Associa la porta TCP 443 ed abilita SSL.
        listen 443 SSL;
	      # Directory radice utilizzata per la ricerca di un file
	      root /var/www/html/awstutorial.net; 
	      # Definisce il nome del dominio o del sottodominio.
        # Se non è definito nessun server_name in un blocco server allora
	      # Nginx usa il nome 'vuoto'
        server_name awstutorial.net;

	      # Percorso del certificato SSL
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Utilizza il file generato dal comando certbot.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Definisce il percorso del file dhparam.pem.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # Restituisce un errore 404 per le istanze in cui il server riceve
	      # richieste per file e directory non tracciabili.
        try_files $uri $uri/ =404;
        }

    }

3. Ripeti lo stesso processo (passaggi uno a due) per i restanti file di configurazione dell’host virtuale (web1.awstutorial.net e web2.awstutorial.net). Ma assicurati di sostituire il percorso del certificato SSL con il percorso del certificato del tuo sottodominio (sotto Percorso del certificato SSL).

4. Ora esegui nuovamente il comando systemctl di seguito per riavviare il servizio NGINX e applicare le modifiche alla configurazione.

sudo systemctl restart nginx

5. Infine, naviga sui tuoi URL di dominio e sottodominio sul tuo browser web. Ma questa volta, anziché utilizzare il protocollo HTTP, utilizza HTTPS per vedere se funzionano.

In basso, puoi vedere un’icona del lucchetto nella barra degli indirizzi, che indica che il sito web è sicuro con il tuo certificato SSL.

Verifying Domain is Secure

Conclusioni

In questo tutorial, hai imparato come servire un sottodominio NGINX o più domini configurando un file di configurazione dell’host virtuale. Hai anche toccato il tema della sicurezza dei tuoi domini con un certificato SSL che hai anche definito nel file di configurazione dell’host virtuale.

Ora, perché non utilizzare questa configurazione in un ambiente di produzione, ad esempio per ospitare più app su un singolo server e fornire hosting web conveniente?

Source:
https://adamtheautomator.com/nginx-subdomain/