Akamai передает запрос HTTPS в Nginx, а Nginx отбрасывает HTTPS из запроса при выполнении перенаправления. Вот результаты 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
Есть ли способ заставить Nginx сохранять HTTPS во время перенаправления, чтобы он не проходил через этот дополнительный переход? Я пробовал такие конфиги: Спасибо!
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;
}
Этот блок конфигурации nginx не соответствует вашему URL-адресу. [^/]$
означает, что URL-адрес не должен заканчиваться косой чертой, в отличие от вашего. В http:
исходит из вашего конечного приложения, вероятно, не из nginx.
Примечание. Не перенаправляйте на $http_x_forwarded_proto://$host
потому что ты не знаешь, если $http_x_forwarded_proto
установлен. Эта часть является ответственностью CDN, они должны редактировать HTTP 30x Location
что вы вернетесь. Просто сделай это $scheme://$host$2
.