You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动