Nginx 和 HTTPS 背后的 Gitlab -> 不安全或错误的网关

Gitlab behind Nginx and HTTPS -> insecure or bad gateway

我 运行 Gitlab 支持我的 Nginx。

服务器 1(反向代理):启用 HTTPS 的 Nginx 并遵循 /git 的配置:

location ^~ /git/ {
    proxy_pass                          http://134.103.176.101:80;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Ssl on;
}

如果我不更改我的 GitLab 设置的任何内容,这将有效但不安全,因为外部 http 请求如下:

'http://www.gravatar.com/avatar/c1ca2b6e2cd20fda9d215fe429335e0e?s=120&d=identicon'. This content should also be served over HTTPS.

所以如果我更改隐藏服务器 2 (http gitlab) 上的 gitlab 配置:

external_url 'https://myurl'
nginx['listen_https'] = false

如文档中所述。我将收到错误的网关错误 502。没有加载页面。

我能做什么?


编辑:通过设置破解它:

gitlab_rails['gravatar_plain_url'] = 'https://www.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon'

to https... 这可行,但不是一个干净的解决方案。 (克隆 url 仍然是 http://)

我 运行 有类似的设置,我 运行 也遇到过这个问题。根据 docs:

By default, when you specify an external_url starting with 'https', Nginx will no longer listen for unencrypted HTTP traffic on port 80.

我看到您正在通过 HTTP 和端口 80 转发流量,但告诉 GitLab 使用外部 HTTPS URL。在这种情况下,您需要设置 listening port.

nginx['listen_port'] = 80   # or whatever port you're using.

此外,记得在对 gitlab.rb 进行更改后重新加载 gitlab 配置。您可以使用此命令执行此操作:

sudo gitlab-ctl reconfigure

作为参考,以下是我如何进行重定向:

反向代理服务器上的Nginx配置:

location / {
    proxy_set_header Host $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-Ssl on;

    proxy_pass http://SERVER_2_IP:8888;
}

GitLab 服务器上的 GitLab 配置文件 gitlab.rb:

external_url 'https://gitlab.domain.com'
nginx['listen_addresses'] = ['SERVER_2_IP']
nginx['listen_port'] = 8888
nginx['listen_https'] = false