You need to enable JavaScript to run this app. Nginx反向代理Docker部署的Gitlab静态资源丢失、跳转404问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理Docker部署的Gitlab静态资源丢失、跳转404问题排查

问题根源

你遇到的是Gitlab服务路径和Nginx反向代理规则不匹配的问题,具体原因有两个:

  1. Gitlab默认生成的页面跳转链接、静态资源路径都是根路径格式(比如/projects/new、/assets/logo.png),你当前的Nginx规则仅匹配带/gitlab前缀的请求,不带该前缀的请求不会转发到8086端口,所以直接返回404,静态资源也加载失败。
  2. 你现有proxy_pass规则没有做路径适配,即使请求匹配到/gitlab前缀,也会把整个/gitlab/xxx路径传给后端Gitlab,而Gitlab默认没有对应前缀的路由,也会触发异常。

解决步骤

步骤1:修改Gitlab配置,指定子路径前缀

这是Gitlab官方推荐的子路径代理方案,可以从根源上让Gitlab生成的所有链接都自动携带/gitlab前缀:

  • 如果你是Docker部署的Gitlab,启动容器时新增环境变量即可:
    docker run -e GITLAB_EXTERNAL_URL="http://example.com/gitlab" 【其他原有启动参数】
    
  • 如果你是直接部署或者容器已运行,进入容器修改配置文件/etc/gitlab/gitlab.rb,找到external_url配置项修改为:
    external_url 'http://example.com/gitlab'
    
    修改完成后执行gitlab-ctl reconfigure让配置生效。

步骤2:调整Nginx反向代理配置

替换你原本的location规则为以下内容:

location /gitlab {
    proxy_pass http://127.0.0.1:8086;
    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;
    proxy_redirect off;
}

配置修改后执行nginx -s reload重载Nginx配置即可。


效果验证

配置完成后访问http://example.com/gitlab,所有页面跳转、静态资源、功能按钮都会正常工作,路径会自动变为http://example.com/gitlab/projects/new这类带前缀的格式,不会再出现404问题。

  • 异常访问效果:异常访问效果
  • 正常访问效果:正常访问效果

内容的提问来源于stack exchange,提问作者龍が如く

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 10:36:01