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

Apache2部署T3栈应用tRPC首查询路径被截断问题求助

排查与解决Apache子目录部署T3栈Next.js应用的tRPC接口异常问题

问题描述

基于T3栈+Next UI开发的Next.js应用部署到Apache2服务器子目录/application后,页面访问、登录、数据库初始化均正常,但tRPC API请求出现异常:

  • 批量请求时,首个查询的接口路径会被截断前3个字符,例如user.getAll变为r.getAll,返回404错误
  • 单独请求user.getAll失败,后续查询却能正常执行

Apache2反向代理配置

<Location "/application">
    ProxyPreserveHost On
    ProxyPass http://localhost:3001/application
    ProxyPassReverse http://localhost:3001/application
</Location>

依赖版本

{
  "@next-auth/prisma-adapter": "1.0.7",
  "@nextui-org/react": "2.2.9",
  "@prisma/client": "5.7.0",
  "@t3-oss/env-nextjs": "0.7.1",
  "@tanstack/react-query": "4.36.1",
  "@trpc/client": "10.44.1",
  "@trpc/next": "10.44.1",
  "@trpc/react-query": "10.44.1",
  "@trpc/server": "10.44.1",
  "bcryptjs": "2.4.3",
  "framer-motion": "10.16.16",
  "next": "14.0.4",
  "next-auth": "4.24.5",
  "react": "18.2.0",
  "react-dom": "18.2.0",
  "superjson": "2.2.1",
  "zod": "3.22.4"
}

tRPC接口定义已确认无误,以下是排查及解决方法:


排查方向与解决方案

1. 修正Apache反向代理配置

Apache的Location与ProxyPass组合可能因路径匹配规则导致请求截断,修改配置如下:

<Location "/application/">
    ProxyPreserveHost On
    ProxyPass http://localhost:3001/
    ProxyPassReverse http://localhost:3001/
</Location>
  • 在Location路径末尾添加斜杠/,消除路径匹配歧义
  • ProxyPass直接指向Next.js应用根路径,让Next.js自行处理路由映射

2. 配置Next.js的basePath

在项目根目录的next.config.js中添加子目录前缀配置:

/** @type {import('next').NextConfig} */
const nextConfig = {
  basePath: '/application',
  // 保留原有其他配置
}

module.exports = nextConfig

该配置会让Next.js自动为所有路由、资源路径添加/application前缀,确保tRPC生成的API路径正确。

3. 验证tRPC客户端路径配置

检查tRPC客户端初始化代码(通常位于src/utils/trpc.ts),确保API路径包含正确的子目录前缀:

import { httpBatchLink } from '@trpc/client';
import { createTRPCNext } from '@trpc/next';
import type { AppRouter } from '@/server/api/root';

export const trpc = createTRPCNext<AppRouter>({
  config({ ctx }) {
    return {
      links: [
        httpBatchLink({
          url: `${process.env.NEXT_PUBLIC_APP_URL}/api/trpc`,
          // 或直接写死:'/application/api/trpc'
        }),
      ],
    };
  },
  ssr: false,
});

4. 确认Apache代理模块启用

确保Apache已启用必要的代理模块:

sudo a2enmod proxy proxy_http
sudo systemctl restart apache2

未启用模块可能导致请求处理逻辑异常,引发路径截断问题。

5. 启用Apache日志排查请求路径

修改Apache虚拟主机配置,开启详细访问日志:

CustomLog ${APACHE_LOG_DIR}/application_access.log combined

重启Apache后触发tRPC请求,查看日志中记录的实际请求URL,确认是否存在路径截断,进一步定位问题根源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:22:38