Next.js getServerSideProps设置rejectUnauthorized仍报SSL证书错误如何解决
方案1:开发环境快速全局禁用TLS验证(仅建议本地开发用,严禁生产环境使用)
你之前的配置不生效是因为 rejectUnauthorized 是axios、旧版node-fetch的专属参数,Node 18+ 内置的标准fetch API不识别该配置项。
最快的解决方式是在启动Next.js时添加Node环境变量,直接全局关闭TLS证书校验:
修改项目package.json中的开发启动脚本:
{ "scripts": { "dev": "NODE_TLS_REJECT_UNAUTHORIZED=0 next dev" } }
Windows环境如果用cmd/powershell,需要对应调整环境变量设置方式,可安装cross-env实现跨平台兼容:
先安装cross-env:
npm i cross-env -D
再修改脚本:
{ "scripts": { "dev": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 next dev" } }
方案2:单请求关闭验证(无需全局修改)
如果不想全局关闭证书校验,可以给单个fetch请求配置undici的Agent(Node内置fetch底层基于undici实现):
首先安装undici依赖:
npm i undici
修改你的getServerSideProps代码:
import { Agent } from 'undici' export async function getServerSideProps() { const res = await fetch('https://nginx/api/items', { method: 'GET', dispatcher: new Agent({ connect: { rejectUnauthorized: false } }) }) const { data } = await res.json() return { props: { data } } }
方案3:添加自签名证书到信任列表(最安全的开发环境方案)
如果不想关闭校验,可以把你的自签名证书文件加入Node的信任CA列表,启动时添加对应环境变量即可:
{ "scripts": { "dev": "NODE_EXTRA_CA_CERTS=./你的自签名证书路径.crt next dev" } }
该方案不会降低环境安全性,同时可以正常使用自签名证书。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

