Nginx descarta HTTPS da Akamai durante a reescrita

1

O Akamai transmite a solicitação HTTPS para Nginx e o Nginx descarta HTTPS da solicitação quando executa um redirecionamento. Aqui estão os resultados do curl:

$ curl -v -L https://oursite.com/life/facts-and-arguments/ 2>&1 | egrep "^(<|>) (Host:|Location:|Server:|GET|HTTP)"
> GET /life/facts-and-arguments/ HTTP/1.1
> Host: oursite.com
< HTTP/1.1 301 Moved Permanently
< Server: openresty/1.13.6.1
< Location: http://oursite.com/life/first-person/ #Extra hop we're trying to avoid
> GET /life/first-person/ HTTP/1.1 
> Host: oursite.com
< HTTP/1.1 301 Moved Permanently
< Server: AkamaiGHost
< Location: https://oursite.com/life/first-person/
> GET /life/first-person/ HTTP/1.1
> Host: oursite.com
< HTTP/1.1 200 OK
< Server: openresty/1.13.6.1

Existe alguma maneira de o Nginx reter o HTTPS enquanto ele executa um redirecionamento para que ele não passe por este salto extra? Eu tentei configurações semelhantes a esta: Obrigado!

location ~ ^(?!(/a/|/b/|/c/))(([^.]*[^/]))$ {
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Host $host;
    set $redir_location $http_x_forwarded_proto://$host;
    rewrite ^(?!(/a/|/b/|/c/))(([^.]*[^/]))$ $redir_location$2/ permanent;
    }
    
por greenpenguin 20.04.2018 / 22:50

1 resposta

1

Esse bloco de configuração do nginx não corresponde ao seu URL. [^/]$ significa que o URL não deve terminar com barra, o seu não. O http: vem do seu aplicativo final, provavelmente não do nginx.

Uma nota lateral. Não redirecione para $http_x_forwarded_proto://$host porque você não sabe se $http_x_forwarded_proto está definido. Esta parte é da responsabilidade dos CDNs, eles devem editar o HTTP 30x Location que você retorna. Basta torná-lo $scheme://$host$2 .

    
por 20.04.2018 / 23:58