Introduzione

Il server HTTP Apache è uno dei server Web più popolari al mondo. È un server HTTP open source e multipiattaforma che alimenta una grande percentuale dei siti Web di Internet. Apache offre molte potenti funzionalità che possono essere estese tramite moduli aggiuntivi.

Se sei il proprietario di un sito Web o un amministratore di sistema, è probabile che tu abbia a che fare con Apache regolarmente. Una delle attività più comuni che probabilmente eseguirai è il reindirizzamento del traffico HTTP alla versione protetta (HTTPS) del tuo sito web.

A differenza di HTTP, dove le richieste e le risposte vengono inviate e restituite in testo normale, HTTPS utilizza TLS / SSL per crittografare la comunicazione tra il client e il server.

I vantaggi dell'utilizzo di HTTPS su HTTP sono numerosi:

  • Tutti i dati sono crittografati in entrambe le direzioni. Di conseguenza, le informazioni sensibili non possono essere lette se intercettate.
  • Google Chrome e tutti gli altri browser popolari contrassegneranno il tuo sito Web come sicuro.
  • HTTPS consente di utilizzare il protocollo HTTP / 2, che migliora significativamente le prestazioni del sito.
  • Google preferisce i siti Web HTTPS. Il tuo sito si posizionerà meglio se offerto tramite HTTPS.

Questa guida spiega come reindirizzare il traffico HTTP su HTTPS in Apache.

Esistono diversi modi per reindirizzare a HTTPS in Apache. Se si dispone dell'accesso root al server Linux su cui è in esecuzione Apache, il modo preferito è impostare il reindirizzamento nel file di configurazione dell'host virtuale del dominio. Altrimenti, puoi impostare il reindirizzamento nel file .htaccess del dominio .
Alcuni pannelli di controllo, come cPanel, consentono di forzare il reindirizzamento HTTPS con pochi clic del mouse.

Reindirizzare HTTP a HTTPS utilizzando Virtual Host

Apache Virtual Hosts definisce le impostazioni di uno o più domini ospitati sul server. Nella direttiva host virtuale, è possibile specificare la root del documento del sito (la directory che contiene i file del sito Web), creare una politica di sicurezza separata per ciascun sito, utilizzare certificati SSL diversi, configurare il reindirizzamento e molto altro.

In genere quando un certificato SSL è installato su un dominio, avrai due direttive host virtuali per quel dominio. Il primo per la versione HTTP del sito sulla porta 80 e l'altro per la versione HTTPS sulla porta 443.

Nelle distribuzioni basate su Red Hat come CentOS e Fedora, i file host virtuali sono archiviati in /etc/httpd/conf.d. Su Debian e sui suoi derivati ​​come Ubuntu i file sono archiviati nella directory /etc/apache2/sites-available.

Per reindirizzare un sito Web su HTTPS, utilizzare la direttiva Redirect come mostrato nell'esempio seguente:

<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http:/1.1

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

Spieghiamo il codice. Stiamo utilizzando due host virtuali, una per HTTP e una per la versione HTTPS del sito.

  • VirtualHost *:80 - Il server Apache è in attesa di connessioni in entrata sulla porta 80 (HTTP) per il dominio specificato.
  • VirtualHost *:443 - Il server Apache è in ascolto delle connessioni in entrata sulla porta 443 (HTTPS) per il dominio specificato.

Le direttive ServerName e ServerAlias specificano i nomi di dominio dell'host virtuale. Assicurati di sostituirlo con il tuo nome di dominio.

La riga, Redirect permanent / https://example.com/ all'interno dell'host virtuale HTTP, reindirizza il traffico alla versione HTTPS del sito.

In genere si desidera anche reindirizzare la versione HTTPS www del sito su non-www o viceversa. Ecco una configurazione di esempio:

<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http:/1.1

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

Il codice all'interno dell'host virtuale HTTPS controlla se l'intestazione della richiesta contiene il dominio www e reindirizza alla versione non www.

Ogni volta che si apportano modifiche ai file di configurazione, è necessario riavviare o ricaricare il servizio Apache per rendere effettive le modifiche:

Debian e Ubuntu:

sudo systemctl reload apache2 

CentOS e Fedora:

sudo systemctl reload httpd 

Reindirizzare HTTP a HTTPS utilizzando .htaccess

.htaccess è un file di configurazione in base alla directory per il server web Apache. Questo file può essere utilizzato per definire il modo in cui Apache serve i file dalla directory in cui si trova il file e per abilitare / disabilitare funzionalità aggiuntive.

Di solito, il file .htaccess viene inserito nella directory principale del dominio, ma è possibile avere altri file .htaccess nelle sottodirectory.

Questo metodo richiede che il modulo mod_rewrite sia caricato sul server Apache. Questo modulo è caricato di default sulla maggior parte dei server. Se possibile, preferisci creare un reindirizzamento nell'host virtuale perché è più semplice e sicuro.

Per reindirizzare tutto il traffico HTTP su HTTPS, apri il file .htaccess root e aggiungi il seguente codice:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

Ecco cosa significa il codice:

  • RewriteEngine On - abilita le funzionalità di riscrittura.
  • RewriteCond %{HTTPS} off - verifica la connessione HTTP e, se la condizione è soddisfatta, viene eseguita la riga successiva.
  • RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]- reindirizzare HTTP a HTTPS con il codice di stato 301 (spostato permanentemente). Assicurati di cambiare il nome del dominio.

L'esempio seguente presenta una condizione aggiuntiva che controlla se la richiesta inizia con www. Usalo per forzare tutti i visitatori a utilizzare la versione HTTPS del sito non www:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

Quando si modifica il file .htaccess, non è necessario riavviare il server poiché Apache legge il file su ogni richiesta.

Conclusione

In Apache, il modo preferito per reindirizzare HTTP a HTTPS è configurare il reindirizzamento 301 nell'host virtuale del dominio.