Next.js 13生产环境发送异常请求返回403问题排查求助
问题描述
补充说明:我之前完全忽略了请求URL并非REST API地址,而是实际网页地址。Next.js似乎在向实际网页发送请求。另外,我怀疑这些请求来自构建文件夹,因为我在代码库中发现了'/_next/data'路径。那么这是middleware导致的吗?此外,本项目未使用getServerSide props。
我正在开发的Next.js 13项目出现异常情况:向网页发送的请求均返回403状态码,示例如下:
https://hello.com/_next/data/6jowMdw4HAQlDr5Y8O6JJ/connector/connectorManagement.json?p=1 https://hello.com/_next/data/6jowMdw4HAQlDr5Y8O6JJ/charging/calculateFailureHistory.json https://hello.com/_next/data/6jowMdw4HAQlDr5Y8O6JJ/station/chargeGroup.json
我们的前端有开发(http)和生产(https)两个部署环境,仅生产环境出现该问题,开发环境完全不会发送这类请求;本地环境发送此类请求则返回200状态码。后端也对应有开发和生产两个基于PHP的REST API。
本地运行时,请求返回200状态码,格式如下,响应内容为实际HTML:
Request URL: http://localhost:PORT/_next/data/development/charging/chargingProfile.json Request Method: GET Status Code: 200 OK Remote Address: - Referrer Policy: strict-origin-when-cross-origin
请求头中的Baggage信息如下:
sentry-environment=development,sentry-public_key=public_key,sentry-trace_id=trace_id,sentry-sample_rate=1,sentry-sampled=true

疑问解答
1. 该问题源于前端还是后端?
优先考虑后端或生产环境部署配置。本地和开发环境均正常返回200,仅生产环境报403,而403通常是权限拦截行为(比如WAF规则、Nginx/Apache访问控制、后端权限校验逻辑)。不过前端也可能间接触发问题,比如请求头携带的信息不符合生产后端校验规则。
2. 是否为Next.js配置问题?
大概率是Next.js生产构建或部署相关的配置问题:
/_next/data是Next.js在静态生成、增量静态再生(ISR)模式下生成的数据路由,生产构建后这些文件会存放在服务器的.next/data目录下。如果服务器未正确部署这些文件,或者Nginx/Apache未将/_next/data请求映射到静态文件,会导致请求被后端拦截返回403。- 检查
next.config.js的output配置:若使用output: 'export'静态导出,需确保/_next/data下的所有文件已正确上传到服务器,且服务器允许访问;若部署到Vercel等平台,可能是构建缓存或部署配置异常。 - 关于middleware:若项目中有middleware,排查它是否在生产环境对
/_next/data路径做了不必要的权限拦截,比如误将静态数据请求当成API请求校验。
3. 是否为axios拦截器问题?
可能性较低,但可排查:
- 检查axios拦截器是否在生产环境给
/_next/data类请求添加了不符合后端要求的请求头(如错误token、自定义字段),导致后端返回403。 - 开发环境不发送这类请求,是因为开发模式下Next.js直接在本地生成数据,不会触发静态文件请求;而生产环境直接请求已构建好的静态数据文件,若axios拦截器意外修改了这类请求的头信息,可能引发问题。
4. 是否为Sentry配置问题?
可能性较低,但可验证:
- 请求头中的Baggage是Sentry注入的,通常不会导致403。除非生产后端的WAF或权限系统将Sentry的头信息判定为恶意内容拦截。可临时关闭生产环境的Sentry初始化,观察问题是否消失来排除。
额外排查建议
- 检查生产服务器的Nginx/Apache配置:确保
/_next/data路径请求被正确指向.next/data目录的静态文件,而非转发到PHP后端。例如Nginx可配置:location /_next/ { alias /path/to/your/project/.next/; expires 30d; access_log off; } - 检查生产服务器文件权限:
.next/data目录下的json文件需具备可读权限,确保服务器进程能读取这些文件。 - 查看生产后端错误日志:确认403是后端权限系统返回,还是服务器Web服务(如Nginx)返回,精准定位问题点。
内容的提问来源于stack exchange,提问作者yubinjodev
相关产品推荐
相关产品推荐

