)
GitLab自定义域名配置全攻略从Nginx反向代理到安全防护附避坑指南当你第一次在浏览器地址栏输入git.yourcompany.com却发现跳转到一堆晦涩的IP和端口时就该意识到自定义域名的重要性了。作为代码托管的门面一个专业的GitLab域名不仅能提升团队协作体验更是企业技术形象的展示窗口。本文将手把手带你完成从基础配置到高阶防护的全流程特别针对那些官方文档没细说、社区讨论常踩坑的细节问题。1. 环境准备与基础配置在开始之前请确保你拥有一台已安装GitLab的Linux服务器社区版或企业版均可有效的域名所有权及DNS解析管理权限基础Linux命令行操作能力1.1 修改GitLab核心配置首先通过SSH连接到服务器用vim打开主配置文件sudo vim /etc/gitlab/gitlab.rb找到这两个关键参数进行修改external_url https://git.yourdomain.com nginx[listen_port] 8800这里有几个容易出错的细节如果启用HTTPSexternal_url必须包含https://前缀端口号避免使用80、443等常见端口防止与后续Nginx冲突域名建议使用二级域名如git.xxx.com而非主域名保存后执行配置生效命令sudo gitlab-ctl reconfigure sudo gitlab-ctl restart注意reconfigure命令会重置部分自定义配置如有其他定制项需提前备份2. Nginx反向代理深度配置2.1 基础代理设置在/etc/nginx/conf.d/gitlab.conf中创建如下配置server { listen 80; server_name git.yourdomain.com; location / { proxy_pass http://localhost:8800; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; } }测试并重载Nginx配置sudo nginx -t sudo systemctl reload nginx2.2 大文件传输优化Git仓库经常需要传输大型二进制文件默认配置可能导致push失败。在location块中添加client_max_body_size 512m;推荐值参考使用场景建议值常规代码仓库50m含设计稿仓库200m机器学习数据集1024m2.3 强制HTTPS配置在80端口的server块中添加跳转return 301 https://$host$request_uri;然后配置443端口serverserver { listen 443 ssl; server_name git.yourdomain.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; # 其余配置与HTTP版本相同 }3. 安全防护增强措施3.1 安全头部注入在Nginx配置中添加这些关键安全头add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection 1; modeblock; add_header X-Content-Type-Options nosniff; add_header Content-Security-Policy default-src self; add_header Strict-Transport-Security max-age63072000; includeSubDomains;各头部作用说明X-Frame-Options防止点击劫持X-XSS-Protection启用XSS过滤器Content-Security-Policy控制资源加载来源HSTS强制浏览器使用HTTPS连接3.2 爬虫屏蔽策略在server块末尾添加if ($http_user_agent ~* (360Spider|Baiduspider|Googlebot|bot|spider|crawl)) { return 403; }常见需要屏蔽的爬虫UA360SpiderBaiduspiderGooglebotMJ12botAhrefsBot4. 高级调优与故障排查4.1 性能优化参数在http上下文中添加这些Nginx全局配置proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; keepalive_timeout 60; client_header_timeout 60; client_body_timeout 60;4.2 常见问题排查问题1502 Bad Gateway检查GitLab服务状态sudo gitlab-ctl status验证端口监听netstat -tulnp | grep 8800查看Nginx错误日志tail -f /var/log/nginx/error.log问题2样式加载异常清除浏览器缓存检查proxy_set_header Host $host是否配置正确确认external_url与访问域名完全一致问题3SSH克隆失败检查/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml中的ssh_host验证DNS解析dig git.yourdomain.com测试SSH连接ssh -T gitgit.yourdomain.com4.3 备份与迁移创建完整备份sudo gitlab-rake gitlab:backup:create备份文件默认存储在/var/opt/gitlab/backups建议额外备份这些关键文件/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json/var/opt/gitlab/nginx/conf迁移到新服务器时先安装相同版本的GitLab然后sudo gitlab-ctl stop sudo cp backup_gitlab.rb /etc/gitlab/gitlab.rb sudo gitlab-ctl reconfigure sudo gitlab-ctl start sudo gitlab-rake gitlab:backup:restore BACKUP备份文件名