Yukang's Page

Nginx https too many redirect

2018-02-23

Http请求在经过多层Nginx的时候,通常强制http跳转到https的时候会这样配置:

return 302 https://$host$request_uri;
## 需要注意这里是request_uri而不是uri,否则会引起安全问题

但是如果是多层Nginx,前面的Nginx需要把用户原始请求的scheme传递到后端,可以加上头部设置:

proxy_set_header X-Forwarded-Proto $scheme;

后面的Nginx再判断一次:

if ( $http_x_forwarded_proto != 'https' ) {
return 301 https://$host$request_uri;
}

否则强制https经常会出现类似ERR_TOO_MANY_REDIRECTS 将您重定向的次数过多这样的问题。

可是在实践过程中偶尔也碰到过一些ELB会丢掉scheme的问题,比如在这样的请求链路情况下elb => nginx => nginx => application第二层Nginx获取的scheme就有问题了,这也可能会导致too many redirects问题。

可以尝试在第二层Nginx上这样解决:

proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

当然强制https这样的跳转逻辑尽量放在请求链路的最外层,这样问题会少一些。

Tags: Nginx
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章