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

Nuxt3生产环境登录后出现ERR_TOO_MANY_REDIRECTS问题求助

Nuxt3生产环境登录后出现ERR_TOO_MANY_REDIRECTS问题排查与解决

问题情况

开发模式执行pnpm nuxt dev时权限验证中间件运行无异常,但构建后通过pnpm nuxt start启动生产服务,登录后触发ERR_TOO_MANY_REDIRECTS错误。

相关配置代码

权限验证中间件

export default defineNuxtRouteMiddleware(async (to, form) => {
    if(process.server){
        const here = to.name as string
        const auths = ['login', 'signup', 'password-reset']        
        const isAuth = Boolean(useCookie('tok').value)

        if(isAuth && auths.includes(here)){
            return navigateTo('/', {external: true, replace: true})
        }else if(!isAuth && !auths.includes(here)){  
            return navigateTo('/login', {external: true, replace: true})
        }
    }   
})

Apache2代理配置

<VirtualHost localhost:80>
    ServerName localhost
    RequestHeader set Host %{HTTP_HOST}s
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP %{REMOTE_ADDR}s
    RequestHeader add X-Forwarded-For %{REMOTE_ADDR}s
    Header add Access-Control-Allow-Origin "*"
    
    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
    
</VirtualHost>

Nuxt3 .env配置

NITRO_HOST=localhost
NITRO_PORT=3000

使用Nuxt版本:3.6.5

问题原因分析

  1. external: true引发跳转循环:内部路由跳转使用external: true会强制生成完整外部URL,结合Apache代理的ProxyPreserveHost On设置,导致重定向请求在代理与Nuxt服务间反复循环。
  2. 仅服务端执行中间件:process.server限制中间件仅在服务端运行,客户端路由跳转时无法触发权限验证,两端状态不一致引发重复重定向。
  3. 路由名称判断不稳定:依赖to.name判断路由,生产环境路由名称可能因打包压缩或配置变化与开发环境不符,导致权限逻辑判断错误。

解决方案

修改权限中间件

移除process.server判断和external: true选项,改用to.path做稳定的路由判断:

export default defineNuxtRouteMiddleware(async (to) => {
    const authPaths = ['/login', '/signup', '/password-reset']        
    const isAuth = Boolean(useCookie('tok').value)

    if (isAuth && authPaths.includes(to.path)) {
        return navigateTo('/', { replace: true })
    } else if (!isAuth && !authPaths.includes(to.path)) {  
        return navigateTo('/login', { replace: true })
    }
})

额外检查项

  • 确保tok cookie在生产环境的httpOnly、secure、sameSite属性设置正确,避免客户端或服务端无法读取cookie导致isAuth判断失效。
  • 同域代理场景下,可移除Apache配置中冗余的Access-Control-Allow-Origin "*",避免潜在跨域问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:23:20