Gitlab+Nginx反向代理:修改external_url致实例故障的配置方案
问题描述
已成功搭建Nginx反向代理,将HTTPS请求转发至GitLab(示例:https://gitlab.foo.com),但仍需在GitLab设置中配置正确的external_url。当配置中填入https://开头的URL时,GitLab会自动激活部分设置导致实例故障,需配置哪些参数才能让GitLab仅使用新的external_url而不触发其他设置?
解决方案
你需要在GitLab的主配置文件(通常路径为/etc/gitlab/gitlab.rb)中添加以下参数,明确让GitLab依赖外部Nginx反向代理处理SSL,避免自动启用内置的HTTPS相关服务:
- 先设置正确的HTTPS格式
external_url:external_url 'https://gitlab.foo.com' - 禁用GitLab内置的Nginx服务(因为已经使用外部反向代理):
nginx['enable'] = false - 告诉GitLab信任反向代理的请求来源,同时关闭自动SSL跳转:
gitlab_rails['trusted_proxies'] = ['<你的Nginx服务器IP>'] # 替换为实际反向代理的IP地址 gitlab_rails['nginx_ssl_redirect'] = false - 如果你的Nginx是通过HTTP协议将请求转发给GitLab的(绝大多数场景都是如此),还需配置GitLab Workhorse的监听地址,确保和Nginx的转发目标端口一致:
gitlab_workhorse['listen_network'] = "tcp" gitlab_workhorse['listen_addr'] = "0.0.0.0:8181" # 端口可根据实际情况调整
配置完成后,执行gitlab-ctl reconfigure命令让所有设置生效。
原理说明
当external_url设为HTTPS开头时,GitLab默认会自动启用内置Nginx并尝试配置SSL证书,这会和你自己搭建的反向代理产生冲突,进而导致实例故障。通过上述参数,你明确告知GitLab:SSL加密由外部代理负责,自身仅需处理HTTP请求,同时信任该代理的请求来源,这样就能正常使用HTTPS格式的external_url,且不会触发自动配置的冲突项。
内容的提问来源于stack exchange,提问作者n1cK




