Apache HTTP server è uno dei più popolari server web. Apache è un applicativo cross-platform ed ha un codice sorgente aperto.
Quando si amministrano server web, le chance di imbattersi in Apache sono davvero alte, data la sua grande fetta di mercato.
Uno dei task in cui ci si imbatterà più e più volte è quello di impostare il redirect del traffico HTTP verso un più sicuro HTTPS. Questo permette di ottenere un aumento della sicurezza del traffico da e verso il proprio web server in quanto richieste e risposte non avverranno più in plaintext, ma verranno crittate utilizzando TLS/SSL.
Qui di seguito vediamo due modi per eseguire il redirect da HTTP a HTTPS.
Redirect da HTTP a HTTPS usando Virtual Host
I Virtual Host di Apache permettono la configurazione di multipli domini sullo stesso web server. Nelle specifiche di ogni Virtual Host è possibile indicare la document root del sito web, creare policy di sicurezza, specificare il certificato SSL da utilizzare, nonché configurare il redirect del traffico.
Tipicamente, quando si ha un certificato SSL installato su un dominio, saranno presenti due direttive Virtual Host per quel dominio. La prima per il traffico HTTP, ossia quello indirizzato verso la porta 80, il secondi per il traffico HTTPS indirizzato verso la porta 443. In Ubuntu e più in generale nelle distribuzioni basate su Debian i file sono memorizzati nella directory.
/etc/apache2/sites-available
Per reindirizzare il traffico ad HTTPS utiliziamo la direttiva Redirect così come da codice qui sotto.
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
ServerName example.com
ServerAlias www.example.com
Protocols h2 http/1.1
Redirect permanent / https://example.com/
# SSL Configuration
# Other Apache Configuration
Una volta salvata la configurazione del Virtual Host, è necessario riavviare il servizio di Apache.
sudo systemctl reload apache2
Redirect da HTTP a HTTPS usando .htaccess
.htaccess è un file di configurazione a livello di singola directory per i web server Apache.
Questo file può essere utilizzato per definire come Apache mette a disposizione i file contenuti nella directory dove il file .htaccess è collocato ed abilita o disabilita features aggiuntive.
Generalmente il file .htaccess è collocato nella root directory del sito web, ma si possono avere ulteriori file .htaccess anche nelle sue sottocartelle.
Questo metodo richiede il modulo mod_rewrite abilitato sul server Apache. Generalmente questo modulo è abilitato di default sulla maggior parte dei server. Benché questo metodo sia perfettamente funzionante, è comunque preferibile configurare un redirect del traffico a livello di Virtual Host in quanto più facile e sicuro.
Qui di seguito un esempio di file .htaccess da collocare nella root folder del proprio sito web.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
Questa seconda versione invece reindirizza anche tutte le richieste che iniziano con www. Utilizzarla per reindirizzare tutti i visitatori verso la versione HTTPS e non www del sito.
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]