Im­ple­men­tan­do un reverse proxy come livello ag­giun­ti­vo di pro­te­zio­ne, è possibile mi­glio­ra­re la solidità della propria ap­pli­ca­zio­ne web e ridurre al minimo il rischio di attacchi. Il server HTTP Apache dispone di molti moduli ed esten­sio­ni che sup­por­ta­no varie funzioni di proxy. Nelle nostre istru­zio­ni ti spie­ghia­mo come impostare e con­fi­gu­ra­re un reverse proxy di Apache.

Che cos’è mod_proxy?

Apache è un noto e diffuso server web open source, uti­liz­za­to per fornire contenuti web su internet. È di­spo­ni­bi­le su molti sistemi operativi come Windows, Linux e macOS e può essere ampliato in modo fles­si­bi­le tramite plugin e moduli.

Il modulo mod_proxy dà la pos­si­bi­li­tà al server web Apache di agire come un reverse proxy, inol­tran­do le richieste a un altro server e re­sti­tuen­do la risposta al client. Questo è utile se, ad esempio, si dispone di diversi server web e si vuole di­stri­bui­re il carico tra di essi. In questo modo è possibile mi­glio­ra­re le pre­sta­zio­ni o costruire un’ar­chi­tet­tu­ra ad alta di­spo­ni­bi­li­tà.

Apache mod_proxy è composto da diversi moduli, ognuno con le proprie fun­zio­na­li­tà. Di seguito ti pre­sen­tia­mo alcuni dei moduli più im­por­tan­ti:

  • mod_proxy: fornisce la fun­zio­na­li­tà prin­ci­pa­le del reverse proxy e inoltra le richieste a un altro server.
  • mod_proxy_http: fornisce la fun­zio­na­li­tà proxy per i pro­to­col­li HTTP e HTTPS.
  • mod_proxy_ftp: fornisce funzioni proxy per il pro­to­col­lo FTP.
  • mod_proxy_connect: usato per con­nes­sio­ni criptate SSL.
  • mod_proxy_ajp: uti­liz­za­to per inoltrare le richieste ai server delle ap­pli­ca­zio­ni abilitati AJP.
  • mod_proxy_wstunnel: per l’uso di web socket.
  • mod_proxy_balancer: fornisce funzioni di load balancing.
  • mod_cache: supporta vari metodi di cache.
  • mod_headers: serve per la modifica delle righe di in­te­sta­zio­ne HTTP.
  • mod_deflate: comprime le risposte HTTP.
Consiglio

L’Hosting Linux di IONOS supporta una serie di moduli Apache che ti con­sen­to­no di con­fi­gu­ra­re in modo rapido ed efficace il reverse proxy di Apache. Ap­pro­fit­ta anche delle pre­sta­zio­ni fles­si­bi­li e scalabili, della pro­te­zio­ne DDoS e delle migliori fun­zio­na­li­tà PHP.

Con­fi­gu­ra­re un reverse proxy di Apache: guida

Questo tutorial pre­sup­po­ne che Apache sia già stato in­stal­la­to sul tuo sistema. Per in­for­ma­zio­ni det­ta­glia­te su come con­fi­gu­ra­re un server web Apache, consulta la nostra guida.

Primo passaggio: ag­gior­na­re l’indice del pacchetto

Per prima cosa è ne­ces­sa­rio ag­gior­na­re l’elenco dei pacchetti di­spo­ni­bi­li.

Inserisci il seguente comando nel terminale:

$ sudo aptitude update
shell

Quindi aggiorna i pacchetti in­stal­la­ti sul sistema:

$ sudo aptitude upgrade -y
shell

Secondo passaggio: scaricare gli strumenti di com­pi­la­zio­ne es­sen­zia­li

Suc­ces­si­va­men­te, in­stal­lia­mo Essential Build Tools. Si tratta di un gruppo di strumenti e librerie necessari per creare e compilare ap­pli­ca­zio­ni su Linux.

$ sudo aptitude install -y build-essential
shell

Terzo passaggio: in­stal­la­re i moduli e le di­pen­den­ze

Ora possiamo scaricare e in­stal­la­re i moduli e le librerie necessari per il reverse proxy di Apache.

$ sudo aptitude install -y libapache2-mod-proxy-html libxml2-dev
shell

Quarto passaggio: attivare i moduli

Prima di attivare le esten­sio­ni, occorre ve­ri­fi­ca­re che siano state in­stal­la­te cor­ret­ta­men­te. Il comando seguente mostra un elenco dei moduli di­spo­ni­bi­li:

$ a2enmod
shell
Immagine: Esecuzione di a2enmod
Comando a2enmod-nel terminale

Eseguendo il comando a2enmod ti viene chiesto quali moduli desideri in­stal­la­re. È possibile elencare le esten­sio­ni de­si­de­ra­te in un’unica riga:

$ proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html
shell

È anche possibile attivare ogni modulo sin­go­lar­men­te:

$ a2enmod proxy
$ a2enmod proxy_http
$ a2enmod proxy_ajp
$ a2enmod rewrite
$ a2enmod deflate
$ a2enmod header
$ a2enmod proxy_balancer
$ a2enmod proxy_connect
$ a2enmod proxy_html
shell

Alcuni moduli sono attivi per im­po­sta­zio­ne pre­de­fi­ni­ta. Con a2enmod ti assicuri che siano realmente abilitati.

Quinto passaggio: mo­di­fi­ca­re la con­fi­gu­ra­zio­ne pre­de­fi­ni­ta

Per im­ple­men­ta­re le funzioni proxy del server web Apache, è ne­ces­sa­rio mo­di­fi­ca­re il file di con­fi­gu­ra­zio­ne pre­de­fi­ni­to 000-default.conf nella directory /etc/apache2/sites-enabled.

$ nano /etc/apache2/sites-enabled/000-default.conf
shell

Abbiamo con­fi­gu­ra­to un host proxy virtuale con le esten­sio­ni mod_vir­tua­lho­st e mod_proxy. Puoi quindi adattare il codice in base alle tue esigenze.

<VirtualHost *:*>
        ProxyPreserveHost On
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example:
        ProxyPass / http://0.0.0.0/
        ProxyPassReverse / http://0.0.0.0/
        ServerName localhost
    </VirtualHost>
shell

Premi Ctrl + X e Y per salvare le modifiche e chiudere l’editor di testo.

Sesto passaggio: con­fi­gu­ra­re il load balancing

Se gestisci diversi server back end, ti con­si­glia­mo di di­stri­bui­re il carico uti­liz­zan­do il load balancing (in italiano tra­du­ci­bi­le come “bi­lan­cia­men­to del carico”).

Hai la pos­si­bi­li­tà di uti­liz­za­re il codice seguente come modello e di inserirlo nel file di con­fi­gu­ra­zio­ne standard:

<Proxy balancer://mycluster>
        # Define back-end servers:
        # Server 1
        BalancerMember http://0.0.0.0/
        # Server 2
        BalancerMember http://0.0.0.0/
    </Proxy>
    <VirtualHost *:*>
        # Apply VH settings as desired
        # However, configure ProxyPass argument to
        # use "mycluster" to balance the load
        ProxyPass / balancer://mycluster
    </VirtualHost>
shell

Settimo passaggio: impostare il supporto SSL

Se desideri uti­liz­za­re il pro­to­col­lo SSL sul server Apache per con­nes­sio­ni e cer­ti­fi­ca­ti criptati, devi abilitare un secondo host virtuale.

Listen 443
    NameVirtualHost *:443
    <VirtualHost *:443>
        SSLEngine On
        # Set the path to SSL certificate
        # Usage: SSLCertificateFile /path/to/cert.pem
        SSLCertificateFile /etc/apache2/ssl/file.pem
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example:
        ProxyPass / http://0.0.0.0/
        ProxyPassReverse / http://0.0.0.0/
        # Or, balance the load:
        # ProxyPass / balancer://balancer_cluster_name
    </VirtualHost>
shell

Ottavo passaggio: riavviare Apache

Al termine della con­fi­gu­ra­zio­ne devi riavviare il server web Apache in modo che le modifiche vengano applicate.

$ service apache2 restart
shell

Ora il reverse proxy di Apache dovrebbe inoltrare le richieste ai server back end.

Vai al menu prin­ci­pa­le