Se eu entendi corretamente, sua configuração é algo assim:
client -(http/https)-> nginx(front) -(http)-> nginx(back) -(fastcgi)-> app
Na verdade, existem três locais diferentes onde o redirecionamento pode ser feito:
No seu servidor Nginx frontal, você pode apenas redirecionar quando necessário:
if ( $https != 'on' ) {
return 301 https://$host$request_uri;
}
Se você não puder fazer isso no servidor Nginx da frente, terá que carregar informações sobre o protocolo usado para retornar a instância do Nginx. O modo usual é o uso do cabeçalho X-Forwarded-Proto. Você deve adicionar em local apropriado no seu servidor Nginx:
proxy_set_header X-Forwarded-Proto $scheme;
Em seguida, você pode fazer o redirecionamento no servidor Nginx:
if ( $http_x_forwarded_proto != 'https' ) {
return 301 https://$host$request_uri;
}
Obviamente, você também pode gerenciar o redirecionamento dentro do aplicativo. Você deve ter o cabeçalho X-Forwarded-Proto disponível no aplicativo, ou você pode configurá-lo como fastcgi param:
Em algum lugar no http {}
map $http_x_forwarded_proto $fe_https {
default off;
https on;
}
E mapeamento extra:
fastcgi_param HTTPS $fe_https;
Pessoalmente, acho que o redirecionamento deve ser feito no início de uma cadeia como plausível.