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