Creamos un fichero de nombre docker-compose.yaml en el que definimos los contenedores que existirán en el escenario, dos para la aplicación joomla y otros dos para nextcloud (base de datos y aplicación):
Levantamos el escenario que acabamos de definir:
Comprobamos que las aplicaciones se están sirviendo en los puertos 8081 y 8082 respectivamente, sin hacer todavía ningún proxy inverso:
Una vez que son accesibles, es hora de generar dos nuevos VirtualHost en los que haremos proxy inverso desde dos nombres de dominio distintos para acceder a dichas aplicaciones (www.app1.org y www.app2.org):
Habilitamos dichos VirtualHost creando los correspondientes enlaces simbólicos:
Modificamos el fichero de resolución estática de nombres /etc/hosts para poder acceder a través de las cabeceras de las peticiones HTTP a los VirtualHost:
Si tratamos de acceder ahora a www.app1.org y www.app2.org, respectivamente, podremos apreciar lo siguiente:
Ahora, en lugar de utilizar dos VirtualHost (uno para cada aplicación), vamos a utilizar el mismo para ambas (www.servidor.org), diferenciándolas mediante la ruta que solicitamos tras la /, de manera que es hora de generar un nuevo VirtualHost con dichas características:
Habilitamos el VirtualHost creando el correspondiente enlace simbólico:
Modificamos el fichero de resolución estática de nombres /etc/hosts para poder acceder a través de las cabeceras de las peticiones HTTP al VirtualHost:
Si tratamos de acceder ahora a www.servidor.org/app1 y www.servidor.org/app2, respectivamente, podremos apreciar lo siguiente:
El proxy inverso ha funcionado correctamente, sin embargo, al estar haciendo uso de Docker y de rutas virtuales para acceder a las aplicaciones, el contenido estático no se está sirviendo como debería, ya que no es capaz de encontrarlo en la ruta especificada.
Existen determinadas aplicaciones que vienen preparadas para, mediante variables de entorno, indicarles desde dónde se pretende acceder a las mismas, y por tanto, permiten servir el contenido estático sin mayor complicación, pero este no es el caso.