http no cabeçalho Location quando a solicitação original foi feita por meio de https

2

Atualmente, estou implementando https em nosso ambiente de produção, mas estou coçando minha cabeça aqui.

SSL é terminado no balanceador de carga e o fluxo em nossa pilha é basicamente assim:

Produção : Navegador < - https - > Balanceador de carga < - http - > Apache < - http - > Balanceador de carga < - http - > Tomcat

Teste : Navegador < - https - > nginx < - http - > Balanceador de carga < - http - > Tomcat

Quando eu acesso a nossa página de login por HTTPS:

Solicitar cabeçalhos

POST /login/form HTTP/1.1
Host: www.example.org
Connection: keep-alive
Content-Length: 74
Cache-Control: max-age=0
Origin: https://www.example.org
Content-Type: application/x-www-form-urlencoded
Referer: https://www.example.org/login
Accept-Encoding: gzip,deflate,sdch
Accept-Language: nb,en-US;q=0.8,en;q=0.6

Cabeçalhos de resposta

HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 17 Jan 2014 11:16:50 GMT
Content-Length: 0
Connection: keep-alive
Set-Cookie: FOO=example
Location: http://www.example.org/portal
Strict-Transport-Security: max-age=31536000

Falei com um desenvolvedor e ele me disse o seguinte:

In the code there is sth like request.sendRedirect("/portal") and Tomcat does the rest.

Eu sou capaz de reproduzir o problema no ambiente de teste, embora um pouco diferente da pilha.

Minhas perguntas:

  1. Por que recebo http como o esquema no Location -header quando a solicitação original do navegador foi feita com https ?
  2. Este é um problema do mod_rewrite / mod_proxy ou nginx do Apache?
  3. Isso é um problema com o Tomcat?
por pkhamre 17.01.2014 / 12:38

3 respostas

4

Você obtém http nos cabeçalhos de resposta porque a solicitação que chega ao Apache é HTTP - o SSL foi eliminado no balanceador de carga. Então, do que o Apache vê, é apenas uma solicitação HTTP.

Você pode resolver isso definindo

ServerName https://www.example.org

na configuração do host global ou virtual. Isso substituirá o esquema HTTP padrão, para que o Apache envie a resposta desejada. A documentação para ServerName menciona isso.

    
por 17.01.2014 / 12:47
3

Eu tive um problema semelhante. Adicionando o seguinte na sua configuração virtualhost deve resolver o problema. Basicamente, ele iria editar o pedido de http para https

Header edit Location ^http://(.*)$ https://$1

    
por 02.08.2017 / 07:14
1

link

proxy_redirect default;
proxy_redirect http://www.example.org/ https://www.example.org/;
    
por 21.01.2014 / 23:49