Gerenciando a "cadeia de confiança" do IP real do usuário final

Entendido, então trata-se mais do que o Rails ou outras gems fazem com os cabeçalhos, e menos do que o código do Discourse faz.

É interessante que o Rails não utilize X-Real-IP, que provavelmente é menos comum do que X-Forwarded-For, mas certamente mais conhecido do que Forwarded e Client-IP :thinking:.

Provavelmente X-Real-IP está então obsoleto na configuração do Nginx. O Discourse o usa junto com X-Forwarded-For nos logs, se eu interpretei corretamente? Não consegui encontrar nenhum outro uso/menção explícito no código:

O trecho abaixo pareceu errado de duas formas quando o vi durante a depuração da limitação de taxa compartilhada e os erros registrados sobre o IP de cliente “unix:” inválido após a atualização do nosso Discourse (usamos um proxy de socket UNIX à frente do container e dependemos de X-Forwarded-For).

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

Mas entendo o “funciona” para tornar $remote_addr o único ponto de verdade, e real_ip_header a maneira canônica para administradores controlarem o único IP que o Discourse/Rails recebe. Vejo que já foi adicionado em Serve Discourse from a subfolder (path prefix) instead of a subdomain :+1:.