如何为Docker部署的GitLab实例配置双域名访问?
Docker部署GitLab双域名访问配置方法
前置准备
先确认负载均衡侧已经完成配置:两个域名的HTTP/HTTPS、SSH流量都已经正确转发到GitLab Docker实例的对应服务端口,LB健康检查正常。
配置步骤
- 修改GitLab主配置文件
进入运行GitLab的Docker容器,编辑/etc/gitlab/gitlab.rb文件,做以下改动:- 保留主域名配置为新正式域名:
external_url 'https://你的新正式域名' - 新增允许访问的Host列表,把新旧两个域名都加入白名单,绕过GitLab默认的Host头校验拦截:
gitlab_rails['allowed_hosts'] = ['你的新正式域名', '你的旧别名域名'] - 配置Nginx透传请求Host头,避免访问旧域名时被强制跳转到主域名:
如果你是在LB层做SSL证书卸载(即LB和GitLab之间走HTTP),追加以下配置:
如果是GitLab侧直接加载HTTPS证书,请把包含两个域名SAN条目的证书路径配置到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" }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
相关产品推荐
相关产品推荐

