Quando o Nginx começou a ser usado como servidor backend, ele sempre conversou em texto puro “HTTP” com o servidor de frontend (por razões de performance e por uma configuração mais simples)
Mas aplicações web frequentemente precisão saber, se o trafego entre o browser e o servidor de backend esta encriptado (HTTPS). ex: quando é checado se uma parte particular do site esta sendo acessada de maneira segura.
Uma vez que somente o proxy frontend (aquele entre nginx e o browser) sabe disso, essa informação deve ser enviado para o servidor de backend.
Uma solução comum é que o frontend marque o “X-Forwarded-Proto” header quando fizer o forward da requisição do browser para o servidor de backend.
Isto é muito parecido com a informaçao sobre o IP do browser: isto só é conhecido pelo proxy frontend e o backend somente verá o IP do proxy frontend, mas não o IP de quem realmente requisitou tal chamada.
O “X-Real_IP” header é frequentemente usado para fazer forward desta informação do frontend para o backend e o Nginx suporta isto atraves do NginxHttpRealIpModule, ex: set_real_ip_from $ip_frontend;
Infelizmente não há suporte ainda para o X-Forwarded-Proto, mas pode ser aplicado facilmente com o código abaixo:
server {
[...]
set $my_https "off";
if ($http_x_forwarded_proto = "https") {
set $my_https "on";
}
location ~ ^(.+\.php)(.*)$ {
[...]
fastcgi_param HTTPS $my_https;
}
}
Isto ira adicionar a variavel HTTPS de “On” para “Off”, de acordo com o resultado do X-Forwarded-Proto (http ou https)
Se o Nginx tambem for usado como um proxy frontend, você pode passar a informação conforme abaixo no contexto location:
proxy_set_header X-Real-IP $remote_addr;
Este texto foi extraido e traduzido de: http://daniel.hahler.de/handle-x-forwarded-proto-in-backend-nginx#more3053