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

SvelteKit adapter-node构建Nginx非根路径proxy_pass重定向过多问题排查

解决SvelteKit + Nginx反向代理的重定向循环问题

我来帮你搞定这个「too many redirects」的问题!这个问题核心是Nginx代理配置和SvelteKit的base路径设置重复,导致请求路径被多次追加,触发了无限重定向。下面是具体的修复方案:

问题原因分析

你已经在svelte.config.js里设置了kit.paths.base: '/dashboard_v2',这意味着adapter-node运行的预览服务会自动处理所有以/dashboard_v2开头的请求,内部路由也会基于这个base路径工作。但你在Nginx的location /dashboard_v2/里把请求转发到http://localhost:4173/dashboard_v2,这就造成了路径重复:用户访问mydomain.com/dashboard_v2/xxx时,Nginx会把它转发到http://localhost:4173/dashboard_v2/xxx,而SvelteKit看到这个请求后,会认为实际路径应该是/dashboard_v2/dashboard_v2/xxx(因为base路径是/dashboard_v2),于是触发重定向到它认为的「正确路径」,最终形成循环。

具体修改步骤

1. 调整Nginx代理配置

把location /dashboard_v2/里的proxy_pass修改为不带/dashboard_v2的地址,同时添加重定向头处理规则:

修改后的Nginx配置片段:

location /dashboard_v2/ {
        proxy_pass http://localhost:4173/;
        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;
        # 修正SvelteKit返回的重定向头,确保路径包含正确的base前缀
        proxy_redirect http://localhost:4173/ /dashboard_v2/;
        # WebSocket支持配置保持不变
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}

关键修改点:

  • proxy_pass从http://localhost:4173/dashboard_v2改为http://localhost:4173/(结尾的斜杠保证路径映射准确)
  • 添加proxy_redirect指令,把SvelteKit返回的http://localhost:4173/xxx重定向头替换为/dashboard_v2/xxx,避免前端拿到错误的跳转地址
  • 将proxy_set_header Host从$http_host改为$host,避免某些场景下主机名不一致引发的问题

2. 保留SvelteKit原有配置

你的svelte.config.js设置是完全正确的,不需要做任何修改:

import adapter from '@sveltejs/adapter-node';
import preprocess from "svelte-preprocess";

/** @type {import('@sveltejs/kit').Config} */
const config = {
    kit: {
        adapter: adapter(),
        csrf: { checkOrigin: false },
        paths: {base: '/dashboard_v2'}
    },
};

export default config;

3. 重启服务生效

  • 重启Nginx:sudo systemctl restart nginx
  • 确保你的SvelteKit预览服务正常运行(无需重启,因为配置没有改动)

验证

访问mydomain.com/dashboard_v2,应该就能正常加载页面,不会再出现重定向循环的问题了。如果还有异常,可以查看Nginx错误日志(/var/log/nginx/error.log)和SvelteKit服务日志,排查是否有其他路径匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:06:51