跳到主要内容

GitLab通过namespace获取不到项目

出了什么问题

在k8s上布置gitlab,然后用nginx代理转发请求。 根据gitlab的API文档:(https://docs.gitlab.com/ee/api/projects.html#get-single-project)

GET /projects/:id

这里的ID可以是项目的ID,也可以是由namespace与项目名称用%2F连接起来的字符串,而且这个%2F不能被转码。(文档链接

举个例子,比如有个xxx/project的项目,它的ID是2,可以用GET /projects/2也可以用GET /projects/xxx%2Fproject来取得项目信息。

问题就出在我可以用前者获得项目信息,后者会得到{"message":"404 Project Not Found"}

问题的原因在哪里

问题出在Nginx代理转发请求,Nginx会把请求解码,把%2F解码成/,就会导致Gitlab后端404。

问题如何解决

proxy_pass参数的URL后面加上$request_uri

proxy_pass http://gitlab$request_uri