Ubuntu20.04下Nginx安装Certbot后出现ERR_TOO_MANY_REDIRECTS错误求助
Nginx配置引发ERR_TOO_MANY_REDIRECTS问题排查
之前一直使用Apache,刚切换到Nginx,按教程安装Nginx并配置Let's Encrypt SSL证书,初期可正常使用,之后出现**ERR_TOO_MANY_REDIRECTS(重定向次数过多)**错误,以下是相关配置及修复方案:
配置文件详情
/var/www/sites-available/my_domain
server { root /var/www/my_domain/html; index index.html index.htm index.nginx-debian.html; server_name my_domain; location / { rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent; rewrite ^/(.*)/$ /$1 permanent; try_files $uri/index.html $uri.html $uri/ $uri =404; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/my_domain/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/my_domain/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = my_domain) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name my_domain; return 404; # managed by Certbot }
/var/www/sites-enabled/my_domain
server { root /var/www/my_domain/html; index index.html index.htm index.nginx-debian.html; server_name my_domain; location / { rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent; rewrite ^/(.*)/$ /$1 permanent; try_files $uri/index.html $uri.html $uri/ $uri =404; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/my_domain/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/my_domain/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = my_domain) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name my_domain; return 404; # managed by Certbot }
UFW防火墙设置
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22 ALLOW Anywhere Nginx Full ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 22 (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
Cloudflare配置说明
使用Cloudflare作为DNS服务,SSL/TLS模式设置为完全(严格)。
问题现象
配置初期SSL可正常工作,之后浏览器提示ERR_TOO_MANY_REDIRECTS(重定向次数过多),无法访问网站。
修复方案
核心原因
Cloudflare完全(严格)模式要求源服务器必须通过HTTPS通信,但当前Nginx配置会把Cloudflare转发的HTTP请求重定向到HTTPS,形成循环:Cloudflare发HTTP请求→Nginx重定向到HTTPS→Cloudflare再次转发→Nginx再次重定向。
具体步骤
临时验证问题根源:将Cloudflare SSL/TLS模式改为灵活,测试是否消除重定向循环。
修改Nginx 80端口配置:
替换原80端口的server块内容,通过Cloudflare传递的X-Forwarded-Proto头判断用户原始请求协议,仅当原始请求为HTTP时才重定向到HTTPS:server { listen 80; listen [::]:80; server_name my_domain; # 仅对用户原始HTTP请求重定向到HTTPS if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } # 保留Certbot续期所需的ACME挑战路径 location /.well-known/acme-challenge/ { root /var/www/my_domain/html; allow all; } return 404; }验证配置并重启Nginx:
- 检查配置语法:
sudo nginx -t - 重启服务:
sudo systemctl reload nginx
- 检查配置语法:
恢复Cloudflare模式:确认Nginx配置生效后,将Cloudflare SSL/TLS模式改回完全(严格)。
内容的提问来源于stack exchange,提问作者Monkee_coder
相关产品推荐
相关产品推荐

