Ricerca nel sito web

Come configurare gli host virtuali Apache su Ubuntu 22.04


Su questa pagina

  1. Di cosa parleremo?
  2. Inizia ora...
  3. Testare l'installazione del vhost Apache
  4. Conclusione

Il concetto di hosting virtuale viene utilizzato dalle aziende per ospitare più siti Web utilizzando una singola macchina. Può essere raggiunto con un metodo basato su IP o un approccio basato sul nome. Nell'hosting basato su IP abbiamo indirizzi IP distinti per ogni sito web. Nel caso dell'hosting basato sul nome, abbiamo più nomi in esecuzione su ciascun indirizzo IP.

Cosa copriremo?

In questo tutorial vedremo come possiamo ospitare due host virtuali su un sistema Ubuntu 22.04 utilizzando l'hosting virtuale basato sul nome. Useremo il server web Apache.

Inizia ora...

Passo 1. Aggiorna anche il repository e il sistema operativo:

sudo apt update
sudo apt upgrade -y

Passo 2. Installa il server web Apache per Ubuntu usando il comando:

sudo apt install apache2 -y
sudo systemctl restart apache2
sudo systemctl status apache2

Esempio di output:

? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Mon 2022-06-27 09:32:14 UTC; 18s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 13093 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/S>
   Main PID: 13098 (apache2)
      Tasks: 55 (limit: 1146)
     Memory: 4.7M
        CPU: 25ms
     CGroup: /system.slice/apache2.service
             ??13098 /usr/sbin/apache2 -k start
             ??13099 /usr/sbin/apache2 -k start
             ??13100 /usr/sbin/apache2 -k start

Passaggio 4. Crea due nuove directory all'interno della cartella www. Lascia che queste directory siano host1 e host2.

Ancora una volta, all'interno di queste directory crea un'altra cartella per contenere i tuoi file web. Lascia che queste directory siano public_html e public_html. Queste directory conterranno i file index.html corrispondenti per questi due host:

sudo mkdir -p /var/www/host1/public_html
sudo mkdir -p /var/www/host2/public_html

Le directory /var/www/host1/public_html e /var/www/host2/public_html rappresentano anche la root dei documenti per i due host virtuali.

Passaggio 5. Le directory create sopra sono di proprietà dell'utente root. Per consentire a un utente normale di modificare i file in queste directory, la proprietà deve essere modificata utilizzando i comandi:

sudo chown -R $USER:$USER /var/www/host1/public_html
sudo chown -R $USER:$USER /var/www/host2/public_html

La variabile $USER utilizzerà il valore dell'utente attualmente connesso. Il public_html sarà ora di proprietà di questo utente.

Passaggio 6. Ora imposta l'autorizzazione di accesso in lettura per la directory Web generale di Apache:

sudo chmod -R 755 /var/www

Passaggio 7. Ora imposteremo una pagina predefinita, ad esempio index.html per ciascun host virtuale. Questo può essere fatto direttamente dal terminale usando il comando 'echo'. Per l'host virtuale1:

sudo echo “Welcome to Virtual Host 1.” > /var/www/host1/public_html/index.html

Per l'host virtuale2:

sudo echo “Welcome to Virtual Host 2.” > /var/www/host2/public_html/index.html

Passaggio 8. Prima di procedere ulteriormente, stiamo utilizzando un passaggio intermedio. Qui modificheremo il file hosts per associare l'indirizzo dell'host locale ai due nomi di dominio dell'host virtuale: www.host1.com e www.host2.com. Questo viene fatto per evitare di registrare pubblicamente i nostri nomi di dominio.

sudo sh -c "echo 127.0.0.1 www.host1.com >> /etc/hosts"
sudo sh -c "echo 127.0.0.1 www.host2.com >> /etc/hosts"

I passaggi precedenti sono mostrati nell'immagine seguente:

\000-default.conf può essere utilizzato come file di base per ogni host virtuale. Basta copiare questo file nella stessa posizione con due nomi diversi: host1.conf e host2.conf:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host1.conf
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host2.conf

Passaggio 10. Ora apri i file e modificali per ciascun host virtuale. Ad esempio, per l'host virtuale1, i seguenti parametri devono essere modificati come:

<VirtualHost *:80>

    ServerAdmin

    ServerName host1

    ServerAlias www.host1.com

    DocumentRoot /var/www/host1/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

Per il secondo file (host2.conf), sostituire le voci host1 con host2. In alternativa, puoi creare due nuovi file e inserire il contenuto di cui sopra corrispondente a ciascun host virtuale. Il file host2.conf avrà il seguente aspetto:

<VirtualHost *:80>

    ServerAdmin

    ServerName host2

    ServerAlias www.host2.com

    DocumentRoot /var/www/host2/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

Passaggio 10. Ora che abbiamo creato i file dell'host virtuale, è il momento di abilitare effettivamente questi file. A tale scopo, Apache fornisce uno strumento chiamato a2ensite. Utilizzare il comando seguente per abilitarli:

sudo a2ensite host1.conf
sudo a2ensite host2.conf

Passaggio 11. Sul terminale, verrà visualizzato un messaggio per ricaricare apache per attivare la nuova configurazione, ma prima disabilitare il sito predefinito rappresentato da \000-default.conf utilizzando il comando:

sudo a2dissite 000-default.conf

Passo 12. Controlla i file di configurazione per qualsiasi errore di sintassi usando:

sudo apache2ctl configtest

Passaggio 13. Infine, ricaricare il servizio apache2 per applicare le modifiche apportate sopra:

sudo systemctl reload apache2

Test dell'installazione di Apache vhost

Verificheremo ora se tutto è impostato correttamente. Apri un terminale sulla tua macchina ed esegui il comando:

$ curl www.host1.com

Il comando precedente dovrebbe restituire il messaggio dalla pagina indice dell'host1 virtuale, allo stesso modo, il comando seguente dovrebbe visualizzare il messaggio dall'host2 virtuale:

$ curl www.host2.com

Conclusione

Finalmente ce l'abbiamo fatta, il nostro hosting virtuale funziona come previsto. Possiamo anche eseguire questo tutorial utilizzando Terraform, basta provarlo.