新项目初始因为用的是 Cloudflare 的 DNS 解析,下意识的开启了 CDN,在这之后才开始配置 Nginx,明明配置的没问题但是 HTTP 强制跳转 HTTPS 就是会报 ERR_TOO_MANY_REDIRECTS 301 将您重定向的次数过多的错误,百思不得其解。
后来在查询解决方案的时候试着加上了 Cloudflare 关键词,然后看到了这篇文章:一种可能导致 ERR_TOO_MANY_REDIRECTS 的原因,感觉就是这个原因,试了下果然解决了,优化下标题 SEO 希望能给更多人看到。
虽然很简单还是放下具体的操作步骤。
关于 Cloudflare 四种 SSL/TLS 模式的区别:Cloudflare 四种 SSL/TLS 加密模式的功能解析及实践
1、确定你的 Nginx 配置是没有问题的。
# HTTP 80 端口
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html;
index index.html;
# 强制跳转 HTTPS
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS 443 端口
server {
listen 443 ssl;
server_name example.com;
root /usr/share/nginx/html;
index index.html;
# SSL 配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
location / {
# 服务所在端口
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
这样的配置至少 HTTP 强制跳转 HTTPS 就已经是没有问题的了,在防火墙和安全组打开 80 和 443 端口之后不会出现重定向不到的问题。
修改完记得重启 Nginx 服务。
nginx -s reload
service nginx restart
2、Cloudflare 配置修改 SSL/TLS 为端到端加密。
原因在开头文章中已经讲的很明确了:
原因
因为在 Cloudflare 的 SSL/TLS 设置选项中,如果你选择了 Flexible ,那么所有对你的服务器的请求都是通过 HTTP 发送的,而如果服务器上已经设置了将 HTTP 重定向到 HTTPS 的话,就会发生重定向循环。

如图更改即可。
3、注意事项:
上述操作结束后,如果服务器 Nginx 配置项中一个域名同时有 HTTP 和 HTTPS 两个 server 配置内容的话,所有 HTTP 访问会无视其对应配置而改为 HTTPS 协议并遵循 HTTPS 的 server 配置内容,这会引起最大的问题就是类似 Let's Encrypt SSL 证书申请时所采取的:在服务器某一位置生成认证文件并用 HTTP 协议访问它以完成验证这一措施失效。
也就是说,强制 HTTPS 跳转和 Let's Encrypt SSL 证书自动续签你只能选其一。