Sugestão para template do Cloudflare para obter IP real dos usuários

Olá a todos,

Acabei de descobrir da maneira mais difícil sobre a configuração real_ip_header CF-Connecting-IP; do Cloudflare no nginx…

Tenho uma configuração bastante complicada com o nginx proxy manager dentro de sua própria imagem docker (estou usando o SWAG do linuxserver.io, que é incrível, aliás), então o caminho da conexão fica assim:
Usuário -> Cloudflare -> Servidor (1º container docker: Nginx -> 2º container docker: Discourse)

Tenho ambos os containers docker na mesma rede docker, então eles se comunicam; isso está tudo bem.
Tive um problema real tentando obter o IP de origem do usuário nos logs do Discourse. Li todos os ótimos tópicos aqui e adicionei o template do cloudflare ao meu arquivo app.yml, mas ainda não funcionou…

Depois de arrancar os cabelos, percebi que o problema não era o template do Cloudflare em si, mas o fato de que o container do Discourse estava recebendo o endereço IP do container NGINX e eu tive que adicionar o CIDR IP da rede docker ao set_real_ip_from, assim:
set_real_ip_from 172.18.0.0/16;

Para ajudar futuros hospedadores, seria possível adicionar esta linha ao template do cloudflare? O intervalo de IP 172.18.0.0/16 é privado de qualquer forma, então mesmo que você não tenha o NPM em um container docker, não fará mal adicionar este intervalo.

Minha sugestão seria alterar esta linha em cloudflare.template.yml:
sed -i \"/sendfile on;/a $CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
para esta linha:
sed -i \"/sendfile on;/a set_real_ip_from 172.18.0.0/16;\\n$CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf

O que você acha?

Existem vários tópicos sobre o uso de um proxy reverso que incluem como fazer isso. Nem todo mundo que usa Cloudflare usa um proxy reverso.

Um modelo de proxy reverso seria bom, pois tenho que procurá-lo toda vez que o configuro sem meus scripts.

Certo. E o inverso também é verdadeiro: nem todo mundo que usa um proxy reverso usa Cloudflare :wink:

Esta sugestão é realmente destinada a facilitar a vida das pessoas que usam Cloudflare. Não mudaria nada para aqueles que não usam um proxy reverso no Docker, mas poderia potencialmente economizar horas de busca pela resposta para um problema simples.

1 curtida

Pessoas que usam o cloudflare provavelmente têm uma vida difícil. Você pode pesquisar aqui e encontrar muitos exemplos de como. Instalar o template é apenas uma parte dos problemas que você pode ter, e a mais fácil de resolver. (Eu recomendaria que você usasse um CDN real como bunny.net, que é barato - mas não gratuito - e fácil de configurar, mas não é isso que você perguntou.)

Claro, seu problema não teve nada a ver com o cloudflare, mas com o proxy reverso, então pesquisar por cloudflare provavelmente não ajudou!

Ainda assim, adicionar mais alguns templates padrão como proxy reverso (e aquele que eu realmente quero - um para pré-compilar assets e enviá-los para o S3) é uma boa ideia.

Boa sorte.

1 curtida