Skip to main content

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:

  1. apache worker, ovvero con gestione multi-thread (il default proposto da Ubuntu)
  2. 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:

  1. apache worker, ovvero con gestione multi-thread (il default proposto da Ubuntu)

  2. 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.

  1. 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!