Come configurare Nginx per più domini sullo stesso IP?

Pubblicato 17 ottobre 2024

Problema: Ospitare più domini su un unico IP

Ospitare diversi siti web con nomi di dominio differenti su un singolo indirizzo IP del server può essere complicato. Nginx, un popolare web server, offre una soluzione a questo problema, ma richiede la configurazione corretta per gestire più domini.

Soluzione: Configurazione corretta di Nginx per più domini

Impostazione dei blocchi server

I blocchi server in Nginx permettono di ospitare più domini su un unico server. Consentono di impostare configurazioni diverse per ciascun dominio, inclusi root dei documenti e logging.

Per creare blocchi server per ogni dominio, definiscili nel file di configurazione di Nginx. Ogni blocco server inizia con la direttiva server e contiene le impostazioni per quel dominio.

Suggerimento: Organizza la tua configurazione

Mantieni pulita la configurazione di Nginx creando file separati per ogni dominio nella directory /etc/nginx/sites-available/. Quindi, crea link simbolici a questi file nella directory /etc/nginx/sites-enabled/ per attivarli.

Configurazione della direttiva Listen

La direttiva 'listen' in Nginx indica al server quale indirizzo IP e porta utilizzare per le connessioni in entrata. Quando si configurano più domini, usa correttamente la direttiva 'listen'.

Il modo corretto di usare la direttiva 'listen' è specificare solo il numero di porta, solitamente 80 per HTTP o 443 per HTTPS. Per esempio:

listen 80;

Non includere il dominio nella direttiva 'listen'. Questo è scorretto e può causare problemi.

Utilizzo della direttiva Server_Name

La direttiva 'server_name' è importante per il routing dei domini in Nginx. Indica a Nginx quali nomi di dominio associare a un blocco server.

Per impostare 'server_name' per ogni dominio, includilo nel blocco server. Per esempio:

server_name www.domain1.example domain1.example;

Puoi aggiungere più nomi di dominio, con e senza il prefisso 'www', per coprire tutte le versioni del tuo nome di dominio.

Esempio: Sottodomini wildcard

Se vuoi abbinare tutti i sottodomini di un dominio, puoi usare un wildcard nella direttiva server_name:

server_name *.domain1.example;

Questo abbinerà qualsiasi sottodominio di domain1.example.

Guida passo-passo per configurare Nginx per più domini

Modifica del file di configurazione di Nginx

Per configurare più domini in Nginx, individua e apri il file di configurazione principale di Nginx. Nella maggior parte dei sistemi, questo file si trova in /etc/nginx/nginx.conf. È meglio creare file di configurazione separati per ogni dominio nella directory /etc/nginx/sites-available/.

Per creare blocchi server separati per ogni dominio:

  1. Apri un nuovo file nella directory sites-available:

    sudo nano /etc/nginx/sites-available/domain1.conf
  2. Aggiungi un blocco server per il tuo primo dominio:

    server {
       listen 80;
       server_name domain1.com www.domain1.com;
       # Altre direttive...
    }
  3. Ripeti questo processo per il tuo secondo dominio in un nuovo file:

    sudo nano /etc/nginx/sites-available/domain2.conf
  4. Aggiungi il blocco server per il secondo dominio:

    server {
       listen 80;
       server_name domain2.com www.domain2.com;
       # Altre direttive...
    }

Suggerimento: Link simbolici ai file di configurazione

Dopo aver creato i file di configurazione nella directory sites-available, crea link simbolici per attivarli:

sudo ln -s /etc/nginx/sites-available/domain1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain2.conf /etc/nginx/sites-enabled/

Questo metodo ti permette di attivare o disattivare facilmente i siti creando o rimuovendo i link simbolici.

Impostazione delle directory root

Directory root separate per ogni dominio mantengono i file di diversi siti web separati, facilitando la gestione e la sicurezza.

Per specificare le directory root nella configurazione:

  1. Crea directory per ogni dominio:

    sudo mkdir -p /var/www/domain1.com
    sudo mkdir -p /var/www/domain2.com
  2. In ogni blocco server del dominio, aggiungi la direttiva root:

    server {
       listen 80;
       server_name domain1.com www.domain1.com;
       root /var/www/domain1.com;
       # Altre direttive...
    }

Configurazione dell'elaborazione PHP (se applicabile)

Se i tuoi siti web utilizzano PHP, configura FastCGI per l'elaborazione PHP:

  1. In ogni blocco server, aggiungi un blocco location per PHP:

    server {
       # Altre direttive...
       location ~ \.php$ {
           fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
       }
    }
  2. Assicurati che i parametri FastCGI siano corretti per ogni dominio. Le direttive fastcgi_param dovrebbero puntare alla root del documento corretta:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Dopo aver apportato queste modifiche, testa la configurazione di Nginx e riavvia il servizio Nginx per applicare le modifiche.