我尝试使用 VS Code 的 Gitlab 工作流插件。不幸的是它没有找到我的项目。我调试了一下,发现调用了
https://mydomain/gitlab/api/v4/projects/mygroup%2Fmyproject
API 返回
{
error: "404 Project Not Found"
}
这应该根据文档工作。
如果我打电话
https://mydomain/gitlab/api/v4/projects/:id
,其中 id 是我得到的项目编号
path_with_namespace: "mygroup/myproject",
浏览互联网,我发现有些人声称这对他们也不起作用,但没有解决方案。其他人说这对他们来说非常有效。
我已经尝试使用 Gitlab CE 12.x.x,现在使用 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
由于它可能与其他在 Gitlab 上使用 Apache 2.4 作为反向代理的人非常相关,所以我回答我自己的问题。
我的 Apache 配置包含
AllowEncodedSlashes NoDecode
,以便对 Gitlab 的请求可以包含 Api 所需的 urlencoded 路径,例如
mygroup%2Fmyproject
(否则 Apache 已经抛出 404,请参阅AllowEncodedSlashes) 不幸的是这还不够。通常,
mod_proxy 也会规范化 ProxyPassed URLs。
所以我的后端收到了mygroup%252Fmyproject
(注意添加了 25,在 %2F 中编码了 % 字符),这导致了来自 Gitlab 的 404。将 Apache 配置更改为
ProxyPass /gitlab http://gitlab.local:80/gitlab nocanon
(我添加了 nocanon)后,一切正常。
这对我有用
<VirtualHost *:80>
ServerName gitlab.example.lk
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
AllowEncodedSlashes NoDecode
ProxyPass / http://localhost:8181/ nocanon
ProxyPassReverse / http://localhost:8181/
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.gitlab.example.lk [OR]
RewriteCond %{SERVER_NAME} =gitlab.example.lk
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
AllowEncodedSlashes NoDecode
和
nocanon
还不够,我还必须在
NE
中添加
RewriteRule
标志,这样它看起来像
RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]