Host Virtuali

Versione Debian e Ubuntu

Struttura di Directories

Creazione delle directory:

sudo mkdir -p /var/www/your_domain_1/public_html
sudo mkdir -p /var/www/your_domain_2/public_html

Permessi alle directory create:

sudo chown -R $USER:$USER /var/www/your_domain_1/public_html
sudo chown -R $USER:$USER /var/www/your_domain_2/public_html
sudo chmod -R 755 /var/www

Pagine di Default

Creazione di pagine di default per i due siti:

vim /var/www/your_domain_1/public_html/index.html
<html>
  <head>
    <title>Welcome to your_domain_1!</title>
  </head>
  <body>
    <h1>Success! The your_domain_1 virtual host is working!</h1>
  </body>
</html>
vim /var/www/your_domain_2/public_html/index.html
<html>
  <head>
    <title>Welcome to your_domain_2!</title>
  </head>
  <body> <h1>Success! The your_domain_2 virtual host is working!</h1>
  </body>
</html>

Configurazione degli Host Virtuali

Primo Virtual Server

Copiare il file di configurazione di default:

sudo cp /etc/apache2/sites-available/000-default.conf \
  /etc/apache2/sites-available/your_domain_1.conf

Modificare il nuovo file:

sudo vim /etc/apache2/sites-available/your_domain_1.conf

Modificare le direttive esistenti:

<VirtualHost *:80>
  ...
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
   ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Aggiungere le direttive ServerName, ServerAlias e DocumentRoot:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_1
    ServerName your_domain_1
    ServerAlias www.your_domain_1
    DocumentRoot /var/www/your_domain_1/public_html
    ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ...
</VirtualHost>

Secondo Virual Server

Copiare il file di configurazione di del primo server virtuale:

sudo cp /etc/apache2/sites-available/your_domain_1.conf \
  /etc/apache2/sites-available/your_domain_2.conf

Editare il file generato in modo equivalente a quello del primo sito:

sudo vim /etc/apache2/sites-available/your_domain_2.conf
<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_2
    ServerName your_domain_2
    ServerAlias www.your_domain_2
    DocumentRoot /var/www/your_domain_2/public_html
    ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ...
</VirtualHost>

Abilitazione degli Host Viruali

sudo a2ensite your_domain_1.conf
sudo a2ensite your_domain_2.conf

Disabilitazione del server di default:

sudo a2dissite 000-default.conf

Test della configurazione:

sudo apache2ctl configtest

Modifica di /etc/hosts

Per la risoluzione nomi indirizzi, aggiungere i nomi dei nostri domini:

sudo vim /etc/hosts
127.0.0.1       localhost
127.0.2.1       your_domain_1
127.0.2.2       your_domain_2

Restart del Server

sudo systemctl restart apache2

Test

Con un browser o con curl, accedere a http://your_domain_1 e http://your_domain_2

Pulizia

Al termine rimettere a posto la configurazione iniziale:

sudo a2ensite 000-default.conf
sudo a2dissite your_domain_1.conf
sudo a2dissite your_domain_2.conf
sudo systemctl restart apache2

Versione Unix in Docker Alpine

Lanciare un contenitore Alpine e collegarsi:

docker run -d --name alp --privileged -p 8888:80 alpine sleep 1000000
docker exec -ti alp sh

Installare Apache:

apk add apache2
apk add curl

Non è necessaria l'abilitazione di alcun modulo.

Il file di configurazione principale, /etc/apache2/httpd.conf, include tutti i file *.conf dalla sottodirectory conf.d.

Andiamo in questa sottodirectory:

cd /etc/apache2/conf.d

Prepariamo due file di configurazione di due host virtuali che chiamiamo domain1 e domain2.

Il primo:

vi domain1.conf
<VirtualHost domain1:80>
    ServerAdmin webmaster@domain1.com
    DocumentRoot "/var/www/localhost/domain1/htdocs"
    <Directory "/var/www/localhost/domain1/htdocs">
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted
    </Directory>
    ServerName domain1.com
    ServerAlias domain1.com
    ErrorLog "logs/domain1-error_log"
    CustomLog "logs/domain1-access_log" common
</VirtualHost>

Il secondo:

vi domain2.conf
<VirtualHost domain2:80>
    ServerAdmin webmaster@domain2.com
    DocumentRoot "/var/www/localhost/domain2/htdocs"
    <Directory "/var/www/localhost/domain2/htdocs">
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted
    </Directory>
    ServerName domain2.com
    ServerAlias domain2.com
    ErrorLog "logs/domain2-error_log"
    CustomLog "logs/domain2-access_log" common
</VirtualHost>

Ciascuno ha i propri identificativi, e una sua directory DocumentRoot, con accesso regolato dalla direttiva <Directory>.

I log sono nella directory comune dei log di Apache.

Creiamo le directory DocumentRoot:

mkdir -p /var/www/localhost/domain1/htdocs
mkdir -p /var/www/localhost/domain2/htdocs

Creiamo dei files index.html in ciascuna di queste directory:

vi /var/www/localhost/domain1/htdocs/index.html
<h1>Hello from domain 1</h1>
vi /var/www/localhost/domain2/htdocs/index.html
<h1>Hello from domain 2</h1>

Occorre che i nomi dei domini siano risolti. Modifichiamo /etc/hosts:

vi /etc/hosts

Inserendo le linee:

127.0.1.1       domain1
127.0.1.2       domain2

Start del server:

httpd -k start

Test di raggiungibilità dall'interno:

curl domain1
curl domain2

Raggiungibilità dall'Esterno

Configurazione Interna

Scopriamo l'indirizzo IP del contenitore:

ip a | grep eth0 | grep inet
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0

Aggiungiamo altri due indirizzi:

ip addr add 10.0.0.1 dev eth0
ip addr add 10.0.0.2 dev eth0

Modifichiamo /etc/hosts sostituendo le linee di configurazione:

10.0.0.1      domain1
10.0.0.2      domain2

Configurazione Esterna

Apriamo un'altra finestra di terminale sulla macchina host.

Aggiungiamo la risoluzione di domain1 e domain2 al file /etc/hosts:

sudo vim /etc/hosts
10.0.0.1      domain1
10.0.0.2      domain2

Modifichiamo il routing:

sudo ip route add 10.0.0.0/8 via 172.17.0.2