IP real não é mais reconhecido por meio de proxy

Nos últimos meses (não tenho certeza exatamente quando isso começou), notei que minha configuração externa do nginx, conforme documentado em Add an offline page to display when Discourse is rebuilding or starting up , para encaminhar o endereço IP real, está sendo ignorada.

Essa configuração externa do nginx funcionou por anos:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;

Agora, estou vendo todo o tráfego atribuído à rede interna do Docker no espaço RFC1918, como mostrado abaixo:

Isso obviamente está quebrando a funcionalidade de “aplicar essa penalidade a outros usuários que compartilham este endereço IP” e todos os outros usos do endereço IP remoto real.

Acho que isso já foi resolvido em algum lugar e eu só estou pesquisando de forma inadequada. :frowning: Mas eu apreciaria dicas sobre o que pode ter mudado, para que eu possa me adaptar.

Lembro-me de algo sobre isso recentemente, mas também não consigo encontrar. Handling the "chain of trust" of the end user's real IP - #8 by supermathie inclui um link para o modelo da Cloudflare, que acho que pode ser um bom exemplo.

Aqui está o que estou fazendo e parece que ainda funciona (até “Discourse 2026.6.0-latest - GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub versão 5c507d8359f4d6e8a5d98780c622d51cedbd9bd7”)

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.1.0/24;
      set_real_ip_from 192.168.11.0/24;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Provavelmente relacionado a este commit: FIX: nginx sample configuration should be setting x-f-f to the end us… · discourse/discourse@b4a3389 · GitHub

Isso pode ajudar você:

Como de costume, postar e ver as respostas me ajuda a encontrar outros posts semelhantes. :rofl: por exemplo

Obrigado, pessoal! Agora vou configurar o set_real_ip_from no nginx do container!

Vou usar todo o espaço RFC1918, no entanto. Para referência de qualquer outra pessoa, seria:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.0.0/16;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Isso não está funcionando para mim.

Agora entendo por que parou de funcionar para mim a partir do commit referenciado; ele quebrou a substituição de set_real_ip que eu tinha em vigor há anos. A justificativa para torná-lo mais robusto é sensata, e esta é uma melhor abordagem; uma mudança que quebra a compatibilidade agora, mas deve causar menos problemas no futuro.

Não sei por que a substituição de after_bundle_exec não está sendo aplicada, mas vou mudar para inserir arquivos.

Isso funciona para mim; compartilhando para a próxima pessoa:

run:
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
     chmod: 644
     contents: |
       real_ip_recursive on;
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
     chmod: 644
     contents: |
       real_ip_header X-Forwarded-For;
  - file:
     path: /etc/nginx/conf.d/outlets/server/set-real-ip-from.conf
     chmod: 644
     contents: |
       set_real_ip_from 192.168.0.0/16;
       set_real_ip_from 172.16.0.0/12;
       set_real_ip_from 10.0.0.0/8;