Nginx 在重写期间从 Akamai 删除 HTTPS

Nginx 在重写期间从 Akamai 删除 HTTPS

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;
    }

答案1

该 nginx 配置块与您的 url 不匹配。[^/]$意味着该 url 不应以斜线结尾,而您的 url 以斜线结尾。该 urlhttp:来自您的最终应用程序,可能不是来自 nginx。

附注:不要重定向到,$http_x_forwarded_proto://$host因为您不知道是否$http_x_forwarded_proto设置了。这部分是 CDN 的责任,他们应该编辑您返回的 HTTP 30x Location。只需将其设置为$scheme://$host$2

相关内容