Nginx 作为使用 SSL 的 GitLab 的反向代理吗?

Nginx 作为使用 SSL 的 GitLab 的反向代理吗?

我已将 GitLab 的 nginx 设置为监听 127.0.0.1:8088 。然后,我有一个系统 nginx(通过 Ubuntu 上的 apt-get 安装)设置为使用 HTTPS 的反向代理:

upstream gitlab {
    server                    localhost:8088 fail_timeout=0;
}

server {
    listen          80;
    server_name     gitlab.myhost.com;
    return          301 https://$server_name$request_uri;
}

# let gitlab deal with the redirection
server {
    listen                      443 ssl;
    server_name                 gitlab.myhost.com;

    ssl_certificate             /srv/www/gitlab.myhost.com.unified.crt;
    ssl_certificate_key         /srv/www/gitlab.myhost.com.key;

    location / {
        proxy_read_timeout      300;
        proxy_connect_timeout   300;
        proxy_redirect          off;

        proxy_set_header        X-Forwarded-Proto $scheme;
        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-Frame-Options   SAMEORIGIN;

        proxy_pass              http://gitlab;
    }
}

这没问题,基本上所有请求都转发到 HTTPS。但是,由于 GitLab 仍然认为它是在 HTTP 中运行,页面上的一些图形资源和 Gravatar 正在使用 HTTP 方案。我该如何解决这个问题?

当然,我知道我可以配置gitlab.rb使用 HTTPS URL。但是,完成此操作后,GitLab 将开始请求证书来设置自己的 nginx。我实际上只需要自己的 nginx 在 HTTP 中以本地环回方式运行。

答案1

我知道这是一个老问题,但是,

nano /etc/gitlab/gitlab.rb

set external_url="https://whatever"

然后在 nginx 区域找到正确的方法。

inside the nginx['proxy_set_headers'] = { directive add
"X-Forwarded-Ssl" => "on",

这将假设您的 SSL 建立在更远的代理上。并将所有 http 网址重写为 https

答案2

最好按照以下说明进行操作配置反向代理或负载均衡器 SSL 终止具体如下(总结一下,并根据个人经验进行补充):

编辑/etc/gitlab/gitlab.rb:

external_url "https://gitlab.myhost.com"
nginx['listen_port'] = 8088
nginx['listen_https'] = false

然后发出

sudo gitlab-ctl reconfigure

相关内容