解决Nginx中强制跳转HTTPS访问出现的太多重定向错误
此前在Nginx常用的301重定向规则中写了常用的URL统一化转发规则,需要的朋友可以自翻,今天遇到个腾讯云CDN部署HTTPS的特殊情况,记录整理如下。
因为可以白嫖HTTPS服务,所以目前很多项目都部署在腾讯云的CDN中,此前都用的自己服务端的SSL证书,今天在腾讯云申请了一年的免费证书,在做URL统一化的时候(强制www和https访问)发现重定向次数过多的错误(redirected you too many times
),这是由于我未在服务端配置SSL证书,也就是说腾讯云CDN以HTTP回源,所以服务器接收到的信息就是HTTP请求,但是受强制HTTPS访问规则影响,服务端又给它重定向到HTTPS,又回到了CDN那边,结果CDN又产生HTTP回源请求,这就形成了一个闭环,听上去有点绕,总之访问页面就这么来回无限循环了。
此前在服务端配置了SSL并强制用HTTPS访问的nginx规则是
if ($scheme != "https") { return 301 https://$host$request_uri; }
现在如果我们未在服务端配置SSL使用CDN端的SSL证书并启用HTTPS访问的正确写法是
if ($http_x_forwarded_proto = "http") { return 301 https://$server_name$request_uri; }
记得一定要做这个转发协议的配置规则才可以正确运行。