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