You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker部署的GitLab实例配置双域名访问?

Docker部署GitLab双域名访问配置方法

前置准备

先确认负载均衡侧已经完成配置:两个域名的HTTP/HTTPS、SSH流量都已经正确转发到GitLab Docker实例的对应服务端口,LB健康检查正常。

配置步骤

  • 修改GitLab主配置文件
    进入运行GitLab的Docker容器,编辑/etc/gitlab/gitlab.rb文件,做以下改动:
    1. 保留主域名配置为新正式域名:
      external_url 'https://你的新正式域名'
      
    2. 新增允许访问的Host列表,把新旧两个域名都加入白名单,绕过GitLab默认的Host头校验拦截:
      gitlab_rails['allowed_hosts'] = ['你的新正式域名', '你的旧别名域名']
      
    3. 配置Nginx透传请求Host头,避免访问旧域名时被强制跳转到主域名:
      如果你是在LB层做SSL证书卸载(即LB和GitLab之间走HTTP),追加以下配置:
      nginx['listen_https'] = false
      nginx['listen_port'] = 80
      nginx['proxy_set_headers'] = {
        "Host" => "$http_host",
        "X-Real-IP" => "$remote_addr",
        "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
        "X-Forwarded-Proto" => "https"
      }
      
      如果是GitLab侧直接加载HTTPS证书,请把包含两个域名SAN条目的证书路径配置到nginx['ssl_certificate']和nginx['ssl_certificate_key']项即可。
  • 配置仓库地址动态适配
    为了让用户用哪个域名访问,页面就显示对应域名的仓库克隆地址,不需要手动替换链接,追加配置:
    # 关闭强制所有请求重定向到external_url配置的主域名
    nginx['redirect_http_to_https'] = false # 如需强制HTTPS可保留为true,搭配LB规则配置即可
    # SSH克隆地址动态适配访问域名
    gitlab_shell['ssh_host'] = "$http_host"
    # 若SSH服务不是默认22端口,额外添加配置:gitlab_shell['ssh_port'] = 你的SSH端口
    
  • 重载配置生效
    在容器内执行以下命令加载配置,过程中GitLab服务会短暂重启:
    gitlab-ctl reconfigure
    # 配置加载完成后重启Nginx组件确保规则生效
    gitlab-ctl restart nginx
    

验证&注意事项

  • 分别用两个域名访问GitLab首页,确认不会出现403禁止访问错误、不会强制跳转到单一域名
  • 打开任意项目页面,检查页面显示的HTTP/SSH克隆地址和当前访问域名一致,测试拉取、提交代码操作正常
  • 如果你启用了GitLab Container Registry、GitLab Pages等附加服务,需要对应把旧域名加入到对应服务的允许域名列表中,避免子服务出现跨域或跳转异常
  • 后续需要下线旧域名时,只需要从allowed_hosts列表中删除旧域名,重载配置后再在LB侧移除旧域名转发规则即可,不需要改动其他参数

内容的提问来源于stack exchange,提问作者yelmir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.05 16:18:28