Como fazer com que o Balanceador de carga do Google Cloud respeite o Proto X-Forwarded recebido?

4

Minha estrutura de aplicativo usa o GKE e o CloudFlare. Parece assim:

CloudFlare -> GKE -> Ingress -> My app running nginx

Estou usando o SSL flexível no CloudFlare, portanto, somente a conexão entre o usuário e o CloudFlare usa HTTPS, todo o restante usa HTTP. Eu sei que o CloudFlare define o X-Forwarded-Proto para https nessa situação, mas quando vejo os cabeçalhos que meu aplicativo nginx está recebendo, ele recebe X-Forwarded-Proto: http .

Tenho certeza de que isso acontece em algum lugar entre o Load Balancer do GKE e o Ingress, pois vejo que o cabeçalho CF-Visitor: {"scheme": "https"} configurado pelo CloudFlare está definido como HTTPS. Meu entendimento é que isso significa que CloudFlare definiu X-Forwarded-Proto para https , mas foi sobrescrito ao longo do caminho.

Infelizmente, não consegui obter os logs de cabeçalho do GKE Load Balancer (parece que eles não registram os cabeçalhos X-Forwarded-* ), então não posso confirmar 100% que o CloudFlare está realmente definindo os cabeçalhos , mas eu ficaria muito surpreso se não for.

Se isso for verdade, o Google Cloud substituirá o cabeçalho X-Forwarded-Proto por http . Como posso evitar isso?

Editar: configurei um ingresso nginx em vez de um gce seguindo link e o X-Forwarded-Proto está definido como https conforme esperado. Este é outro sinal de que é o controlador de ingresso gce que está sobrescrevendo o cabeçalho X-Forwarded-Proto .

    
por Vítor Baptista 14.05.2018 / 19:55

1 resposta

1

Conforme descrito em este artigo Cloudflare acrescenta um cabeçalho X-Forwarded-Proto, que pode ser HTTP ou HTTPS, dependendo do protocolo que o usuário usou para visitar o site. Se você acredita que o valor do X-Forwarded-Proto deve ser mantido, mas foi alterado pelo GCLB, recomendo abrir uma solicitação de recurso para isso em rastreador de problemas do Google .

    
por 20.06.2018 / 23:03