尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

为什么你的Nginx会无限308重定向?

为什么你的Nginx会无限308重定向?
📅 发布时间:2026/7/9 8:10:05

今天给一个私有化项目排查故障,问题表现是请求会返回无限308重定向,

最后定位是因为Nginx开启了强制HTTPS的重定向而未做判断。借这个机会,把Nginx的无限重定向的原理和处理方法给大家做下分享。

什么是 308 状态码?

308 Permanent Redirect 是 HTTP/1.1 协议中引入的状态码,与 301 类似但有一个关键区别:

  • 301/302:重定向返回可能会被浏览器将原本的 POST 请求改为 GET 请求
  • 307/308:严格保持请求方法和请求体不变
    • 307 = 临时重定向(对应302)
    • 308 = 永久重定向(对应301)

出现无限 308 重定向的常见场景

场景一:HTTPS 强制跳转配置错误

这是最常见的原因!

# 错误配置 - 无限重定向 server { listen 80; listen 443 ssl; server_name example.com; # 问题:没有判断是否已经是 HTTPS return 308 https://example.com$request_uri; }

问题原因:这个配置对 HTTP 和 HTTPS 请求都返回 308 重定向到 HTTPS,导致 HTTPS 请求也不断重定向自己。

正确配置:

server { listen 80; server_name example.com; return 308 https://$host$request_uri; } server { listen 443 ssl; server_name example.com; # HTTPS 业务配置... }

场景二:CDN/负载均衡 + Nginx 配合问题

当请求经过 CDN 或负载均衡器后,HTTPS协议可能在CDN边缘节点已经终止,Nginx 收到的是 HTTP 请求,如果Nginx还是下面配置,就可能导致重定向:

# 错误配置 server { listen 80; server_name example.com; if ($scheme = "http") { return 308 https://$host$request_uri; } }

问题:用户使用HTTPS访问CDN,CDN回源到后端Nginx使用 HTTP,导致 Nginx 不断返回 308 让 CDN 跳转。

解决方法:信任X-Forwarded-Proto头:

server { listen 80; server_name example.com; # 客户端是HTTP才重定向,CDN是HTTP就不重定向了 if ($http_x_forwarded_proto != "https") { return 308 https://$host$request_uri; } }

场景三:多location块配合错误

# 错误配置 location /docs/ { rewrite ^/docs/(.*)$ /documentation/$1 permanent; } location /documentation/ { rewrite ^/documentation/(.*)$ /docs/$1 permanent; }

如果Nginx的配置文件由多人维护,这种情况出现频率还是很高的。


场景四:www 与非 www 互相重定向

# 错误配置 server { listen 443 ssl; server_name example.com www.example.com; # 非 www 转 www if ($host = "example.com") { return 308 https://www.example.com$request_uri; } # 又不小心写了反向规则! if ($host = "www.example.com") { return 308 https://example.com$request_uri; } }

检查方法:用 curl 测试看 Location 头:

# 输出中看 Location: 是否不断变化curl-Ihttps://example.com

场景五:trailing slash(末尾斜杠)配置冲突

# 错误配置 server { # 加斜杠 rewrite ^([^.]*[^/])$ $1/ permanent; # 又去斜杠 rewrite ^/(.*)/$ /$1 permanent; }

两个规则互相打架!这种情况相对比较少见。
上面是常见的导致无限重定向的配置错误,下面谈下如何诊断此类故障。


诊断无限重定向的方法

curl 跟踪重定向

# 只看头部curl-Ihttp://example.com# 跟踪最多5次重定向curl-IL--max-redirs5http://example.com

查看 Nginx 访问日志

# 看同一个 IP 短时间内的请求模式tail-f/var/log/nginx/access.log

临时改成 307 调试
之所以要这样改,是因为308重定向会被浏览器缓存,影响我们对故障的排查。

# 调试时先用临时重定向 return 307 https://...; # 或 302 rewrite ... redirect; # 不要用 permanent

常用重定向场景实战

场景:www 与非 www 互转

非 www 转 www:

server { listen 443 ssl; server_name example.com; return 308 https://www.example.com$request_uri; }

www 转非 www:

server { listen 443 ssl; server_name www.example.com; return 308 https://example.com$request_uri; }

场景:文件扩展名隐藏

# 访问 /about → 实际读取 /about.html location / { try_files $uri $uri.html $uri/ =404; }

场景:整站域名迁移

server { listen 80; listen 443 ssl; server_name old-domain.com www.old-domain.com; # 所有请求转到新域名,保持路径 return 301 https://new-domain.com$request_uri; }

场景:特定目录重定向

location ^~ /docs/v1/ { # 旧版本文档转到新版本 return 301 /docs/latest/; }

场景:移动端适配跳转

set $mobile_rewrite do_not_rewrite; if ($http_user_agent ~* "(android|iphone|ipad)") { set $mobile_rewrite rewrite; } if ($uri = "/mobile/") { set $mobile_rewrite do_not_rewrite; } if ($mobile_rewrite = rewrite) { return 302 /mobile/; }

希望这篇文章能帮助到你,欢迎转发、评论!

相关新闻

  • 补充章节:VSCode Wokwi 无法可视化连线?在线 Wokwi 网页拖拽绘图方案
  • Python自动化接口测试:边界值与字符组合用例生成实战
  • Windows右键菜单终极清理教程:3个简单步骤让电脑右键菜单变清爽

最新新闻

  • 选准求职平台,助力应届生走好就业第一步
  • 佛山代加工贴牌推荐指南
  • 用 Click 与 Rich 构建开发者友好的 Python CLI:从参数解析到终端美化
  • 【IT与OT深度融合】2026年边缘执行层技术解构:自控阀门厂家推荐与智能诊断全栈指南(附Python总线源码)
  • 分布式ID生成方案在创业项目中的选型:雪花算法与号段模式对比
  • Next.js - 03 - 路由详解

日新闻

  • SQL 查询语句的标准逻辑执行顺序(即语义处理顺序),它与实际书写顺序不同,但决定了数据库如何解析和执行查询
  • ORB-SLAM2 重定位模块深度解析:从 BoW 候选帧到 PnP 优化的 6 步流程
  • 罗技鼠标宏压枪脚本终极指南:从原理到实战的完整解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号