Menu

Proxy

Proxy

Proxy 允许你在请求完成之前运行代码。然后,根据传入的请求,你可以通过重写、重定向、修改请求或响应头,或直接响应来修改响应。

使用场景

Proxy 有效的一些常见场景包括:

  • 在读取部分传入请求后快速重定向
  • 根据 A/B 测试或实验重写到不同的页面
  • 为所有页面或页面子集修改请求头

Proxy _不_适合:

  • 慢速数据获取
  • 会话管理

在 Proxy 中使用带有 options.cacheoptions.next.revalidateoptions.next.tags 的 fetch 不会生效。

约定

在项目根目录中创建一个 proxy.ts(或 .js)文件,如果适用,也可以放在 src 内,使其与 pagesapp 位于同一级别。

注意:虽然每个项目只支持一个 proxy.ts 文件,但你仍然可以将 proxy 逻辑组织到模块中。将 proxy 功能分解到单独的 .ts.js 文件中,并将它们导入到主 proxy.ts 文件中。这样可以更清晰地管理特定路由的 proxy,在 proxy.ts 中聚合以实现集中控制。通过强制使用单个 proxy 文件,它简化了配置,防止了潜在冲突,并通过避免多个 proxy 层来优化性能。

示例

proxy.ts
TypeScript
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
 
// 如果在内部使用 `await`,此函数可以标记为 `async`
export function proxy(request: NextRequest) {
  return NextResponse.redirect(new URL('/home', request.url))
}
 
// 参见下面的"匹配路径"了解更多
export const config = {
  matcher: '/about/:path*',
}

阅读更多关于使用 proxy 的信息,或参考 proxy API 参考