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
我 运行 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