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

自建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:38:35