Reverse proxy X-Forwarded-For

Recentemente migrei meu fórum para um host muito mais performático e estou trabalhando para alcançar alta disponibilidade.

No proxy reverso, adicionei os cabeçalhos Forward Proto e For, mas a configuração do nginx no Discourse respeitou apenas o Proto.

Fui obrigado a adicionar, sob server:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

Existe alguma variável de ambiente do Discourse para adicionar isso?
Ou talvez um argumento para adicionar ao app.yml?

Acredito que seja isso que você está procurando:

Não, este guia explica como configurar um socket nginx compartilhado entre o contêiner e o host.

Estou tentando encontrar uma maneira declarativa de incluir:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

Na configuração do nginx nos contêineres após a reconstrução.

Você está tentando adicionar isso ao nginx interno do contêiner? Acredito que isso seja desnecessário, pois já é incluído por padrão:

Essa linha é necessária para que funcione.
Sem ela, todas as requisições ainda mostram o IP do balanceador de carga.
Eu sei disso porque meu Discourse ficou fora do ar devido a erros 429.

Caso não esteja claro, esta é minha infraestrutura:
usuário > haproxy > discourse

O Discourse, é claro, inclui um proxy reverso nginx.

Eu incluí os cabeçalhos de encaminhamento no haproxy, mas o nginx interno do Discourse não estava respeitando o “forwarded for”. Tive que adicionar as 2 linhas na minha postagem original e reiniciar o container para que funcionasse.

Você está usando uma construção com 2 containers?

Acho que não há uma variável de ambiente integrada para IPs de balanceadores de carga personalizados, pois o nginx não lê essas variáveis nativamente para o bloco server.

Além disso, se você editou manualmente a configuração do nginx dentro do container em execução, ela será apagada na próxima vez que você fizer o rebuild.

Acho que, para tornar a configuração permanente e fazê-la sobreviver aos rebuilds, você precisa usar o comando replace no seu app.yml (ou web_only.yml se for dual container) — role até o final do seu arquivo .yml até a seção run: e adicione este bloco. Isso instrui o construtor do Discourse a injetar automaticamente suas configurações de IP real após a abertura do bloco server {:

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: /server.+{/
      to: |
        server {
          set_real_ip_from 192.168.1.100; ## Substitua pelo IP/sub-rede real do seu balanceador de carga
          real_ip_header X-Forwarded-For;
          real_ip_recursive on;