Instalar Discourse en una internet residencial con Cloudflare Tunnel

yo @Falco, ¿la real_ip (proporcionada por cf como encabezado CF-Connecting-IP) te llega en los logs de nginx? a mí no. solo veo la IP de cloudflared.

creo que hay que hacer una o ambas de estas cosas (haré seguimiento después de investigar):

  • añadir una línea de configuración set_real_ip_from a nginx para la IP de cloudflared. si ese resulta ser el problema, entonces supongo que ninguna de las otras líneas set_real_ip_from (proporcionadas por templates/cloudflare.template.yml) son necesarias para los usuarios de argotunnel. y en este caso, tal vez se debería añadir una plantilla separada de argotunnel al repositorio de docker que obtenga tu IP de cloudflared de una variable de entorno o algo en tu app.yml principal.
  • corregir el log_format. creo que esto probablemente no sea el problema, sin embargo. confirmado que no es necesario

editar:
esto es lo que estoy haciendo para que funcione:

no uses la plantilla de cloudflare. no tiene sentido.
en su lugar, fusiona esto en tu app.yml:

hooks:
  after_web_config:
    - file:
        path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
        contents: |
          # restaurar IPs originales de visitantes (ngx_http_realip_module)
          set_real_ip_from 10.100.20.200/32; # tu rango de IP de cloudflared/argotunnel
          real_ip_header CF-Connecting-IP;

eso termina automáticamente en el contexto http de nginx, por cierto, lo cual es apropiado.

pd: en mi opinión, para mayor limpieza, la plantilla de cloudflare también debería generar su configuración de nginx en un archivo separado en lugar de usar sed -i para añadirla a /etc/nginx/conf.d/discourse.conf.

1 me gusta