如何在Nginx location块中限制/api/v1后的路径段数量至3个?
Nginx Location 配置方案(限制路径段数量+保留GET参数)
核心配置代码
location ~* ^/api/v1/(?<endpoint>[^/]+(/[^/]+){0,2})(\?.*)?$ { # 替换为你的FastAPI后端实际地址 proxy_pass http://your-fastapi-backend:8000/$endpoint$is_args$args; # 可选:添加通用代理头部配置(按需启用) 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; }
配置细节说明
正则规则解析
^/api/v1/:锚定路径开头的固定前缀,避免部分匹配(?<endpoint>[^/]+(/[^/]+){0,2}):精准捕获/api/v1/后的路径部分,强制限制最多3个路径段:[^/]+:匹配第一个非斜杠的路径单元(如foo)(/[^/]+){0,2}:允许追加0-2个额外路径单元(对应/bar或/bar/baz的情况)
(\?.*)?$:匹配可选的GET参数,同时用$锚定结尾,杜绝超过3段的路径匹配
Proxy传递逻辑
$endpoint:直接引用正则捕获的路径部分,自动完成/api/v1/foo/bar到/foo/bar的映射$is_args:自动识别是否存在GET参数,有参数则输出?,无参数则为空$args:完整保留所有原始GET参数,无需手动拼接处理
匹配验证
- ✅ 允许通过的路径:
/api/v1/foo/api/v1/foo/bar/api/v1/foo/bar/baz/api/v1/foo/bar/baz?x=hello&y=world
- ❌ 拒绝匹配的路径:
/api/v1/foo/bar/baz/aaa(路径段超过3个)/api/v1/foo/bar/baz/aaa/n(路径段超过3个)
内容的提问来源于stack exchange,提问作者enchance
相关产品推荐
相关产品推荐

