GitLab-CE 不修改gitlab.rb的external_url如何更改项目克隆URL
不修改external_url修正GitLab HTTP克隆地址方案
适用场景:Docker Compose部署GitLab CE、使用自有Nginx反向代理托管多实例、不启用GitLab内置Nginx。
操作步骤
1. 调整自有反向代理Nginx配置
在对应GitLab实例的反向代理规则中,补全以下请求头透传配置,确保GitLab能获取到用户实际访问的协议、域名、端口信息:
location / { # 保留原有proxy_pass等基础代理配置 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-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; }
如果对外提供HTTPS访问,必须保证X-Forwarded-Proto值为https,否则GitLab会生成HTTP前缀的错误克隆地址。
2. 调整GitLab配置(无需修改external_url)
编辑挂载目录下的/etc/gitlab/gitlab.rb文件,添加以下配置,全程不要设置external_url参数,不会触发内置Nginx启动:
# 明确关闭内置Nginx,适配自有反向代理场景 nginx['enable'] = false # 配置信任的代理服务器IP,覆盖本地回环、Docker网桥网段 gitlab_rails['trusted_proxies'] = ['127.0.0.1/24', '172.17.0.0/16'] # 多实例场景下如果SSH对外端口不是默认22,添加以下配置指定实际SSH端口 # gitlab_rails['gitlab_shell_ssh_port'] = 对应实例的SSH对外端口
以上配置的作用是告知GitLab,从反向代理透传的请求头中提取外部访问地址信息,而非从external_url配置读取。
3. 重载配置生效
进入GitLab容器执行gitlab-ctl reconfigure,等待配置重载完成(约3-5分钟),刷新项目页面后,自动生成的HTTP克隆地址就会和实际访问地址完全一致。
验证说明
- 配置生效后所有存量、新建项目的克隆地址会自动修正,无需逐个项目手动修改
- 多实例部署时,每个实例独立配置对应规则即可,实例间互不影响
- 手动修改URL可正常克隆的场景,按以上配置后可完全解决地址生成错误问题
内容的提问来源于stack exchange,提问作者username7856
相关产品推荐
相关产品推荐

