在负载均衡器后面的gitlab中显示https url

时间:2014-09-11 23:55:14

标签: git gitlab

我正在运行gitlab后面的负载均衡器处理我的SSL。我将gitlab作为非SSL运行,负载均衡器处理https连接。我的问题是如何在“活动”部分中获取存储库的路径以显示https而不是http?用户在显示http时可能会感到困惑,但正确的网址是https。

2 个答案:

答案 0 :(得分:1)

我找不到一个完美的"解决方案,但我做的是,我将external_url配置文件中的gitlab.rb设置为HTTPS并将以下行添加到nginx配置(/var/opt/gitlab/nginx/conf手动

location / {
  ...

  proxy_set_header    Host                $http_host;
  proxy_set_header    X-Real-IP           $remote_addr;
  proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
  proxy_set_header    X-Forwarded-Proto   https;
  proxy_set_header    X-Forwarded-Ssl     on;
  proxy_set_header    X-Url-Scheme        https;

  ...
}

gitlab-ctl restart重新启动Gitlab后,一切都适合我。请注意,对于下一个gitlab-ctl reconfigure,这些更改将会丢失。

目前,我还不知道如何将所需的nginx配置直接添加到gitlab.rb配置中。

答案 1 :(得分:1)

以下是docs: supporting proxied ssl的方法。

来自文档:

  

默认情况下,如果external_url包含https://,NGINX将自动检测是否使用SSL。如果您在反向代理后面运行GitLab,您可能希望在另一个代理服务器或负载均衡器上终止SSL。为此,请确保external_url包含https://并将以下配置应用于gitlab.rb:

nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['proxy_set_headers'] = {
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on"
}

我还在我的nginx服务器块中添加了代理头:

location / {
  proxy_pass http://...;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded_Proto $scheme;
  proxy_set_header X-Forwarded-Protocol $scheme;
  proxy_set_header X-Url-Scheme $scheme;
  proxy_set_header X-Forwarded-Ssl on;
}