Skip to content

fix(deploy): support reverse proxy subpaths#1576

Open
langcaiye wants to merge 1 commit into
Tencent:mainfrom
langcaiye:fix/subpath-prefix-support
Open

fix(deploy): support reverse proxy subpaths#1576
langcaiye wants to merge 1 commit into
Tencent:mainfrom
langcaiye:fix/subpath-prefix-support

Conversation

@langcaiye

Copy link
Copy Markdown
Contributor

Summary

  • add optional backend SUBPATH_PREFIX handling before Gin routing for reverse proxies that forward a path prefix unchanged
  • make frontend login redirects respect Vite BASE_URL, matching existing API base path behavior
  • document subpath deployment in README and env examples

Tests

  • CGO_CXXFLAGS="-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1" go test ./cmd/server
  • npm run build-only

Notes

  • npm run type-check currently fails on existing repository-wide TypeScript issues unrelated to this change, including src/api/agent/index.ts generic request calls and several existing component type mismatches.

@langcaiye

Copy link
Copy Markdown
Contributor Author

补充说明一下这个 PR 的设计背景:

这个改动是为了解决 WeKnora 挂在反向代理子路径下的部署场景,例如:

https://example.com/weknora/
https://example.com/kb/weknora/

这里分成两个配置:

  1. 前端使用 BASE_URL=/weknora/
    这个用于 Vite 构建,保证静态资源、Vue Router、axios API 请求都带上子路径前缀。

  2. 后端使用 SUBPATH_PREFIX=/weknora
    这个只在反向代理把前缀原样转发给 Go 后端时需要。比如后端收到的是 /weknora/api/v1/,但 Gin 注册的实际路由是 /api/v1/,所以需要在进入 Gin 路由前剥掉 /weknora。

这里没有把剥前缀逻辑放在 Gin middleware 里,而是放在 http.Server.Handler 外层。原因是 Gin middleware 里如果依赖 HandleContext 二次路由,某些 no-route 场景可能先写入 404 状态,再命中真实 handler,导致响应 header 是 404 但 body 是正常内容。放
在 Gin 外层可以保证路由第一次匹配时就使用剥前缀后的路径。

如果反向代理已经剥掉了路径前缀再转发给后端,则不需要设置 SUBPATH_PREFIX,只设置前端 BASE_URL 即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant