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?