Módulo Proxy en Apache 2.4
Sumario
Introducción
Un servidor proxy é unha interfaz de comunicación nunha rede que recibe as peticións e transmíteas en calidade de representante a un equipo de destino. Este funconamento é comun en redes corporativas para que os dispositivos cliente teñan un acceso controlado a Internet. O servidor configurado como proxy presentase neste caso como a única posibilidade de conexión coa rede pública no que se coñece coma un proxy de reenvío (forward proxy).
A diferencia do proxy de reenvío que protexe os dispositivos cliente nunha rede das influencias procedentes de Internet, un proxy inverso traballa de modo que as protexa en sentido oposto; un ou varios servidores web activan un servidor proxy de tales características como compoñente de seguridade adicional para que poida encargarse das solicitudes procedentes de Internet e transmitilas a un servidor backend en segundo plano.
Os proxy inversos adoitan estar instalados nunha rede privada ou nunha zona desmilitarizada (DMZ) e estar protexidos por un firewall; de este xeito o servidor proxy inverso do mesmo modo que o servidor forward ou de reenvío representa a única conexión entre Internet e a rede privada.
Posibles vantaxes do uso dun proxy inverso:
- Anonimización
- Protección e cifrado
- Balanceo de carga
- Caché
- Compresión
Instalación
Instalación:
sudo apt-get install libapache2-mod-proxy-html
Habilitación:
sudo a2enmod proxy proxy_http
Cómpre reiniciar o servizo tras o cambio:
sudo apache2 reload
Configuración
No ficheiro de configuración do virtual host cambiar seguindo o siguiente esquema:
<VirtualHost *:80> ServerName exemplo.com ServerAlias www.exemplo.com ProxyRequests Off ProxyPass / http://123.45.67.89/ ProxyPassReverse / http://123.45.67.89/ </VirtualHost>
Explicación das directivas:
- ProxyRequest: a directiva ProxyRequests co argumento Off impide que se utilice o servidor Apache HTTP como proxy forward ou de reenvío para evitar posibles abusos.
- ProxyPass: a directiva ProxyPass define o enderezo de destino para os reenvíos. O servidor proxy inverso reenviará todas las peticiones dirixidas o enderezo depositdao baixo a etiqueta ServerName ó enderezo interno consignado no argumento da directiva ProxyPass. No exemplo trataríase da IP 123.45.67.89.
- ProxyPassReverse: un proxy server non se ocupa so das peticións; tamen transmite os paquetes de respuesta do servidor backend ós clientes. Para impedir que ditas respuestas se entreguen con datos de encabezado que non sexan correctos (cos datos do servidor nun segundo plano), a directiva ProxyPassReverse transcribe o encabezamiento das respuestas do servidor de tal xeito que estas se adapten ó servidor proxy, garantindo que o servidor backend permanece anónimo.
A continuación habilitar o sitio:
sudo a2ensite exemplo.conf
Uso
No exemplo anterior o servidor Apache HTTP será capaz de recibir todas as peticións realizadas a exemplo.com ou www.exemplo.com e de dirixilas en forma de solicitudes proxy a un servidor backend co enderezo IP 123.45.67.89; ahora teríamos que ter un servidor backend responden nesa ip.
Solucionando complicacións
Para evitar problemas coas rutas HTML e a compresión, deberíamos habilitar:
a2enmod headers
E unha posible configuración sería:
ProxyPass "/web/" "http://interno.exemplo.org/" ProxyPassReverse "/web/" "http://interno.exemplo.org/" ProxyHTMLURLMap http://interno.exemplo.org /web <Location /web/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /web/ RequestHeader unset Accept-Encoding </Location>
Referencias
- http://httpd.apache.org/docs/current/mod/mod_proxy.html
- https://plataforma.josedomingo.org/pledin/cursos/apache24/curso/u32/
- https://www.josedomingo.org/pledin/2018/02/configuracion-de-un-proxy-inverso-con-apache-2-4/
- https://www.ionos.es/digitalguide/servidores/know-how/que-es-un-servidor-proxy-inverso/
- https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=19709