You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS 12 Middleware导致Plesk部署站点异常求助

NextJS 12 Middleware在Plesk服务器异常,Vercel正常的排查方案

问题详情

  • 已确认问题出自NextJS 12的Middleware,部署在Plesk服务器上时导致站点功能异常,推测是服务器环境差异引发
  • 访问/appstore路径时出现错误(错误截图:访问/appstore的错误截图)
  • 相同代码在Vercel服务器上运行完全正常

用户提供的Middleware代码:

// middleware.ts
import { NextRequest, NextResponse, userAgent } from 'next/server'

export function middleware(request: NextRequest) {
  const { os } = userAgent(request)

  if(request.nextUrl.pathname === "/appstore")
  {
    if(os.name === "iOS"){
      return NextResponse.redirect('https://apps.apple.com/au/app/drn1/id1491656217')
    }
    if(os.name === "Android"){
      return NextResponse.redirect('https://play.google.com/store/apps/details?id=com.drn1.drn_player')
    }
  }
};

export const config = {
  matcher: [
    '/appstore'
  ],
}

排查与解决步骤

1. 检查Plesk的代理UA头传递

Plesk环境中如果配置了Nginx反向代理或CDN,很可能会篡改或丢失User-Agent请求头,导致userAgent()无法正确识别系统类型。

  • 操作:进入Plesk站点的「Apache & Nginx Settings」,在Nginx额外配置中添加:
    proxy_set_header User-Agent $http_user_agent;
    
    保存后重启Nginx服务。

2. 确认NextJS运行模式

Vercel原生支持NextJS Middleware,但Plesk部署时如果用了静态导出模式,Middleware会直接失效。

  • 验证:确认项目启动命令是next start,而非next export。在Plesk的应用设置里,把启动命令设为npm run start(确保package.json里有"start": "next start"脚本)。

3. 兼容UA解析偏差

NextJS 12的userAgent工具在部分服务器环境下可能出现解析偏差,比如os.name返回小写的ios/android,或者其他命名格式。

  • 修改代码增加容错和日志排查:
    export function middleware(request: NextRequest) {
      const userAgentStr = request.headers.get('user-agent') || '';
      // 打日志到服务器,方便看UA实际内容
      console.log('Received User-Agent:', userAgentStr);
      
      const { os } = userAgent(request);
      const osName = os.name?.toLowerCase() || '';
    
      if(request.nextUrl.pathname === "/appstore")
      {
        if(osName === "ios"){
          return NextResponse.redirect('https://apps.apple.com/au/app/drn1/id1491656217')
        }
        if(osName === "android"){
          return NextResponse.redirect('https://play.google.com/store/apps/details?id=com.drn1.drn_player')
        }
        // 非目标系统用户,放行到原页面
        return NextResponse.next();
      }
    };
    
    部署后查看Plesk的服务器日志,确认UA解析结果是否符合预期。

4. 检查Node.js版本兼容性

NextJS 12要求Node.js版本至少14.6以上,Plesk上的Node.js版本过低会导致Middleware运行异常。

  • 操作:进入Plesk的「Node.js Settings」,切换到16.x或18.x版本,重启应用。

内容的提问来源于stack exchange,提问作者RussellHarrower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:50:26