配置反向代理后内网无法访问GitLab且登录报422错误如何解决?
GitLab公网HTTPS正常、内网HTTP访问报422错误解决方案
根因说明
你配置的GitLab external_url为HTTPS协议公网地址,GitLab默认开启CSRF防护,会校验请求来源协议与external_url预设协议是否一致。内网直接走HTTP访问时协议不匹配,CSRF校验失败触发422错误。
修复操作步骤
- 编辑GitLab核心配置文件
/etc/gitlab/gitlab.rb - 调整或补充以下配置项:
- 配置允许的访问主机列表,把内网访问用到的IP、域名加入白名单
gitlab_rails['allowed_hosts'] = ['你的公网GitLab域名', '内网访问GitLab的IP', '内网访问GitLab的域名(如有)'] - 配置CSRF允许的来源规则,放行HTTP协议的内网访问请求
gitlab_rails['csrf_allowed_origins'] = ['http://内网访问GitLab的IP', 'http://内网访问GitLab的域名(如有)'] - 修正Nginx请求头识别规则,自动适配不同访问场景的协议
nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "$scheme", "Host" => "$http_host", "X-Real-IP" => "$remote_addr", "X-Forwarded-For" => "$proxy_add_x_forwarded_for" } - 确认GitLab Nginx开启HTTP端口监听:如果之前为了反向代理关闭了HTTPS监听,保持原有配置即可,确保80端口监听正常
nginx['listen_http'] = true nginx['listen_https'] = false
- 保存配置文件后执行命令生效配置:
gitlab-ctl reconfigure - 重启GitLab服务确保所有配置生效:
gitlab-ctl restart
内容的提问来源于stack exchange,提问作者andreas.teich
相关产品推荐
相关产品推荐

