自建GitLab CE中GitLab Pages查看Artifacts报404错误求助
问题背景与症状
- 环境:Ubuntu 22.04,Omnibus安装GitLab CE,禁用自带Nginx,使用外部Nginx
- 需求:无需下载,直接通过GitLab Pages预览Artifacts中的HTML报告(phpunit、sitespeed.io等生成)
- 问题:点击Artifacts浏览器中的HTML文件,跳转至Pages链接后出现404错误,示例链接:
https://project.glp.domain.de/-/shop/-/jobs/5511/artifacts/tests/.phpunit-coverage/report/index.html - 已完成配置:
- 修改
/etc/gitlab/gitlab.rb启用Pages并开启访问控制,执行gitlab-ctl reconfigure无报错 - 项目已启用Pages,项目为非公开状态
- 启用Pages详细日志但未获取有效信息
- 修改
- 疑问:仅需浏览Artifacts报告,是否必须添加Pages阶段/任务?
已配置的gitlab.rb关键内容
grep "^[^#;]" gitlab.rb external_url 'https://git.domain.de' gitlab_rails['time_zone'] = 'Europe/Berlin' gitlab_rails['trusted_proxies'] = ['111.222.333.444', '127.0.0.1'] web_server['external_users'] = ['www-data'] nginx['enable'] = false pages_external_url "https://glp.domain.de/" gitlab_pages['enable'] = true gitlab_pages['access_control'] = true alertmanager['flags'] = { 'cluster.advertise-address' => "127.0.0.1:9093", }
phpunit任务CI配置
phpunit: stage: test only: - branches script: - docker exec web ci/run-phpunit.sh - grep -o -a -m 1 -h -E "[0-9]+\.[0-9]+% covered" tests/.phpunit-coverage/report/index.html coverage: '/^\s*\d+.\d+\% covered/' artifacts: when: always paths: - tests/.phpunit-coverage/ expire_in: 1 week
解决方案与排查步骤
核心结论:不需要额外添加Pages阶段/任务
GitLab Pages原生支持直接预览Artifacts中的HTML内容,问题出在配置或路由层面,按以下顺序排查:
1. 外部Nginx的Pages代理配置检查
禁用GitLab自带Nginx后,必须确保外部Nginx正确处理Pages的泛域名请求:
- 配置泛域名
*.glp.domain.de和主域名glp.domain.de的反向代理,指向GitLab Pages默认端口8090 - 关键Nginx配置示例:
server { listen 443 ssl; server_name *.glp.domain.de glp.domain.de; ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; location / { proxy_pass http://127.0.0.1:8090; 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_set_header X-Forwarded-Proto $scheme; } }
- 必须使用泛域名SSL证书,否则子域名请求会出现SSL验证错误
- 配置完成后重启Nginx:
sudo systemctl restart nginx
2. DNS与域名解析验证
- 确认
glp.domain.de和*.glp.domain.de的DNS记录均指向GitLab服务器的公网IP - 用
nslookup project.glp.domain.de测试解析是否正确
3. GitLab Pages服务状态与配置验证
- 检查Pages服务运行状态:
gitlab-ctl status gitlab-pages,确保状态为run - 确认
pages_external_url配置末尾保留斜杠:pages_external_url "https://glp.domain.de/"
4. 权限与访问控制检查
- 非公开项目+开启Pages访问控制时,需确保访问者拥有项目的Reporter及以上权限
- 用项目所有者账号测试链接,排除权限拦截问题
- 查看GitLab Rails日志(
/var/log/gitlab/gitlab-rails/production.log),确认是否有访问被拒绝的记录
5. 日志补充排查
- 查看外部Nginx的访问日志(
/var/log/nginx/access.log)和错误日志(/var/log/nginx/error.log),定位404请求的具体原因 - 检查GitLab Pages日志(
/var/log/gitlab/gitlab-pages/current),启用verbose日志后需重启Pages服务:gitlab-ctl restart gitlab-pages
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

