pablokbs / peladonerd

Repo con los archivos que uso para mi videos en youtube
2.04k stars 1.33k forks source link

Reverse proxy de un reverse proxy #131

Closed moracabanas closed 3 years ago

moracabanas commented 3 years ago

Buenas tardes pelado, definitivamente estoy emprendiendo en mi carrera de SRE sobre todo gracias a tu contenido. Esta pregunta no tiene que ver ligeramente con con este proyecto, deriva de la idea de usar un reverse proxy con letsencrypt para facilmente servir tus deployments.

Actualmente en una parte de nuestra produccion estoy usando un docker swarm con traefik como loadbalancer y reverse proxy. Esto fue una evolucion desde que aprendi a usar Nginx en tus videos para este cometido.
El cambio me hace muy facil acoplar nuevos stacks con https ya que necesitaba encontrar una solucion para definir varios virtualhost de un mismo servicio que expone mas de un puerto.

El caso es que algunas imagenes como por ejemplo bitnami/joomla (doc) tienen su propio apache corriendo en ese mismo servicio. Este tipo de imagenes que tienen su propio apache o nginx son un dolor. No me esta siendo posible hacer un "reverse proxy de un reverse proxy" no sé cual es la practica adecuada para manejar este tipo de contenedores. Aqui un ejemplo

internet ---- > 80/443 [ Traefik ] -----> servicio -----> Apache | X no pasas de aquí X | ---- Joomla

Si bien traefik consigue alcanzar el servicio que yo quiero en el dominio que yo quiero y con SSL, de repente te encuentras con que apache no te deja pasar, su configuracion por defecto te bloquea y no es facil hacer override de esto.

La documentacion de bitnami te anima a crear tu propia configuracion de virtualhosts que montas (o en mi caso acoplo al stack con docker configs). El problema es que creo que necesito una configuracion adecuada htaccess y es tan críptico que me quiero tirar por un puente.

Como ejemplo pongo a funcionar un stack de este joomla por defecto le doy a dominio-que-quiero.com

Los logs de el apache me devuelven

www.example.com:8443:0 server certificate does NOT include an ID which matches the server name

la verdad no aprendí apache, tengo una ligera idea de cómo va pero no sé dónde preguntar respecto a este problema de múltiples proxys.

Si pregunto en apache me dicen "esto no es docker" si pregunto en traefik me dicen "esto no es apache" y si pregunto en docker me contestan "qué es apache??"😂

Alguien me comentó que tengo que reescribir las peticiones al upstream

Gracias por tu ayuda, por tu contenido y por tu aporte a la comunidad!

moracabanas commented 3 years ago

Bueno encontré la solución!

Segun la documentacion de bitnami los containers con Apache por defecto tienen su configuracion de vhosts en /opt/bitnami/apache/conf/vhosts/

Para agregar tu propia configuracion de vhosts te animan a añadir tu archivo a la ruta /vhosts. Yo lo que hago es crear una docker config y agregarsela al servicio con el target /vhosts/my_vhost.conf esto me resulta muy util para poder editar facilmente este virtual host sin intervenir ni hacer cosas raras con el container. Ademas de que es muy facil crear nuevas configuraciones desde Swarmpit y hacer un swap de ellas cuando lo necesitas!

my_vhost.conf

<VirtualHost *:8080>
  ServerName midominio.com
  DocumentRoot /opt/bitnami/joomla
  <Directory "/opt/bitnami/joomla">
    Options -Indexes +FollowSymLinks -MultiViews
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

Mi problema fue que había configurado el puerto 80 para el servicio en traefik, pero en realidad es el 8080 el que está expuesto.

Muchas gracias por todo tu contenido!