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

时间:2015-03-15 06:45:13

标签: github oauth https reverse-proxy gitlab

我已经在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实例。如何在不处理HTTPS本身的情况下强制GitLab向GitHub报告https://网址?

4 个答案:

答案 0 :(得分:2)

虽然@josch已经给出了他特定问题的答案,但我还有另一个案例,即使用不同的解决方案。

在Apache代理后面运行GitLab 7.7.2("来自")时,尝试使用我的GitHub帐户进行授权时出现同样的错误,即使我使用了

RequestHeader set X-Forwarded-Proto "https"

在网站配置中。

事实证明,该修补程序是将GitHub上的OAuth Authorization callback URL协议设置为http://而不是https://,尽管该网站仅通过SSL公开提供。

GitHub OAuth Authorization URL

答案 1 :(得分:1)

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

proxy_set_header    X-Forwarded-Proto   https;

由于我总是希望通过https访问我的gitlab实例,这对我来说效果很好,现在似乎也可以使oauth成为可能。

对不起,在发布这个问题之前,我应该更长时间地玩这个问题,但也许这可以帮助其他人解决同样的问题。

答案 2 :(得分:0)

gitlab-ctl tail让我走上了赛道。以下是适用于我的设置:

在Github的应用程序配置中,我使用了完全相同的值

  • 首页网址
  • 授权回调网址

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

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

proxy_set_header X-Forwarded-Proto $scheme;

我的配置:

  • 使用Omnibus软件包安装的Gitlab-CE 8.6.2
  • Ubuntu 14.04服务器
  • 外部nginx(因此来自gitlab.rb的nginx已禁用)

答案 3 :(得分:0)

就我而言,问题是通过设置 external_url 变量解决的 在 omnibus config

的 url 中使用 https 协议