Apache2 como proxy inverso
Descarga el siguiente fichero donde encontrarás un escenario vagrant y una receta ansible para configurar el siguiente escenario:
- Una máquina “proxy” conectada al exterior y a una red interna.
- Una máquina “servidorweb” conectada a la red interna.
En la máquina “servidorweb” tenemos instalado un apache2 con dos virtualhost. Suponemos que no podemos acceder a ella por la red de mantenimiento, por lo tanto lo que tienes que hacer es lo siguiente:
- Crea el escenario vagrant y pasa el ansible para configurar la máquina “servidorweb”.
- Instala un servidor web apache2 en la máquina proxy.
- Configura el proxy para acceder a las páginas del “servidorweb”:
- Opción 1: Para que se acceda a la primera página con la URL
www.app1.org
y a la segunda página con la URLwww.app2.org
. - Opción 2: Para que se acceda a la primera página con la URL
www.servidor.org\app1
y a la segunda página con la URLwww.servidor.org\app2
.
- Opción 1: Para que se acceda a la primera página con la URL
Tras crear el escenario y pasar el ansible, accedemos a la máquina proxy e instalamos el servidor apache2:
apt install apache2
Ahora vamos a configurar el servidor para cada una de las dos opciones:
Opción 1: Para que se acceda a la primera página con la URL www.app1.org
y a la segunda página con la URL www.app2.org
.
Para ello, en primer lugar debemos habilitar los módulos en apache2 para que funcione como proxy inverso:
a2enmod proxy proxy_http
Ahora vamos a crear dos nuevos virtualhosts en la máquina proxy, uno para cada página, con la siguiente configuración:
- Para
www.app1.org
:
<VirtualHost *:80>
ServerName www.app1.org
ProxyPass / "http://interno.example1.org/"
ProxyPassReverse / "http://interno.example1.org/"
</VirtualHost>
- Para
www.app2.org
:
<VirtualHost *:80>
ServerName www.app2.org
ProxyPass "/" "http://interno.example2.org/"
ProxyPassReverse "/" "http://interno.example2.org/"
</VirtualHost>
Habilitamos los dos vitualhosts que acabamos de crear y reiniciamos el servicio de apache2:
a2ensite www.app1.org.conf www.app2.org.conf
systemctl reload apache2
Ya solo queda configurar la resolución estática de nombres en la máquina proxy
y en el anfitrión:
- En la máquina
proxy
:
cat /etc/hosts
127.0.0.1 localhost
127.0.0.2 bullseye
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 proxy proxy
10.0.0.6 interno.example1.org interno.example2.org
- En el anfitrión:
cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 debian
192.168.121.62 www.app1.org www.app2.org
Con esto, ya podemos acceder a ambas páginas desde el anfitrión:
www.app1.org
:
www.app2.org
:
Opción 2: Para que se acceda a la primera página con la URL www.servidor.org\app1
y a la segunda página con la URL www.servidor.org\app2
.
Primero, debemos habilitar si no lo están ya, los siguientes módulos de apache en la máquina proxy
:
a2enmod proxy proxy_http
Ahora vamos a crear un virtualhost en el que configuraremos el proxy para las dos páginas. La configuración será la siguiente:
<VirtualHost *:80>
ServerName www.servidor.org
<Location "/app1">
ProxyPass "http://interno.example1.org/"
ProxyPassReverse "http://interno.example1.org/"
</Location>
<Location "/app2">
ProxyPass "http://interno.example2.org/"
ProxyPassReverse "http://interno.example2.org/"
</Location>
</VirtualHost>
Habilitamos el virtualhost y reiniciamos el servicio de apache2:
a2ensite www.servidor.org.conf
systemctl reload apache2
Ahora añadimos la resolución de nombres en el fichero /etc/hosts
, tanto del anfitrión como de la máquina proxy
:
- En la máquina
proxy
:
cat /etc/hosts
127.0.0.1 localhost
127.0.0.2 bullseye
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 proxy proxy
10.0.0.6 interno.example1.org interno.example2.org
- En el anfitrión:
cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 debian
192.168.121.62 www.servidor.org
Con esto, ya podemos acceder a las páginas a través de los nuevos enlaces:
www.servidor.org/app1
:
www.servidor.org/app2
: