GitLab域名配置的本质就是把你的仓库访问地址从IP或默认域名,改成你自己可控的、好记的、带证书的正式域名,核心操作就两步:改external_url并重新加载配置。很多团队在自建GitLab之后,第一个想解决的问题就是如何让成员通过一个正经域名访问,而不是记一串数字,下面我把从绑定、解析、换域名到配证书的完整流程,拆成几个最常见的实操场景讲清楚。
GitLab域名如何绑定?分两种主流情形
自建GitLab服务器,域名绑定到内网或公网IP
自建环境下,GitLab默认监听在http://localhost或服务器IP的80端口,要让域名生效,不需要改Nginx配置文件,GitLab官方支持直接通过/etc/gitlab/gitlab.rb里的external_url来指定对外域名。
具体步骤:
- 用编辑器打开
/etc/gitlab/gitlab.rb - 找到
# external_url 'http://gitlab.example.com'这一行 - 修改为你的真实域名,例如
external_url 'http://gitlab.yourcompany.com' - 保存后执行
sudo gitlab-ctl reconfigure - 执行
sudo gitlab-ctl restart让变更生效
行业共识认为,external_url是GitLab所有地址生成的基础,改完它之后,仓库的clone地址、webhook回调地址、CI/CD中的项目URL都会自动跟着变,不需要手动去改其他配置文件。
使用GitLab.com官方SaaS服务,绑定自定义域名
GitLab官方托管版(GitLab.com)的免费用户用的是gitlab.com下的二级域名,比如yourname.gitlab.io,如果你想让自己的域名指向GitLab Pages或者项目首页,则属于另一套逻辑:
- 对于GitLab Pages,需要在项目设置里配置
Pages domain,同时到你的域名DNS服务商处添加一条CNAME记录,指向yourname.gitlab.io - 对于GitLab.com主站本身,自定义域名是付费功能,你需要升级到Premium或Ultimate套餐,然后在群组设置里的”Service Desk”或”Projects”里绑定专属域名
需要明确的是,这里所说的”绑定”不会改变GitLab平台本身的访问入口,只是让你的域名作为入口之一,所有认证和跳转仍然基于GitLab原有的域名逻辑。
GitLab域名解析不生效怎么办?按这个顺序排查

很多人在配置完external_url之后,输入域名却打不开页面,第一反应就是”是不是Nginx没重启”,域名解析问题占了大头。
检查DNS解析是否真的指向了GitLab服务器
先在本地终端执行:
dig 你的gitlab域名 nslookup 你的gitlab域名
观察返回的A记录或CNAME是否指向你GitLab服务器的公网IP,如果返回的是旧IP或者空记录,说明还没解析生效。
- 域名解析生效时间通常在几分钟到几小时之间,国内DNS服务商可能稍慢
- 如果服务器在国内,且你的域名没有备案,那么80和443端口会被运营商拦截,这是相当一部分访问失败的根源
- 如果你用的是云服务器,还要检查安全组是否放行了80/443端口
检查GitLab自身的监听状态
解析正常仍无法访问,那么问题出在GitLab的Nginx服务上,执行:
sudo gitlab-ctl status curl -I http://你的域名
如果返回的是502或404,说明GitLab内部服务未正确启动,这时执行sudo gitlab-ctl tail查看最近日志,重点看nginx/error.log和gitlab-workhorse的输出。
经验之谈,改完external_url之后最容易踩的坑是:原本的gitlab.rb里还有其他Nginx自定义配置,它们与新的域名冲突,例如有人手动改过nginx['listen_port'],但没有同步修改external_url中的端口,这时候GitLab会启动两个监听,导致新域名访问到错误端口。
GitLab域名更换与迁移要注意什么?
老项目迁移、公司品牌改名,或者从测试环境搬到生产环境,都会面临更换域名的情况,这件事看起来简单,但隐藏的坑比初次配置多得多。
核心操作:还是改external_url
无论从http://192.168.1.100换成http://gitlab.company.com,还是从http://old.com换成http://new.com,操作动作完全一样:
- 修改
/etc/gitlab/gitlab.rb的external_url - 执行
sudo gitlab-ctl reconfigure - 重启相关服务
但注意,GitLab的很多历史数据里会存着旧域名地址,你需要额外执行:
sudo gitlab-rails runner "ApplicationSetting.current.update!(:gitlab_url => 'http://new.com')"
运行后,重新生成所有项目的克隆地址。
同步更新OAuth应用和Webhook
如果你的GitLab对接了第三方系统,比如Jira、钉钉、企业微信,这些应用里配置的回调URL仍然指向旧域名,登录GitLab后,进入管理区域 -> 应用,把所有OAuth应用的”Callback URL”和”Redirect URI”改为新域名。
另一个容易被忽略的地方是项目设置里的Webhooks,CI/CD触发的接口回调地址同样以旧域名生成,需要批量替换,GitLab没有提供全局替换的功能,所以建议用API脚本批量处理:
# 使用GitLab Project API获取所有项目ID,循环更新webhook curl --request PUT --header "PRIVATE-TOKEN: 你的token" "https://gitlab.example.com/api/v4/projects/项目ID/integrations"
旧域名要保留多久
推送新域名之前,最好让旧域名至少保留一个月,原因很简单:团队成员的本地Git remote地址还指向旧域名,部分人的SSH配置也绑定了旧主机,你可以用一条命令帮所有人减少麻烦:
git remote set-url origin http://新域名/group/project.git
GitLab域名与HTTPS证书配置
现在没有证书的GitLab基本没法用,因为现代浏览器对http://的警告越来越强硬,好消息是,GitLab支持自动签发Let’s Encrypt证书。
利用GitLab内置的Let’s Encrypt自动配置
在gitlab.rb中启用:
external_url 'https://gitlab.example.com' letsencrypt['enable'] = true
然后执行sudo gitlab-ctl reconfigure,GitLab会自动申请证书并配置到Nginx,注意前提是:
- 你的域名已经解析到当前服务器
- 服务器80端口可被外网访问(Let’s Encrypt的HTTP-01挑战需要访问80端口)
- 域名不能是纯IP
证书到期前,GitLab的gitlab-ctl renew-le-certs命令会尝试自动续期,你不需要写单独的cron任务,GitLab默认每天检查一次。
手动上传已有证书
如果你使用公司内部的CA签发的证书,或者使用商业证书,则手动指定证书路径:

external_url 'https://gitlab.example.com' nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
更稳妥的做法是把证书和私钥放到/etc/gitlab/ssl/目录下,并确保文件权限为644和600,很多人在这一步因为权限不足导致Nginx启动失败,日志里会明确提示Permission denied。
GitLab域名相关问题解答
GitLab域名能直接用IP访问吗?
能,但不建议,直接用IP访问意味着所有clone地址形如http://192.168.1.100/group/project.git,一旦服务器IP变化,所有成员都需要手动改remote地址,HTTPS证书无法覆盖IP(公网IP证书例外,但申请麻烦),浏览器会持续提示不安全,如果你只是内网临时用,可以接受,但长期来看换成域名是更省心的方案。
GitLab子域名和独立域名哪个更好?
子域名(比如gitlab.company.com)是绝大多数团队的选择,因为不需要额外注册新域名,且与公司主站的Cookie隔离,安全性更好,独立域名(比如gitlab.com)适合做私有化交付的产品,从GitLab配置角度看,两者没有区别,external_url支持任意合法域名,需要注意的是,使用子域名时,如果公司主域名启用了DNSSEC,要确保子域名的DNS记录也在同一管理面板中配置,否则可能出现解析延迟。
GitLab域名配置好后,原有的SSH clone地址怎么变?
SSH地址由external_url中的主机名决定,配置好域名后,项目的SSH克隆链接会从git@192.168.1.100:group/project.git变成git@gitlab.company.com:group/project.git,但你的本地SSH Key不需要重新生成,只要确保~/.ssh/config里没有残留旧主机的配置,如果旧IP还在内网,部分成员会继续用旧地址拉取,这通常不产生冲突,只是不够统一。
配置GitLab域名的过程,本质上就是在告诉GitLab和你的团队成员”以后我们在这里见面”,把external_url改对,把DNS解析走通,把证书装好,剩下的就是让团队成员更新一次本地remote地址,做到这三件事,你的GitLab就已经从”能跑”升级到”好用”了。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/769220.html

