https 后面的 gitlab 终止反向代理和 oauth

gitlab behind https terminating reverse proxy and oauth

我在 pound 后面的服务器上安装了 GitLab 7.8.4,它为我终止了 HTTPS 连接。

如何将 GitLab 配置为始终假定通过 HTTPS 访问它而不让它也处理 HTTPS 连接?

在实践中我看到了以下问题:

我正在向我的 GitLab 实例添加 GitHub 身份验证,并尝试使用我的 GitHub 帐户登录 GitLab。只要一切都通过 HTTP,这就可以正常工作。但是,如果我将 HTTPS 地址用于我的 GitLab 实例,则使用 GitHub 的身份验证将失败。

问题似乎是 GitLab 像这样将 HTTP 地址传递给 GitHub:

https://github.com/login/oauth/authorize?response_type=code&client_id=[...]&redirect_uri=http%3A%2F%2Fgitlab.myurl.com%2Fusers%2Fauth%2Fgithub%2Fcallback&state=[...]&scope=user%3Aemail

然后 GitHub 响应:

/?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fv3%2Foauth%2F%23redirect-uri-mismatch&state=[...]

我从不想通过 http-only 访问我的 GitLab 实例。我如何强制 GitLab 将 https:// url 报告给 GitHub 而无需它自己处理 HTTPS?

经过一番尝试后,我发现在 nginx 配置中设置以下内容可以解决问题:

proxy_set_header    X-Forwarded-Proto   https;

因为我一直想通过 https 访问我的 gitlab 实例,这对我来说效果很好,现在似乎也使 oauth 成为可能。

抱歉,我应该在发布这个问题之前多花点时间,但也许这可以帮助遇到同样问题的其他人。

虽然@josch 已经给出了他的具体问题的答案,但我有另一个使用不同解决方案的错误案例。

当 运行 Apache 代理后面的 GitLab 7.7.2 ("from source") 时,尝试使用我的 GitHub 帐户进行授权时发生相同的错误,即使我使用

RequestHeader set X-Forwarded-Proto "https"

在站点配置中。

事实证明,解决方法是将 GitHub 上的 OAuth Authorization callback URL 协议设置为 http:// 而不是 https://,尽管该站点是公开可用的仅通过 SSL。

A gitlab-ctl tail 让我走上正轨。以下是对我有用的设置:

在 Github 的应用程序配置中,我为

使用了 完全相同的值
  • 首页URL
  • 授权回调URL.

我使用的值是 https://MY_GITLAB_FQDN/(MY_GITLAB_FQDN 被我的实际主机名替换)。请注意方案 HTTPS 中的 S。

在我的(外部)nginx 配置中,我已经有了节

proxy_set_header X-Forwarded-Proto $scheme;

我的配置:

  • Gitlab-CE 8.6.2,安装了 Omnibus 包
  • Ubuntu 14.04 服务器
  • 外部 nginx(因此禁用 gitlab.rb 中的 nginx)

在我的例子中,通过设置 external_url 变量解决了这个问题 在 omnibus config

中使用 url 中的 https 协议