我正在尝试使用 Traefik 作为代理将流量发送到 gitlab 审核环境。Gitlab CI 可以启动 docker 容器来运行项目的审核版本。我可以让 Traefik 检测这些容器,并使用我的 docker-compose 文件中的此类配置将流量路由到它们:
- traefik.gitlab.frontend.rule=Host:gitlab.example.local;PathPrefixStrip:/review/$CI_BUILD_REF_NAME.$CI_PROJECT_NAME.$CI_PROJECT_NAMESPACE
- traefik.gitlab.port=80
有了这个我可以打开“https://gitlab.example.local/review/master.project.user/ping”并获取我的 PONG 页面。但如果我转到“https://gitlab.example.local/review/master.project.user/“,我正在使用的简单测试应用程序将返回 303 重定向到 /ping,最终结果为“https://gitlab.example.local/ping",并且没有代理到评论应用程序。
> GET /review/master.10112.root HTTP/2
> Host: gitlab.example.local
> User-Agent: curl/7.54.0
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 303
< content-type: text/html; charset=utf-8
< date: Mon, 25 Feb 2019 08:25:44 GMT
< location: /ping
< content-length: 32
<
<a href="/ping">See Other</a>.
文档提到设置了“X-Forwarded-Prefix”标头。我不确定它是否真的设置了。我无法在 curl -V 中看到它。我是否需要一个应用程序来检测此标头并将其作为“基本路径”添加到其响应的前面?有没有办法配置 Traefik 以将其添加到返回路径?
是否有其他更可配置的 Docker 感知代理可以用来将流量路由到动态寻址的 gitlab 审查环境?
答案1
你可以告诉 GitLab 它的托管位置,以便它发送正确的重定向和链接
docker run -e GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.local/review/master.project.user/ping'" ... gitlab/gitlab-ce:latest
https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-a-relative-url-for-gitlab