故障描述:一台Web服务器使用Docker宿主NGINX和GitLab服务。其中NGINX、GitLab分别位于两个不同的Docker容器内。某次更新后,客户端提交一个体积较大的Git仓库时,服务器返回“error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large”错误。
故障排查:
在不同的网络环境中复现错误后,首先使用Web确定GitLab可以正常访问,同时使用管理员登录,检查GitLab Web管理面板中对项目及文件大小的限制参数,均远大于用户试图提交的仓库的尺寸。
使用SSH登录远程服务器,检查容器状态:
docker ps
所有容器正确运行,使用docker ps给出的GitLab容器ID进入GitLab容器的Shell:
docker exec -it ID_OF_GITLAB_CONTAINER /bin/sh
检查位于/etc/gitlab/gitlab.rb中的nginx['client_max_body_size']属性的值:
vi /etc/gitlab/gitlab.rb
并修改为0(无限制)
nginx['client_max_body_size'] = 0
按ESC键并输入“:wq”指令,按回车保存并退出VI,重新配置GitLab:
gitlab-ctl reconfigure
gitlab-ctl hup nginx
发现故障继续,故使用exit指令退到远程服务器Shell,进入NGINX容器的Shell:
docker exec -it ID_OF_NGINX_CONTAINER /bin/sh
检查NGINX配置文件/etc/nginx/nginx.conf:
vi /etc/nginx/nginx.conf
在http {}结点中,添加下列行,修改client_max_body_size为0(无限制):
client_max_body_size 0;
按ESC键并输入“:wq”指令,按回车保存并退出VI,重新配置NGINX:
nginx -s reload
要求客户再次尝试提交,问题解决。
参考资料:
https://docs.gitlab.com/omnibus/settings/nginx.html
https://developer.aliyun.com/article/1306791