Instale Discourse em uma internet residencial com Cloudflare Tunnel

yo @Falco, o real_ip (fornecido pelo cf como cabeçalho CF-Connecting-IP) está chegando para você nos logs do nginx? não está para mim. eu só vejo o ip do cloudflared.

eu acho que uma ou ambas as coisas precisam ser feitas (vou acompanhar após a investigação):

  • adicionar uma linha de configuração set_real_ip_from ao nginx para o ip do cloudflared. se esse for o problema, então eu acho que nenhuma das outras linhas set_real_ip_from (fornecidas por templates/cloudflare.template.yml) são necessárias para usuários do argotunnel. e neste caso, talvez um template separado do argotunnel deva ser adicionado ao repositório docker que puxa o seu ip do cloudflared de uma variável de ambiente ou algo assim no seu app.yml principal.
  • corrigir o log_format. eu acho que isso provavelmente não é o problema, embora. confirmado desnecessário

edit:
aqui está o que estou fazendo para fazer funcionar:

não use o template do cloudflare. não tem sentido.
em vez disso, mescle isso no seu app.yml:

hooks:
  after_web_config:
    - file:
        path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
        contents: |
          # restaurar ips originais do visitante (ngx_http_realip_module)
          set_real_ip_from 10.100.20.200/32; # seu range de ip do cloudflared/argotunnel
          real_ip_header CF-Connecting-IP;

isso automaticamente acaba no contexto http do nginx, o que é apropriado.

ps: na minha opinião, para limpeza, o template do cloudflare também deveria gerar sua configuração nginx em um arquivo separado em vez de usar sed -i para adicioná-la a /etc/nginx/conf.d/discourse.conf.

1 curtida