GiBiLamp 3 – Linux e Apache
Proseguiamo la nostra serie dedicata a GiBiLamp dedicandoci nel dettagli al sistema operativo Linux e ad Apache.
Linux
La nostra scelta a livello di sistema operativo è Ubuntu Server Edition installato in versione minimale, ovvero escludendo dall’installazione qualsiasi pacchetto aggiuntivo.
In questo articolo non mi soffermerò in particolare sulla fase di installazione del sistema operativo che non presenta particolari requisiti; posso solo indicare che fino ad ora con Ubuntu non ho mai avuto difficoltà di installazione del sistema o dei pacchetti necessari, quindi mi sento di consigliarlo.
Oltretutto Ubuntu ha una comunità molto vasta ed è quindi facile trovare la soluzione ai problemi che possono accadere durante le varie fasi di vita dei nostri servizi.
Apache
Il primo passo da fare è quello di installare il server web Apache, per farlo è necessario impartire il comando:
apt-get install apache2
Già a questo livello c’è una scelta da fare tra:
- apache worker, ovvero con gestione multi-thread (il default proposto da Ubuntu)
- apache prefork, ovvero con gestione uni-thread.
“Multi-thread” significa che ogni singola richiesta viene gestita da un thread e più thread compongono un processo; mentre “uni-thread” significa che ogni richiesta viene gestita da un unico thread in un unico processo.
In termini di prestazioni worker non è più veloce del prefork, ma è meno ingordo di risorse dato che non associa un processo per ogni richiesta; quindi scala meglio in caso di alto carico di lavoro. Il problema è che non tutti i moduli vitali per un server web sono in grado di lavorare con tecnologia multi-thread; infatti durante l’installazione di alcuni moduli il sistema rimuove da solo il componente worker per far posto al prefork.
Il consiglio in questo caso è di lasciar scegliere il sistema; durante l’installazione di Apache verrà abilitato il worker, che poi con l’installazione di PHP verrà rimosso per lasciar spazio al prefork.
Al servizio apache viene associato un utente ed un gruppo www-data. Dopo l’installazione di apache avremo a disposizione:
- cartella dei file di configurazione: /etc/apache2
- cartella dei file di log: /var/log/apache2
- cartella dove creare i nostri siti: /var/www
Apache di norma si mette in ascolto sulla porta 80, quindi se vogliamo verificare che il nostro web server funzioni correttamente è sufficiente da un browser qualunque digitare l’indirizzo IP della macchina su cui abbiamo installato apache: se vediamo una pagina bianca con l’eloquente scritta It works!, abbiamo fatto il primo passo.
https
Un web server che si rispetti comunque non risponde solo sulla porta 80 (servizio http) ma anche sulla 443 (servizio https) che ha l’immenso vantaggio di cifrare il passaggio dei dati fra il client ed il server. E’ raccomandabile che i servizi di gestione – come per esempio phpMyAdmin – siano disponibili solo tramite https dato che i dati che vi transitano sono di una certa delicatezza.
Per abilitare questa funzionalità è necessario eseguire alcuni passi fondamentali:
- installare openssl tramite il comando
apt-get install openssl
- abilitare il modulo specifico per apache con il comando
a2enmod ssl
- riavviare il servizio apache con il comando
apache2ctl restart
- creare un certificato da utilizzare nella fase di comunicazione sicura con i browser web.
A proposito dell’ultimo punto, Ubuntu mette a disposizione una comoda applicazione per generare un certificato pem. La procedura è la seguente.
- installare make-ssl-cert
apt-get install make-ssl-cert
- creare la cartella /etc/apache2/certificati
- lanciare il comando:
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/certificati/certificato1.pem
Nota: durante la fase di generazione del certificato ci verranno richieste delle informazioni riguardo la nostra attività, che devono essere compilate obbligatoriamente.
- verificare che il file ports.conf presente in /etc/apache2 abbia le seguenti righe di configurazione:
<IfModule mod_ssl.c> # NameVirtualHost statement here Listen 443 </IfModule>
ovvero che il modulo ssl risponda sulla 443
L’installazione del servizio è terminata, per poterlo però testare è necessario creare un nuovo Virtual Host. Tale procedura verrà sviscerata nel dettaglio dal prossimo capitolo, in questo momento mi limiterò solamente ad elencare i passi necessari per testare il servizio https.
Creiamo all’interno della cartella /etc/apache2/sites-available un nuovo file dal nome default_ssh, ecco i dettagli:
NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin email@dominio.com ServerName nomeserver.dominio DocumentRoot /var/www/default_ssh SSLEngine on SSLOptions +StrictRequire SSLCertificateFile /etc/apache2/certificati/certificato1.pem <Directory /var/www/default_ssh> AllowOverride All Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/ssh_error.log CustomLog /var/log/apache2/ssh_access.log combined ServerSignature On </VirtualHost>
Come si può notare c’è il riferimento sia alla porta 443 che al certificato appena creato: certificato1.pem.
Ora è sufficiente creare la cartella /var/www/default_ssh e inserirvi un file index.html con questo contenuto:
<html> <body> <h1>SSH Works!</h1> </body> </html>
Aggiungiamo il virtual Host con il comando:
a2ensite /etc/apache/sites_available/default_ssh
seguito dal riavvio del servizio apache:
apache2ctl graceful
E’ ora possibile provare il nostro servizio http sicuro digitando da un browser:
https://indirizzo_server
Dopo aver accettato il certificato auto-firmato proposto siamo in grado di visualizzare la pagina bianca con il contenuto: SSH Works!
Serie GiBiLamp
< Vai all’articolo precedente nella serie GiBiLamp
Vai all’articolo successivo nella serie GiBiLamp >
2. Installiamo LAMP + V
Linux e Apache – LA
In questo articolo non mi soffermerò sulla fase di installazione del sistema operativo, sto solo ad indicare che fino ad ora con Ubuntu non ho mai avuto difficoltà di installazione del sistema o dei pacchetti necessari, quindi mi sento di consigliare questo sistema dato che ha una comunità molto vasta ed è quindi facile trovare la soluzione ai problemi che possono accadere durante le varie fasi di vita dei nostri servizi.
Il primo passo da fare è quello di installare il server web apache, per farlo è necessario impartire il comando:
-
apt-get install apache2
Già a questo livello c’è una scelta da fare, ovvero:
-
apache worker, ovvero con gestione multi-thread (il default proposto da Ubuntu)
-
apache prefork, ovvero con gestione uni-thread.
“Multi-thread” significa che ogni singola richiesta viene gestita da un thread e più thread compongono un processo; mentre “uni-thread” significa che ogni richiesta viene gestita da un unico thread in un unico processo.
In termini di prestazioni worker non è più veloce del prefork, ma è meno ingordo di risorse dato che non associa un processo per ogni richiesta; quindi scala meglio in caso di alto carico di lavoro.
Il problema è che non tutti i moduli vitali per un server web sono in grado di lavorare con tecnologia multi-thread; infatti durante l’installazione di alcuni moduli il sistema rimuove da solo il componente worker per far posto al prefork.
Il consiglio in questo caso è di lasciar scegliere il sistema; durante l’installazione di Apache verrà abilitato il worker, che poi con l’installazione di PHP verrà rimosso per lasciar spazio al prefork
Al servizio apache viene associato un utente ed un gruppo omonimi www-data ed una cartella di riferimento all’interno della quale inserire tutti i nostri siti:
/var/www
Dopo l’installazione di apache avremo quindi a disposizione:
-
cartella dei file di configurazione /etc/apache2
-
cartella dei file di log /var/log/apache2
-
document root dei siti /var/www
Apache di norma si mette in ascolto sulla porta 80, quindi se vogliamo verificare che il nostro web server funzioni correttamente è sufficiente da un browser qualunque digitare l’indirizzo IP della macchina su cui abbiamo installato apache, se vediamo una pagina bianca con l’eloquente scritta It works!, abbiamo fatto il primo passo.
-
Un web server che si rispetti non risponde solo sulla porta 80 (servizio http) ma anche sulla 443 (servizio https) che ha l’immenso vantaggio di cifrare il passaggio dei dati fra il client ed il server. E’ raccomandabile che i servizi di gestione – come per esempio phpMyAdmin – siano disponibili solo tramite https dato che i dati che vi transitano sono di una certa delicatezza.
Per abilitare questa funzionalità è necessario eseguire alcuni passi fondamentali:
-
abilitare il modulo apache ssl:
-
installando openssl tramite il comando apt-get install openssl
-
abilitando il modulo per apache: a2enmod ssl
-
riavviando il servizio apache (apache2ctl restart) per rendere disponibile il modulo ssl
-
-
creare un certificato da utilizzare nella fase di comunicazione sicura con i browser web. Ubuntu mette a disposizione una comoda applicazione per generare un certificato pem
-
installare make-ssl-cert con il comando apt-get install make-ssl-cert
-
creare a mano la cartella /etc/apache2/certificati
-
lanciare il comando:
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/certificati/certificato1.pem
Durante la fase di generazione del certificato ci verranno richieste delle informazioni riguardo la nostra attività, che devono essere compilate obbligatoriamente.
-
-
verificare che il file ports.conf presente in /etc/apache2 abbia le seguenti righe di configurazione:
<IfModule mod_ssl.c>
# NameVirtualHost statement here
Listen 443
</IfModule>
Ovvero che il modulo ssl risponda sulla 443
L’installazione del servizio è terminata, per poterlo però testare è necessario creare un nuovo Virtual Host. Tale procedura verrà sviscerata nel dettaglio dal prossimo capitolo, in questo momento mi limiterò solamente ad elencare i passi necessari per testare il servizio http over ssl.
Creiamo all’interno della cartella /etc/apache2/sites-available un nuovo file dal nome default_ssh, ecco i dettagli:
NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin email@dominio.com
ServerName nomeserver.dominio
DocumentRoot /var/www/default_ssh
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/apache2/certificati/certificato1.pem
<Directory /var/www/default_ssh>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/ssh_error.log
CustomLog /var/log/apache2/ssh_access.log combined
ServerSignature On
</VirtualHost>
Come si può notare c’è il riferimento sia alla porta 443 che al certificato appena creato: certificato1.pem
Ora è sufficiente creare la cartella /var/www/default_ssh e inserirvi un file index.html con questo contenuto:
<html><body><h1>SSH Works!</h1>
</body></html>
Aggiungiamo il virtual Host con il comando:
-
a2ensite /etc/apache/sites_available/default_ssh
seguito dal riavvio del servizio apache:
-
apache2ctl graceful
E’ ora possibile provare il nostro servizio http sicuro digitando da un browser:
-
https://indirizzo_server
Dopo aver accettato il certificato auto-firmato proposto siamo in grado di visualizzare la pagina bianca con il contenuto: SSH Works!