Назад | Перейти на главную страницу

Nginx отбрасывает HTTPS от Akamai во время перезаписи

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.