Sto lavorando all’integrazione tra due enti pubblici per la notifica punto – punto di avvio di una procedura. Qui di seguito riassumo un how to che mi è servito a configurare Apache e Mirth in modo tale che quest’ultimo, girando in locale, scriva i risultati di una interrogazione del database su un end-point pubblico.
Il problema che risolve è: raggiungere l’end-point con il protocollo HTTPS quando, nella versione Open, Mirth ha soltanto un canale di scrittura su HTTP.
Realizzo questo funzionamento usando i reverse Proxy di Apache.
Sommario
Forward e Reverse Proxy
Apache può essere configurato sia in modalità proxy diretta (o in avanti) che inversa (o all’indietro). Per leggere l’articolo completo, fare riferimento al sito Apache.
Forward Proxy
Un proxy diretto (ordinario, o in avanti) è un server intermedio che si trova tra il client e il server di origine. Al fine di ottenere contenuti dal server di origine, il client invia una richiesta al proxy server usando la denominazione di origine come obiettivo e il proxy richiede poi il contenuto dal server di origine e lo restituisce al client. Il client deve essere appositamente configurato per utilizzare il proxy in avanti per accedere ad altri siti.
Un utilizzo tipico di un proxy in avanti è quello di fornire accesso a Internet a client interni che altrimenti sarebbero individualmente bloccati da un firewall.
Il proxy in avanti può anche utilizzare la cache (grazie al modulo aggiuntivo di Apache mod_cache) per ridurre l’utilizzo della rete. Il proxy in avanti si attiva usando la direttiva ProxyRequests. Poiché i proxy diretti consentono ai client di accedere a siti arbitrari sul server nascondendo la loro vera origine[1], è essenziale che voi assicuriate il vostro server in modo che solo i client autorizzati possano accedere al proxy prima di effettuare un proxy in avanti.
Reverse Proxy
Un reverse proxy, al contrario, appare al client come un web server normale. Nessuna configurazione speciale è necessaria sul client. Il client effettua richieste ordinarie per i contenuti in spazio-nomi del reverse proxy. Il reverse proxy decide dove inviare tali richieste, e restituisce il contenuto come se fosse l’origine. Un utilizzo tipico di un proxy inverso è quello di fornire accesso a Internet agli utenti di un server che si trova dietro un firewall.
Un reverse proxy può essere utilizzato anche per bilanciare il carico tra più server back-end, o per fornire la cache per un server di back-end più lento.
Semplici Esempi
Gli esempi che seguono rappresentano solo l’idea di fondo per aiutarvi a partire. Leggete la documentazione per le singole direttive. Inoltre, se volete usare la cache, consultate la documentazione di mod_cache.
Forward Proxy
ProxyRequests On ProxyVia On Order deny,allow Deny from all Allow from internal.example.com
Reverse Proxy
ProxyRequests Off Order deny,allow Allow from all ProxyPass /foo http://foo.example.com/bar ProxyPassReverse /foo http://foo.example.com/bar
Tentativi per capire
Ho abilitato i moduli per il ReverseProxy; per fare ciò si aggiunge ai mods-enabled i moduli che si desiderano:
root@jsbach:/etc/apache2# cd mods-enabled/ root@jsbach:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.conf . root@jsbach:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.load .
Ora, avevo la possibilità di intervenire nel file proxy.load
per configurare, ma l’ho fatto in conf.d
; infatti, in /etc/apache2/apache2.conf
c’è la riga:
# Include generic snippets of statements Include conf.d/
che include nel file di configurazione tutti i file sotto conf.d
. Io ho creato un file rproxy.conf
:
# prova reverse proxy Order deny,allow Allow from all ProxyPass /inps https://blabla.it/TCW/services/InvioCertificato ProxyPassReverse /inps https://blabla.it/TCW/services/InvioCertificato
Occorre riavviare Apache:
# apache2ctl configtest Syntax OK # apache2ctl restart
Problema
Richiamando la pagina http://jsbach/inps
ho Errore 500. Nel file /var/log/apache2/error.log
si legge
[Mon Jun 20 16:53:39 2011] [warn] proxy: No protocol handler was valid for the URL /inps. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Non c’è un protocollo disponibile per trattare la richiesta. In effetti, Apache deve reindirizzare la richiesta verso una connessione HTTPS. A questo punto è sufficiente abilitare il motore SSL; quindi, riassumendo, il file di configurazione è il seguente:
# prova reverse proxy Order deny,allow Allow from all SSLProxyEngine On ProxyPass /inps https://blabla.it/TCW/services/InvioCertificato ProxyPassReverse /inps https://blabla.it/TCW/services/InvioCertificato
Il risultato è illustrato in figura:
Commenti recenti