使用命名空间/项目名称而不是 id 时,Gitlab api v4 在项目搜索时返回 404

Ari*_*ion 6 apache2 gitlab gitlab-api gitlab-ce

我尝试使用 VS Code 的 Gitlab 工作流插件。不幸的是它没有找到我的项目。我调试了一下,发现它调用了

https://mydomain/gitlab/api/v4/projects/mygroup%2Fmyproject

并且 api 返回

{
error: "404 Project Not Found"
}
Run Code Online (Sandbox Code Playgroud)

根据文档,这应该有效。

如果我打电话https://mydomain/gitlab/api/v4/projects/:id,其中 id 是我得到的项目编号

path_with_namespace: "mygroup/myproject",
Run Code Online (Sandbox Code Playgroud)

浏览互联网,我发现有些人声称这对他们也不起作用,但没有解决方案。其他人则说这对他们来说非常有效。

我尝试过使用 Gitlab CE 12.xx,现在使用https://github.com/sameersbn/docker-gitlab升级到最新版本 13 (13.0.6)

我尝试过几个项目但没有成功。

我是项目的维护者。

访问令牌具有插件请求的权限 api 和 read_user 。

显然我错过了一些东西。但什么?

编辑:

我的设置是将 docker 容器置于反向代理 apache 后面。也许授权没有按预期工作。该插件发送一个标头PRIVATE-TOKEN。我将检查标头是否已传递到 api。

没有。PRIVATE-TOKEN 标头由 docker 容器接收。

编辑2:

我建立了一个公共小组和一个公共项目来消除身份验证问题。还是不行。搜索返回 404。

编辑3:

由于 Dashrath Mundkar 询问了 curl 命令:

curl -H "PRIVATE-TOKEN:XXXXXXX" https://mydomain/gitlab/api/v4/projects/mygroup%2Fmyproject
Run Code Online (Sandbox Code Playgroud)

Ari*_*ion 7

好的。我找到了答案,它与我的设置有些特定。

由于它可能与其他在 Gitlab 上使用 Apache 2.4 作为反向代理的人非常相关,所以我回答我自己的问题。

我的 Apache 配置包含AllowEncodedSlashes NoDecode这样的内容,以便对 Gitlab 的请求可以包含 Api 所需的 urlencoded 路径,例如mygroup%2Fmyproject(否则 Apache 已经抛出 404,请参阅AllowEncodedSlashes

不幸的是这还不够。通常,mod_proxy 也会规范 ProxyPassed URL

所以我的后端收到了mygroup%252Fmyproject(注意添加的 25,编码 %2F 中的 % 字符),这导致了来自 Gitlab 的 404。

在我将 Apache 配置更改为ProxyPass /gitlab http://gitlab.local:80/gitlab nocanon(我添加了 nocanon)后,一切正常。

  • 我也遇到了这个问题,但是在 GitLab 中打开 WebIDE 时,WebIDE 本身加载良好,但找不到项目。我必须添加“AllowEncodedSlashes NoDecode”以及“nocanon”附录。 (2认同)