Next.js项目用Nginx部署需先区分SSG静态导出或SSR服务端渲染:SSG直接托管out/目录并配置try_files回退;SSR则需Nginx反向代理至本地3000端口Next.js服务,并透传请求头。

用 Nginx 部署 Next.js 项目,关键在于先明确你的构建模式:是 静态站点生成(SSG)导出,还是 服务端渲染(SSR)需 Node.js 后端代理。两者部署方式完全不同,混淆会导致 404、API 失效或页面白屏。
确认项目构建类型
打开 next.config.js 或检查 package.json 中的构建脚本:
- 若使用
next export(如"build": "next build && next export"),且输出目录为out/,属于 SSG 静态导出 —— 不依赖 Node.js,可直接由 Nginx 托管静态文件。 - 若只运行
next build && next start,且项目含getServerSideProps或app/路由中使用服务器组件/动态数据获取,则属于 SSR 模式 —— 必须启动 Next.js 服务(默认端口 3000),Nginx 仅作反向代理。
SSG 静态导出:Nginx 直接托管
将 next export 生成的 out/ 目录设为 Nginx 根路径,并配置正确路由回退(支持前端路由):
server {
listen 80;
server_name example.com;
<p>root /path/to/your/project/out;
index index.html;</p><p>location / {
try_files $uri $uri/ /index.html;
}</p><p>location /_next/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}注意:try_files $uri $uri/ /index.html 是关键,确保 /dashboard 这类客户端路由不返回 404;/_next/ 资源建议强缓存。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
SSR 模式:Nginx 反向代理到 Next.js 服务
先确保 Next.js 服务已后台运行(如用 pm2):
npm run build pm2 start .next/server/pages/_document.js --name "next-app" --interpreter node -- -p 3000
或更标准方式(Next.js 13.5+ 推荐):
npm run build pm2 start npm --name "next-app" -- start -p 3000
Nginx 配置示例:
server {
listen 80;
server_name example.com;
<p>location / {
proxy_pass <a href="https://www.php.cn/link/92cdc3666b7883ebeed2973e70725bb1">https://www.php.cn/link/92cdc3666b7883ebeed2973e70725bb1</a>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}</p><p>location /_next/static {
alias /path/to/your/project/.next/static;
expires 1y;
add_header Cache-Control "public, immutable";
}
}重点:proxy_pass 指向本地 Next.js 服务;/_next/static 可由 Nginx 直接提供(跳过 Node),提升性能;务必透传真实 IP 和协议头,否则 getServerSideProps 中的请求信息可能异常。
常见问题快速排查
-
页面空白或 404:检查是否误把 SSR 项目当静态部署(没起 Node 服务),或静态部署时漏了
try_files回退规则。 -
API 调用 502:SSR 模式下确认 Next.js 服务正在运行且端口可达;检查
proxy_pass地址和防火墙设置。 -
样式/JS 加载失败:确认
/_next/路径在 Nginx 中可访问;静态部署时检查out/目录结构是否完整;SSR 模式下确认location /_next/static的alias路径正确(末尾无斜杠)。 -
环境变量未生效:SSG 导出时,仅
NEXT_PUBLIC_*变量可用;SSR 模式下,需在 Node 启动前注入(如env NEXT_PUBLIC_API_URL=https://api.example.com pm2 start ...)。

















