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
协议
我在 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
https
协议