La pagina sorgente di questi appunti è questa
Si raccomanda di eseguire anche la parte (sempre in questa pagina di secure your server), i proxy aperti possono essere molto pericolosi.
Il modulo fa da proxy o da gateway. Implementa le funzionalità da FTP, CONNECT (for SSL), HTTP/0.9, HTTP/1.0, and HTTP/1.1.
Ci sono diversi moduli oltre al mod_proxy, vi si trova anche mod_proxy_http, mod_proxy_ftp and mod_proxy_connect. In questo modo si possono caricare dinamicamente solo alcuni moduli usando la direttiva LoadModule.
C'è anche il modulo mod_cache che fornisce le funzionalità di caching insieme ad altri moduli relativi. Per contattare server remoti usando ssl/tls si usa mod_ssl.
Ognuno ha la sua pagina di configurazione
apt-get install libapache2-mod-proxy-html
a2enmod proxy
a2enmod proxy_connect
a2enmod proxy_http
Problema in redhat/centos 6
C'è una specie di impostazione di sicurezza che impedisce il proxy dando come errore qualcosa del tipo
Permission denied: proxy: HTTP: attempt to connect to
per risolvere bisogna lanciare questo comando
/usr/sbin/setsebool httpd_can_network_connect true
Con il comando sopra al riavvio però si perde l'impostazione per renderla permanente bisogna aggiungere l'opzione -P
setsebool -P httpd_can_network_connect on
Forward and Reverse Proxies
Queste sono le due modalità di configurazione di apache.
Forward proxy è un sito intermediario tra il client e il sito destinatario. Il client manda una richiesta al proxy, questo manda una richiesta al sito destinatario e restituisce la richiesta al client.
Un uso tipico è quello di fornire un accesso ai client che hanno qualche limitazione di firewall. Il forward proxy può usare mod_cache per ridurre l'uso della network.
Nelle impostazioni del client (il browser di solito) si deve specificare la connessione.
Il forward proxy viene attivato usando la direttiva ProxyRequest. Dato che i forward proxy permette ai client di connettersi ad altri server nascondendo la loro origine bisogna stare attenti a securizzare la cosa.
Il REVERSE proxy invece è trasparente, il client non si accorge nemmeno che questo stia avvenendo.
Usi tipici del reverse proxy sono fornire connettività a siti bloccati da fw, bilanciare il carico, fare caching per servizi lenti, raggruppare più server sotto la stessa url.
Un revers proxy viene attivato tramite la direttiva ProxyPass o attraverso il flag nella direttiva RewriteRule. Non è necessario mettere ad on ProxyRequest per configurare il reverse proxy.
Basic Examples
Ecco un esempio di forward proxy. Ovviamente Allow from all è molto pericolo.
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
Servername testsuvpn.com
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
Ecco un esempio di reverse proxy trasparente. In questo modo accediamo a un sito che sta sulla porta 8080 attraverso la porta 80.
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
Servername testsuvpn.com
ServerAlias test.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
##### questa direttiva serve per preservare le url
ProxyPreserveHost On
###################
ProxyPass /myapp http://localhost:8080/myapp
ProxyPassReverse /myapp http://localhost:8080/myapp
Combinazione proxy pass e virtual host. Attenzione che va in ordine di inserimento quindi se inserisco prima il / prenderà tutto e non arriverà mai a /app1
<VirtualHost *>
ServerName nomeserver.nomedominio.com
ProxyPass /app1 http://192.168.3.14:8080/app1
ProxyPassReverse /app1 http://192.168.9.14:8080/app1
ProxyPass /app2 http://192.168.9.14:8080/app2
ProxyPassReverse /app2 http://192.168.9.14:8080/app2
ProxyPass /app3 http://192.168.9.14:8080/app3
ProxyPassReverse /app3 http://192.168.9.14:8080/app3
ProxyPass / http://192.168.9.14:8081/
ProxyPassReverse / http://192.168.9.14:8081/
ErrorLog /var/log/sites/nomeapp-error_log
CustomLog /var/log/sites/nomeapp-access_log common
</VirtualHost>
Proxy e Alias
Se dobbiamo fare in modo che un apache oltre a fare ProxyPass serva anche alcune pagina dobbiamo definire un alias. Il problema è che il proxy pass ha sempre la precedenza rispetto all'alias indipendentemente dalla posizione nel file di configurazione. Per risolvere questo problema dobbiamo dire al proxy pass di non risolvere questo tipo di url e quindi dopo che lui la scarta l'Alias funzionerà
Alias "/gis" "/var/www/gis/"
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /gis !
ProxyPass /app http://127.0.0.1:8180/app
ProxyPassReverse /app http://127.0.0.1:8180/app
If you want to proxy ssl websites you need to have the directive SSLProxyEngine
ProxyPass /tab/admin/systeminfo https://tab.mydomain.com/admin/systeminfo
ProxyPassReverse /tab/admin/systeminfo https://tab.mydomain.com/admin/systeminfo
SSLProxyEngine on
and probably but not sure
sudo a2enmod ssl
sudo a2enmod proxy_balancer