Nginx反向代理Docker部署的Gitlab静态资源丢失、跳转404问题排查
问题根源
你遇到的是Gitlab服务路径和Nginx反向代理规则不匹配的问题,具体原因有两个:
- Gitlab默认生成的页面跳转链接、静态资源路径都是根路径格式(比如
/projects/new、/assets/logo.png),你当前的Nginx规则仅匹配带/gitlab前缀的请求,不带该前缀的请求不会转发到8086端口,所以直接返回404,静态资源也加载失败。 - 你现有
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,提问作者龍が如く
相关产品推荐
相关产品推荐

